diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -50,6 +50,7 @@
       yamllint stack.yaml
       yamllint appveyor.yml
       yamllint .travis.yml
+      yamllint .yamllint
     else
       echo "skipping yaml verification..."
     fi
@@ -79,3 +80,4 @@
 branches:
   only:
     - /\d+\.\d+\.\d+\.\d+.*$/
+    - master
diff --git a/ats-pkg.cabal b/ats-pkg.cabal
--- a/ats-pkg.cabal
+++ b/ats-pkg.cabal
@@ -1,5 +1,5 @@
 name:                ats-pkg
-version:             0.2.0.1
+version:             0.3.0.1
 synopsis:            Package manager for ATS
 description:         A collection of scripts to make building ATS projects easy.
 homepage:            https://github.com/vmchale/ats-pkg#readme
@@ -39,13 +39,11 @@
                      , http-client-tls
                      , text
                      , directory
-                     , optparse-applicative
                      , process
                      , parallel-io
                      , unix
                      , dhall
-                     , mtl
-                     , shake-ext >= 0.4.2.0
+                     , shake-ext >= 0.5.0.1
                      , composition-prelude >= 1.1.0.1
   default-language:    Haskell2010
   if flag(development)
@@ -62,16 +60,6 @@
   if flag(development)
     ghc-options: -Werror
   ghc-options:         -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates -Wcompat
-
-test-suite ats-pkg-test
-  type:                exitcode-stdio-1.0
-  hs-source-dirs:      test
-  main-is:             Spec.hs
-  build-depends:       base
-                     , ats-pkg
-                     , hspec
-  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall -Wincomplete-uni-patterns -Wincomplete-record-updates -Wcompat
-  default-language:    Haskell2010
 
 source-repository head
   type:     git
diff --git a/src/Language/ATS/Package/Dependency.hs b/src/Language/ATS/Package/Dependency.hs
--- a/src/Language/ATS/Package/Dependency.hs
+++ b/src/Language/ATS/Package/Dependency.hs
@@ -1,18 +1,31 @@
+{-# LANGUAGE DeriveGeneric     #-}
 {-# LANGUAGE OverloadedStrings #-}
 
-module Language.ATS.Package.Dependency ( fetchDeps
-                                       , fetchFastArithmeticDeps
+module Language.ATS.Package.Dependency ( -- * Functions
+                                         fetchDeps
+                                       -- * Types
+                                       , Dependency (..)
+                                       -- * Dependency constants
+                                       , atsPrelude
+                                       , atsIntinf
+                                       , atsGMP
                                        ) where
 
 import qualified Codec.Archive.Tar                    as Tar
 import           Codec.Compression.GZip               (decompress)
 import           Control.Concurrent.ParallelIO.Global
 import           Control.Monad
+import           Dhall
 import           Network.HTTP.Client                  hiding (decompress)
 import           Network.HTTP.Client.TLS              (tlsManagerSettings)
 import           System.Directory
 
-data Dependency = Dependency String FilePath String
+-- | Type for a dependency
+data Dependency = Dependency { _libName :: String -- ^ Library name, e.g.
+                             , _dir     :: FilePath -- ^ Directory we should unpack to
+                             , _url     :: String -- ^ Url pointing to tarball
+                             }
+    deriving (Eq, Show, Generic)
 
 atsPrelude :: Dependency
 atsPrelude = Dependency "ats2-postiats-0.3.8-prelude" ".atspkg/prelude" "https://downloads.sourceforge.net/project/ats2-lang/ats2-lang/ats2-postiats-0.3.8/ATS2-Postiats-include-0.3.8.tgz"
@@ -22,9 +35,6 @@
 
 atsGMP :: Dependency
 atsGMP = Dependency "atscntrb-libgmp-1.0.4" ".atspkg/contrib/atscntrb-libgmp" "https://registry.npmjs.org/atscntrb-libgmp/-/atscntrb-libgmp-1.0.4.tgz"
-
-fetchFastArithmeticDeps :: IO ()
-fetchFastArithmeticDeps = fetchDeps [atsPrelude, atsIntinf, atsGMP]
 
 fetchDeps :: [Dependency] -> IO ()
 fetchDeps deps = do
diff --git a/src/Language/ATS/Package/Type.hs b/src/Language/ATS/Package/Type.hs
--- a/src/Language/ATS/Package/Type.hs
+++ b/src/Language/ATS/Package/Type.hs
@@ -44,8 +44,8 @@
 getConfig :: MonadIO m => m Pkg
 getConfig = liftIO (input auto "./atspkg.dhall")
 
-asTarget :: Text -> FilePath
-asTarget m = TL.unpack m -<.> "1"
+manTarget :: Text -> FilePath
+manTarget m = TL.unpack m -<.> "1"
 
 mkInstall :: Rules ()
 mkInstall =
@@ -58,7 +58,7 @@
         void $ zipWithM copyFile' bins binDest
         case man config of
             Just mt -> do
-                let mt' = asTarget mt
+                let mt' = manTarget mt
                     manDest = (home <> "/.local/share/man/man1/") <> mt'
                 need [mt']
                 copyFile' mt' manDest
@@ -79,21 +79,23 @@
         need tests
         mapM_ cmd_ tests
 
--- TODO need @atspkg.dhall@
 pkgToAction :: Pkg -> Rules ()
-pkgToAction (Pkg bs ts mt) = do
+pkgToAction (Pkg bs ts mt v) = do
+    action (need ["atspkg.dhall"])
     mapM_ g (bs ++ ts)
     let bins = TL.unpack . target <$> bs
     case mt of
-        (Just m) -> want (asTarget m : bins)
+        (Just m) -> want (manTarget m : bins)
         Nothing  -> want bins
 
-    where g (Bin s t ls gc') = atsBin gc' (TL.unpack <$> ls) (TL.unpack s) (TL.unpack t)
+    where g (Bin s t ls gc') = atsBin (Version v) gc' (TL.unpack <$> ls) (TL.unpack s) (TL.unpack t)
 
+-- TODO configuration for a library?
+
 data Bin = Bin { src :: Text, target :: Text, libs :: [Text], gc :: Bool }
     deriving (Show, Eq, Generic, Interpret)
 
-data Pkg = Pkg { bin :: [Bin], test :: [Bin], man :: Maybe Text }
+data Pkg = Pkg { bin :: [Bin], test :: [Bin], man :: Maybe Text, version :: [Integer] }
     deriving (Show, Eq, Generic, Interpret)
 
 printConfig :: IO ()
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -3,8 +3,8 @@
 packages:
   - '.'
 extra-deps:
-  - shake-ext-0.4.0.2
-  - composition-prelude-1.1.0.0
+  - shake-ext-0.5.0.1
+  - composition-prelude-1.1.0.1
   - language-ats-0.1.0.3
 flags:
   ats-pkg:
diff --git a/test/Spec.hs b/test/Spec.hs
deleted file mode 100644
--- a/test/Spec.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-import           Language.ATS.Package
-import           Test.Hspec
-
-main :: IO ()
-main = hspec $
-    describe "head" $
-        parallel $ it "gets the head of an infinite list" $
-            head [1..] `shouldBe` 1
