diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,7 +2,9 @@
 
 [![Build Status](https://api.travis-ci.org/haskell-nix/hnix.svg)](https://travis-ci.org/haskell-nix/hnix)
 [![Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/haskell-nix/Lobby)
-<sup>([Hackage Matrix Builder](https://matrix.hackage.haskell.org/package/hnix))</sup>
+[![Hackage](https://img.shields.io/hackage/v/hnix?color=purple&label=Latest%20release)](https://hackage.haskell.org/package/hnix)
+[![Hackage Matrix Builder](https://img.shields.io/badge/Hackage%20Matrix-Builder-green)](https://matrix.hackage.haskell.org/package/hnix)
+[![Dependencies](https://img.shields.io/hackage-deps/v/hnix?label=Dependencies)](https://packdeps.haskellers.com/feed?needle=hnix)
 
 Haskell parser, evaluator and type checker for the Nix language.
 
@@ -13,18 +15,18 @@
 
 ## Getting Started
 
-```bash
+```
 $ git clone --recursive https://github.com/haskell-nix/hnix.git
 ...
 $ cd hnix
 $ nix-shell
-$ cabal new-configure --enable-tests
-$ cabal new-build
-$ cabal new-test
+$ cabal v2-configure --enable-tests
+$ cabal v2-build
+$ cabal v2-test
 # To run all of the tests, which takes up to a minute:
-$ env ALL_TESTS=yes cabal new-test
+$ env ALL_TESTS=yes cabal v2-test
 # To run only specific tests (see `tests/Main.hs` for a list)
-$ env NIXPKGS_TESTS=yes PRETTY_TESTS=1 cabal new-test
+$ env NIXPKGS_TESTS=yes PRETTY_TESTS=1 cabal v2-test
 $ ./dist/build/hnix/hnix --help
 ```
 
@@ -35,8 +37,8 @@
 
 ```
 $ nix-shell
-$ cabal configure --enable-tests --enable-profiling --flags=profiling --flags=tracing
-$ cabal build
+$ cabal v2-configure --enable-tests --enable-profiling --flags=profiling --flags=tracing
+$ cabal v2-build
 $ ./dist/build/hnix/hnix -v5 --trace <args> +RTS -xc
 ```
 
@@ -49,9 +51,9 @@
 
 ```
 $ nix-shell --arg doBenchmarks true
-$ cabal configure --enable-tests --enable-benchmarks
-$ cabal build
-$ cabal bench
+$ cabal v2-configure --enable-tests --enable-benchmarks
+$ cabal v2-build
+$ cabal v2-bench
 ```
 
 ## Building with profiling enabled
@@ -60,8 +62,8 @@
 
 ```
 $ nix-shell
-$ cabal configure --enable-tests --enable-profiling --flags=profiling
-$ cabal build
+$ cabal v2-configure --enable-tests --enable-profiling --flags=profiling
+$ cabal v2-build
 $ ./dist/build/hnix/hnix <args> +RTS -p
 ```
 
@@ -81,8 +83,10 @@
 If you're on macOS, you can use the binary cache at Cachix to avoid building
 the specific dependencies used by hnix. Just use these commands:
 
-    nix-env -iA cachix -f https://github.com/NixOS/nixpkgs/tarball/db557aab7b690f5e0e3348459f2e4dc8fd0d9298
-    cachix use hnix
+```
+$ nix-env -iA cachix -f https://github.com/NixOS/nixpkgs/tarball/db557aab7b690f5e0e3348459f2e4dc8fd0d9298
+$ cachix use hnix
+```
 
 ## How you can help
 
@@ -96,9 +100,10 @@
 [Gitter](https://gitter.im/haskell-nix/Lobby).
 
 When you're ready to submit a pull request, test it with:
+
 ```
-git submodule update --init --recursive
-nix-shell --run "LANGUAGE_TESTS=yes cabal test"
+$ git submodule update --init --recursive
+$ nix-shell --run "LANGUAGE_TESTS=yes cabal v2-test"
 ```
 
 Make sure that all the tests that were passing prior to your PR are still
@@ -111,5 +116,5 @@
 command:
 
 ```
-./result/bin/hnix --eval -E "import <nixpkgs> {}" --find
+$ ./result/bin/hnix --eval -E "import <nixpkgs> {}" --find
 ```
diff --git a/hnix.cabal b/hnix.cabal
--- a/hnix.cabal
+++ b/hnix.cabal
@@ -1,5 +1,5 @@
 name:           hnix
-version:        0.7.1
+version:        0.8.0
 synopsis:       Haskell implementation of the Nix language
 description:    Haskell implementation of the Nix language.
 category:       System, Data, Nix
@@ -850,7 +850,7 @@
       src
   ghc-options: -Wall -fprint-potential-instances
   build-depends:
-      aeson >= 1.4.2 && < 1.5
+      aeson >= 1.4.2 && < 1.6
     , array >=0.4 && <0.6
     , base >=4.11 && <5
     , binary >= 0.8.5 && < 0.9
@@ -860,7 +860,6 @@
     , contravariant >= 1.5 && < 1.6
     , data-fix >= 0.2.0 && <  0.3
     , deepseq >=1.4.3 && <1.5
-    , dependent-sum >= 0.4 && < 0.5 || >= 0.6.2.0 && < 0.7
     , deriving-compat >=0.3 && <0.6
     , directory >= 1.3.1 && < 1.4
     , exceptions >= 0.10.0 && < 0.11
@@ -868,8 +867,8 @@
     , free >= 5.1 && < 5.2
     , hashable >=1.2.5 && < 1.4
     , hashing >= 0.1.0 && < 0.2
-    , hnix-store-core >= 0.1.0 && < 0.2
-    , http-client >= 0.5.14 && < 0.6 || >= 0.6.4 && < 0.7
+    , hnix-store-core >= 0.1.0 && < 0.3
+    , http-client >= 0.5.14 && < 0.6 || >= 0.6.4 && < 0.8
     , http-client-tls >= 0.3.5 && < 0.4
     , http-types >= 0.12.2 && < 0.13
     , interpolate >= 0.2.0 && < 0.3
@@ -891,11 +890,12 @@
     , semialign >= 1 && < 1.2
     , semialign-indexed >= 1 && < 1.2
     , semigroups >=0.18 && <0.19 || >= 0.19.1 && < 0.20
+    , some >= 1.0.1 && < 1.1
     , split >= 0.2.3 && < 0.3
     , syb >= 0.7 && < 0.8
     , template-haskell
     , text >= 1.2.3 && < 1.3
-    , these >= 1.0.1 && < 1.1
+    , these >= 1.0.1 && < 1.2
     , time >= 1.8.0 && < 1.9 || >= 1.9.3 && < 1.10
     , transformers >= 0.5.5 && < 0.6
     , transformers-base >= 0.4.5 && < 0.5
@@ -915,7 +915,7 @@
       , cryptohash-sha256 >= 0.11.101 && < 0.12
       , cryptohash-sha512 >= 0.11.100 && < 0.12
       , haskeline >= 0.7.4.2 && < 0.8
-      , pretty-show >= 1.9.5 && < 1.10
+      , pretty-show >= 1.9.5 && < 1.11
       , serialise >= 0.2.1 && < 0.3
   -- if !flag(profiling)
   --   build-depends:
@@ -995,7 +995,6 @@
     , cryptohash-sha512
     , data-fix
     , deepseq >=1.4.3 && <1.5
-    , dependent-sum
     , directory
     , exceptions
     , filepath
diff --git a/main/Repl.hs b/main/Repl.hs
--- a/main/Repl.hs
+++ b/main/Repl.hs
@@ -53,7 +53,7 @@
 import           Control.Monad.State.Strict
 
 import           System.Console.Haskeline.MonadException
-import           System.Console.Repline
+import           System.Console.Repline        hiding ( options )
 import           System.Environment
 import           System.Exit
 
diff --git a/src/Nix.hs b/src/Nix.hs
--- a/src/Nix.hs
+++ b/src/Nix.hs
@@ -110,7 +110,10 @@
   args <- traverse (traverse eval') $ map (second parseArg) (arg opts) ++ map
     (second mkStr)
     (argstr opts)
-  compute evaluator expr (argmap args) handler
+  evaluator mpath expr >>= \f -> demand f $ \f' ->
+    processResult handler =<< case f' of
+      NVClosure _ g -> g (argmap args)
+      _             -> pure f
  where
   parseArg s = case parseNixText s of
     Success x   -> x
@@ -119,11 +122,6 @@
   eval' = (normalForm =<<) . nixEvalExpr mpath
 
   argmap args = nvSet (M.fromList args) mempty
-
-  compute ev x args p = ev mpath x >>= \f -> demand f $ \f' ->
-    processResult p =<< case f' of
-      NVClosure _ g -> g args
-      _             -> pure f
 
 processResult
   :: forall e t f m a
diff --git a/src/Nix/Atoms.hs b/src/Nix/Atoms.hs
--- a/src/Nix/Atoms.hs
+++ b/src/Nix/Atoms.hs
@@ -22,9 +22,11 @@
 -- they appear in both the parsed AST (in the form of literals) and
 -- the evaluated form.
 data NAtom
+  -- | An URI like @https://example.com@.
+  = NURI Text
   -- | An integer. The c nix implementation currently only supports
   -- integers that fit in the range of 'Int64'.
-  = NInt Integer
+  | NInt Integer
   -- | A floating point number
   | NFloat Float
   -- | Booleans.
@@ -40,6 +42,7 @@
 
 -- | Translate an atom into its nix representation.
 atomText :: NAtom -> Text
+atomText (NURI   t) = t
 atomText (NInt   i) = pack (show i)
 atomText (NFloat f) = pack (showNixFloat f)
   where
diff --git a/src/Nix/Builtins.hs b/src/Nix/Builtins.hs
--- a/src/Nix/Builtins.hs
+++ b/src/Nix/Builtins.hs
@@ -191,10 +191,11 @@
 
           strict = derivationStrict drvAttrs;
 
-          commonAttrs = drvAttrs // (builtins.listToAttrs outputsList) //
-            { all = map (x: x.value) outputsList;
-              inherit drvAttrs;
-            };
+          commonAttrs = drvAttrs
+            // (builtins.listToAttrs outputsList)
+            // { all = map (x: x.value) outputsList;
+                 inherit drvAttrs;
+               };
 
           outputToAttrListElement = outputName:
             { name = outputName;
@@ -1347,6 +1348,7 @@
 typeOf :: MonadNix e t f m => NValue t f m -> m (NValue t f m)
 typeOf v = demand v $ toValue . principledMakeNixStringWithoutContext . \case
   NVConstant a -> case a of
+    NURI   _ -> "string"
     NInt   _ -> "int"
     NFloat _ -> "float"
     NBool  _ -> "bool"
diff --git a/src/Nix/Lint.hs b/src/Nix/Lint.hs
--- a/src/Nix/Lint.hs
+++ b/src/Nix/Lint.hs
@@ -300,13 +300,14 @@
     go f l c =
       [(Text.pack "file", f), (Text.pack "line", l), (Text.pack "col", c)]
 
-  evalConstant c = mkSymbolic [TConstant [go c]]
+  evalConstant c = mkSymbolic [go c]
    where
     go = \case
-      NInt   _ -> TInt
-      NFloat _ -> TFloat
-      NBool  _ -> TBool
-      NNull    -> TNull
+      NURI   _ -> TStr
+      NInt   _ -> TConstant [TInt]
+      NFloat _ -> TConstant [TFloat]
+      NBool  _ -> TConstant [TBool]
+      NNull    -> TConstant [TNull]
 
   evalString      = const $ mkSymbolic [TStr]
   evalLiteralPath = const $ mkSymbolic [TPath]
diff --git a/src/Nix/Type/Infer.hs b/src/Nix/Type/Infer.hs
--- a/src/Nix/Type/Infer.hs
+++ b/src/Nix/Type/Infer.hs
@@ -442,6 +442,7 @@
   evalConstant c = return $ Judgment As.empty [] (go c)
    where
     go = \case
+      NURI   _ -> typeString
       NInt   _ -> typeInt
       NFloat _ -> typeFloat
       NBool  _ -> typeBool
diff --git a/src/Nix/Value.hs b/src/Nix/Value.hs
--- a/src/Nix/Value.hs
+++ b/src/Nix/Value.hs
@@ -413,6 +413,7 @@
 valueType :: NValueF a m r -> ValueType
 valueType = \case
   NVConstantF a -> case a of
+    NURI   _ -> TString NoContext
     NInt   _ -> TInt
     NFloat _ -> TFloat
     NBool  _ -> TBool
diff --git a/src/Nix/Var.hs b/src/Nix/Var.hs
--- a/src/Nix/Var.hs
+++ b/src/Nix/Var.hs
@@ -12,6 +12,7 @@
 import           Data.IORef
 import           Data.Maybe
 import           Data.STRef
+import           Type.Reflection ((:~:)(Refl))
 
 import           Unsafe.Coerce
 
diff --git a/src/Nix/XML.hs b/src/Nix/XML.hs
--- a/src/Nix/XML.hs
+++ b/src/Nix/XML.hs
@@ -30,6 +30,7 @@
   phi :: NValue' t f m (WithStringContext Element) -> WithStringContext Element
   phi = \case
     NVConstant' a -> case a of
+      NURI   t -> return $ mkElem "string" "value" (Text.unpack t)
       NInt   n -> return $ mkElem "int" "value" (show n)
       NFloat f -> return $ mkElem "float" "value" (show f)
       NBool  b -> return $ mkElem "bool" "value" (if b then "true" else "false")
