diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # shake-dhall
 
+## 0.1.1.0
+
+  * Add functions `dhallDeps` and `needDhallCli` in `Development.Shake.Dhall`
+
 ## 0.1.0.0
 
 Initial release
diff --git a/shake-dhall.cabal b/shake-dhall.cabal
--- a/shake-dhall.cabal
+++ b/shake-dhall.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            shake-dhall
-version:         0.1.0.0
+version:         0.1.1.0
 license:         BSD3
 license-file:    LICENSE
 copyright:       Copyright: (c) 2020 Vanessa McHale
diff --git a/src/Development/Shake/Dhall.hs b/src/Development/Shake/Dhall.hs
--- a/src/Development/Shake/Dhall.hs
+++ b/src/Development/Shake/Dhall.hs
@@ -1,13 +1,32 @@
 module Development.Shake.Dhall ( needDhall
+                               , needDhallCli
+                               , dhallDeps
                                ) where
 
+import           Control.Monad             (filterM, (<=<))
 import           Control.Monad.IO.Class    (liftIO)
 import           Data.Containers.ListUtils (nubOrd)
-import           Development.Shake         (Action, need)
+import           Development.Shake         (Action, Stdout (Stdout), command,
+                                            doesFileExist, need)
 import           Dhall.Dep
 
--- | Need some @.dhall@ files and imported dependencies
+-- | 'need' some @.dhall@ files and imported dependencies
 needDhall :: [FilePath] -> Action ()
-needDhall fps = do
-    transDeps <- liftIO (concat <$> traverse getAllFileDeps fps)
-    need (fps ++ nubOrd transDeps)
+needDhall fps =
+    need =<< liftIO (nubOrd . concat . (fps:) <$> traverse getAllFileDeps fps)
+
+-- | Same as 'needDhallCli' but shells out to the command-linen executable
+--
+-- @since 0.1.1.0
+needDhallCli :: [FilePath] -> Action ()
+needDhallCli =
+    need . concat <=< traverse dhallDeps
+
+-- | Uses @dhall resolve --transitive-dependencies@ to work; command-line tool
+-- must be installed.
+--
+-- @since 0.1.1.0
+dhallDeps :: FilePath -> Action [FilePath]
+dhallDeps inp = do
+    (Stdout out) <- command [] "dhall" ["resolve", "--transitive-dependencies", "--file", inp]
+    (inp:) <$> filterM doesFileExist (lines out)
