diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # cpkg
 
+## 0.2.3.6
+
+  * Use `dhall` 1.27.0
+
 ## 0.2.3.5
 
   * Use `lzlib` 0.3.0.0
@@ -13,7 +17,7 @@
   * Add `find` subcommand
 
 ## 0.2.3.2
-    
+
   * Add `.lz` support
 
 ## 0.2.3.1
diff --git a/cpkg.cabal b/cpkg.cabal
--- a/cpkg.cabal
+++ b/cpkg.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.18
 name:               cpkg
-version:            0.2.3.5
+version:            0.2.3.6
 license:            BSD3
 license-file:       LICENSE
 copyright:          Copyright: (c) 2018-2019 Vanessa McHale
@@ -104,10 +104,10 @@
         lzlib >=0.3.0.0
 
     if impl(ghc <8.4)
-        build-depends: dhall >=1.23.0 && <1.25.0
+        build-depends: dhall >=1.27.0 && <1.25.0
 
     else
-        build-depends: dhall >=1.23.0
+        build-depends: dhall >=1.27.0
 
     if (flag(development) && impl(ghc <=8.2))
         ghc-options: -Werror
diff --git a/dhall/cpkg-prelude.dhall b/dhall/cpkg-prelude.dhall
--- a/dhall/cpkg-prelude.dhall
+++ b/dhall/cpkg-prelude.dhall
@@ -588,7 +588,7 @@
 let makeGnuLibrary =
   λ(pkg : { name : Text, version : List Natural}) →
     simplePackage pkg ⫽
-      { pkgUrl = "https://mirrors.ocf.berkeley.edu/gnu/lib${pkg.name}/lib${pkg.name}-${showVersion pkg.version}.tar.xz"
+      { pkgUrl = "https://ftp.gnu.org/pub/gnu/lib${pkg.name}/lib${pkg.name}-${showVersion pkg.version}.tar.xz"
       , pkgSubdir = "lib${pkg.name}-${showVersion pkg.version}"
       }
 in
@@ -751,7 +751,7 @@
 in
 
 let mkPy3Path =
-  mkPyPath [3,7]
+  mkPyPath [3,8]
 in
 
 {- Write a cross-compilation configuration file for use with meson -}
@@ -937,15 +937,15 @@
 in
 
 let python3Build =
-  pythonBuild [3,7]
+  pythonBuild [3,8]
 in
 
 let python3Install =
-  pythonInstall [3,7]
+  pythonInstall [3,8]
 in
 
 let python3Package =
-  pythonPackage [3,7]
+  pythonPackage [3,8]
 in
 
 let python2Package =
@@ -1031,7 +1031,7 @@
 in
 
 let mkPy3Wrapper =
-  mkPyWrapper [3,7]
+  mkPyWrapper [3,8]
 in
 
 let mkPy2Wrapper =
@@ -1047,7 +1047,7 @@
 in
 
 let installWithPy3Wrappers =
-  installWithPyWrappers [3,7]
+  installWithPyWrappers [3,8]
 in
 
 {- This is used to make bash scripts that wrap an executable. Since executables
diff --git a/pkgs/pkg-set.dhall b/pkgs/pkg-set.dhall
--- a/pkgs/pkg-set.dhall
+++ b/pkgs/pkg-set.dhall
@@ -2,6 +2,9 @@
 let concatMapSep = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Text/concatMapSep
 in
 
+let concat = https://raw.githubusercontent.com/dhall-lang/dhall-lang/dbcf50c27b1592a6acfd38cb3ba976e3a36b74fe/Prelude/Text/concat
+in
+
 let concatMapText = https://raw.githubusercontent.com/dhall-lang/dhall-lang/9f259cd68870b912fbf2f2a08cd63dc3ccba9dc3/Prelude/Text/concatMap
 in
 
@@ -3981,10 +3984,52 @@
         }
 in
 
--- https://versaweb.dl.sourceforge.net/project/sbcl/sbcl/1.5.7/sbcl-1.5.7-x86-64-linux-binary.tar.bz2
--- http://www.xach.com/lisp/buildapp.tgz
+let subversion =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "subversion", version = v } ⫽
+        { pkgUrl = "https://www-eu.apache.org/dist/subversion/subversion-${prelude.showVersion v}.tar.bz2"
+        , pkgDeps = [ prelude.unbounded "apr"
+                    , prelude.unbounded "apr-util"
+                    , prelude.unbounded "sqlite"
+                    , prelude.unbounded "lz4"
+                    , prelude.unbounded "zlib"
+                    , prelude.unbounded "utf8proc"
+                    ]
+        , pkgBuildDeps = [ prelude.unbounded "pkg-config" ]
+        , installCommand = prelude.installWithBinaries [ "bin/svn" ]
+        }
+in
 
+let utf8proc =
+  λ(v : List Natural) →
+    let versionString = prelude.showVersion v in
+    prelude.simplePackage { name = "utf8proc", version = v } ⫽ prelude.cmakePackage ⫽
+        { pkgUrl = "https://github.com/JuliaStrings/utf8proc/archive/v${versionString}.tar.gz" }
+in
+
+let apr =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "apr", version = v } ⫽
+        { pkgUrl = "https://www-eu.apache.org/dist/apr/apr-${prelude.showVersion v}.tar.bz2"
+        , pkgStream = False
+        }
+in
+
+let apr-util =
+  λ(v : List Natural) →
+    prelude.simplePackage { name = "apr-util", version = v } ⫽
+        { pkgUrl = "https://www-eu.apache.org/dist/apr/apr-util-${prelude.showVersion v}.tar.bz2"
+        , pkgDeps = [ prelude.unbounded "apr" ]
+        , configureCommand =
+            λ(cfg : types.BuildVars) →
+              prelude.configureWithFlags [ "--with-apr=${concat cfg.linkDirs}/../" ] cfg
+        , pkgStream = False
+        }
+in
+
 [ alsa-lib [1,1,9]
+, apr [1,7,0]
+, apr-util [1,6,1]
 , at-spi-atk { version = [2,33], patch = 2 }
 , at-spi-core { version = [2,33], patch = 2 }
 , atk { version = [2,33], patch = 3 }
@@ -4159,7 +4204,7 @@
 , lmdb [0,9,23]
 , lua [5,3,5]
 , lunzip [1,11]
-, lz4 [1,9,1]
+, lz4 [1,9,2]
 , lzip [1,21]
 , lziprecover [1,21]
 , lzlib [1,11]
@@ -4172,11 +4217,11 @@
 , mercury
 , mesa [19,0,5]
 , meson [0,51,2]
+, mosh [1,3,2]
+, motif [2,3,8]
 , mpc [1,1,0]
 , mpfr [4,0,2]
 , mpg123 [1,25,12]
-, mosh [1,3,2]
-, motif [2,3,8]
 , musl [1,1,20]
 , nano [4,3]
 , nasm [2,14]
@@ -4208,7 +4253,7 @@
 , pygobject { version = [2,28], patch = 7 }
 , pygtk { version = [2,24], patch = 0 }
 , python [2,7,16]
-, python [3,7,4]
+, python [3,8,0]
 , qrencode [4,0,2]
 , qt { version = [5,13], patch = 0 }
 , quazip [0,8,1]
@@ -4226,7 +4271,8 @@
 , sdl2 [2,0,10]
 , sed [4,7]
 , shared-mime-info [1,10]
-, sqlite { year = 2019, version = [3,29,0] }
+, sqlite { year = 2019, version = [3,30,0] }
+, subversion [1,12,2]
 , swig [3,0,12]
 , swi-prolog [8,0,3]
 , tar [1,32]
@@ -4235,6 +4281,7 @@
 , tesseract [4,0,0]
 , time [1,9]
 , unistring [0,9,10]
+, utf8proc [2,4,0]
 , util-linux { version = [2,34] }
 , util-macros [1,19,2]
 , vala { version = [0,45], patch = 3 }
diff --git a/src/CPkgPrelude.hs b/src/CPkgPrelude.hs
--- a/src/CPkgPrelude.hs
+++ b/src/CPkgPrelude.hs
@@ -15,8 +15,8 @@
                    , MonadIO (..)
                    , Void
                    -- * Dhall reëxports
-                   , Inject
-                   , Interpret
+                   , ToDhall
+                   , FromDhall
                    -- * hashable reëxports
                    , Hashable
                    -- * Exports from "Data.Binary"
@@ -45,7 +45,7 @@
 import           Data.Hashable             (Hashable)
 import           Data.Text.Prettyprint.Doc
 import           Data.Void                 (Void)
-import           Dhall                     (Inject, Interpret)
+import           Dhall                     (FromDhall, ToDhall)
 import           GHC.Generics              (Generic)
 import           GHC.Natural               (Natural)
 import           Lens.Micro                (Lens', over)
diff --git a/src/Package/C/Dhall.hs b/src/Package/C/Dhall.hs
--- a/src/Package/C/Dhall.hs
+++ b/src/Package/C/Dhall.hs
@@ -10,7 +10,7 @@
 maybeMod v | v >= Verbose = detailed
            | otherwise = id
 
-getDhall :: Interpret a => Verbosity -> FilePath -> IO a
+getDhall :: FromDhall a => Verbosity -> FilePath -> IO a
 getDhall v = maybeMod v . inputFile auto
 
 getCPkg :: Verbosity -> FilePath -> IO CPkg
diff --git a/src/Package/C/Dhall/Type.hs b/src/Package/C/Dhall/Type.hs
--- a/src/Package/C/Dhall/Type.hs
+++ b/src/Package/C/Dhall/Type.hs
@@ -31,10 +31,10 @@
                            , buildArch    :: Arch
                            , static       :: Bool
                            , cpus         :: Natural
-                           } deriving (Generic, Inject)
+                           } deriving (Generic, ToDhall)
 
 data EnvVar = EnvVar { var :: T.Text, value :: T.Text }
-            deriving (Generic, Interpret)
+            deriving (Generic, FromDhall)
 
 data Command = CreateDirectory { dir :: T.Text }
              | MakeExecutable { file :: T.Text }
@@ -49,7 +49,7 @@
              | Write { contents :: T.Text, file :: T.Text }
              | CopyFile { src :: T.Text, dest :: T.Text }
              | Patch { patchContents :: T.Text }
-             deriving (Generic, Interpret)
+             deriving (Generic, FromDhall)
 
 data CPkg = CPkg { pkgName          :: T.Text
                  , pkgVersion       :: [ Natural ]
@@ -63,7 +63,7 @@
                  , installCommand   :: BuildVars -> [ Command ]
                  -- TODO: add "description" field for printing
                  -- TODO: add "test" command for e.g. `make check`
-                 } deriving (Generic, Interpret)
+                 } deriving (Generic, FromDhall)
 
 preDeps :: Doc a -> [ Dep ] -> Doc a
 preDeps _ []   = ""
diff --git a/src/Package/C/PackageSet.hs b/src/Package/C/PackageSet.hs
--- a/src/Package/C/PackageSet.hs
+++ b/src/Package/C/PackageSet.hs
@@ -38,7 +38,7 @@
         Nothing -> unfoundPackage
 
 newtype PackageSetDhall = PackageSetDhall { listPackages :: [ Dhall.CPkg ] }
-    deriving Interpret
+    deriving FromDhall
 
 instance Pretty PackageSetDhall where
     pretty (PackageSetDhall set) = vdisplay (intersperse hardline (pretty <$> set)) <> hardline
diff --git a/src/Package/C/Triple/Type.hs b/src/Package/C/Triple/Type.hs
--- a/src/Package/C/Triple/Type.hs
+++ b/src/Package/C/Triple/Type.hs
@@ -19,7 +19,7 @@
                                  , os           :: OS
                                  , abi          :: Maybe ABI
                                  }
-                                 deriving (Eq, Ord, Hashable, Binary, Generic, Inject)
+                                 deriving (Eq, Ord, Hashable, Binary, Generic, ToDhall)
 
 instance Pretty TargetTriple where
     pretty (TargetTriple a (Just m) o (Just ab)) = dashed [pretty a, pretty m, pretty o, pretty ab]
@@ -34,7 +34,7 @@
                   | Apple
                   | IBM
                   | PC
-                  deriving (Eq, Ord, Hashable, Binary, Generic, Inject)
+                  deriving (Eq, Ord, Hashable, Binary, Generic, ToDhall)
 
 instance Pretty Manufacturer where
     pretty Unknown = "unknown"
@@ -65,7 +65,7 @@
           | MipsIsa32r6
           | MipsIsa64r6El
           | MipsIsa64r6
-          deriving (Eq, Ord, Hashable, Binary, Generic, Inject)
+          deriving (Eq, Ord, Hashable, Binary, Generic, ToDhall)
 
 instance Pretty Arch where
     pretty X64           = "x86_64"
@@ -98,7 +98,7 @@
          | GNUeabihf
          | GNUspe
          | MinGw
-         deriving (Eq, Ord, Hashable, Binary, Generic, Inject)
+         deriving (Eq, Ord, Hashable, Binary, Generic, ToDhall)
 
 instance Pretty ABI where
     pretty GNU       = "gnu"
@@ -123,7 +123,7 @@
         | Hurd
         | Android
         | NoOs
-        deriving (Eq, Ord, Hashable, Binary, Generic, Inject)
+        deriving (Eq, Ord, Hashable, Binary, Generic, ToDhall)
         -- IRIX? OpenSSL OSes?
 
 instance Pretty OS where
diff --git a/src/Package/C/Type/Shared.hs b/src/Package/C/Type/Shared.hs
--- a/src/Package/C/Type/Shared.hs
+++ b/src/Package/C/Type/Shared.hs
@@ -15,8 +15,8 @@
                   | Upper { upper :: Version }
                   | LowerUpper { lower :: Version, upper :: Version }
                   | NoBound
-                  deriving (Generic, Interpret)
+                  deriving (Generic, FromDhall)
 
 data Dep = Dep { name  :: T.Text
                , bound :: VersionBound
-               } deriving (Generic, Interpret)
+               } deriving (Generic, FromDhall)
diff --git a/src/Package/C/Type/Version.hs b/src/Package/C/Type/Version.hs
--- a/src/Package/C/Type/Version.hs
+++ b/src/Package/C/Type/Version.hs
@@ -9,7 +9,7 @@
 import           Data.List   (intercalate)
 
 newtype Version = Version [ Natural ]
-    deriving (Eq, Ord, Interpret, Binary, Hashable)
+    deriving (Eq, Ord, FromDhall, Binary, Hashable)
 
 showVersion :: Version -> String
 showVersion (Version v) = intercalate "." (show <$> v)
