diff --git a/horizon.dhall b/horizon.dhall
index a312b54b17d951164011211285bfa50c554cca8a..70be7024e8d0ca478f8891a6917013a9ac26f417 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -78,11 +78,14 @@ let packages =
       , bech32-th = H.callHackage "bech32-th" "1.1.1"
       , bin = H.callHackage "bin" "0.1.3"
       , binary-orphans = H.callHackage "binary-orphans" "1.0.4.1"
+      , binary-parser = H.callHackage "binary-parser" "0.5.7.3"
       , blaze-svg = H.callHackage "blaze-svg" "0.3.6.1"
       , blaze-textual = H.callHackage "blaze-textual" "0.2.3.1"
       , breakpoint = H.callHackage "breakpoint" "0.1.2.1"
       , brick = H.callHackage "brick" "1.9"
       , bytes = H.callHackage "bytes" "0.17.2"
+      , bytestring-strict-builder =
+          H.callHackage "bytestring-strict-builder" "0.4.5.6"
       , c2hs = H.callHackage "c2hs" "0.28.8"
       , cabal-install = H.callHackage "cabal-install" "3.8.1.0"
       , cabal-install-solver = H.callHackage "cabal-install-solver" "3.8.1.0"
@@ -124,6 +127,7 @@ let packages =
       , conduit-parse = H.callHackage "conduit-parse" "0.2.1.1"
       , constraints-extras = H.callHackage "constraints-extras" "0.4.0.0"
       , control-monad-free = H.callHackage "control-monad-free" "0.6.2"
+      , contravariant-extras = H.callHackage "contravariant-extras" "0.3.5.3"
       , cpphs = H.callHackage "cpphs" "1.20.9.1"
       , criterion = H.callHackage "criterion" "1.6.0.0"
       , crypto-pubkey-types = H.callHackage "crypto-pubkey-types" "0.4.3"
@@ -152,9 +156,15 @@ let packages =
       , cursor-fuzzy-time = H.callHackage "cursor-fuzzy-time" "0.0.0.0"
       , cursor-gen = H.callHackage "cursor-gen" "0.4.0.0"
       , data-binary-ieee754 = H.callHackage "data-binary-ieee754" "0.4.4"
+      , data-bword = H.callHackage "data-bword" "0.1.0.2"
+      , data-dword = H.callHackage "data-dword" "0.3.2.1"
+      , data-checked = H.callHackage "data-checked" "0.3"
+      , data-endian = H.callHackage "data-endian" "0.1.1"
       , data-ordlist = H.callHackage "data-ordlist" "0.4.7.0"
+      , data-serializer = H.callHackage "data-serializer" "0.3.5"
       , data-sketches = H.callHackage "data-sketches" "0.3.1.0"
       , data-sketches-core = H.callHackage "data-sketches-core" "0.1.0.0"
+      , data-textual = H.callHackage "data-textual" "0.3.0.3"
       , dbus = H.callHackage "dbus" "1.2.28"
       , deepseq-generics = H.callHackage "deepseq-generics" "0.2.0.0"
       , deferred-folds = H.callHackage "deferred-folds" "0.9.18.3"
@@ -336,8 +346,11 @@ let packages =
           , H.CabalFlag.Disable "floskell"
           ]
       , haskell-src = H.callHackage "haskell-src" "1.0.4"
+      , hasql = H.callHackage "hasql" "1.6.3"
+      , hasql-th = H.callHackage "hasql-th" "0.4.0.18"
       , hdaemonize = H.callHackage "hdaemonize" "0.5.6"
       , heaps = H.callHackage "heaps" "0.4"
+      , headed-megaparsec = H.callHackage "headed-megaparsec" "0.2.1.1"
       , hedgehog-extras = H.callHackage "hedgehog-extras" "0.4.5.1"
       , hedgehog-fn = H.callHackage "hedgehog-fn" "1.0"
       , hedgehog-golden =
@@ -559,6 +572,7 @@ let packages =
       , net-mqtt = H.callHackage "net-mqtt" "0.8.2.5"
       , network-conduit-tls = H.callHackage "network-conduit-tls" "1.3.2"
       , network-info = H.callHackage "network-info" "0.2.1"
+      , network-ip = H.callHackage "network-ip" "0.3.0.3"
       , newtype = H.callHackage "newtype" "0.2.2.0"
       , newtype-generics = H.callHackage "newtype-generics" "0.6.2"
       , nix-derivation = H.callHackage "nix-derivation" "1.1.2"
@@ -629,12 +643,14 @@ let packages =
       , polysemy-vinyl = H.callHackage "polysemy-vinyl" "0.1.5.0"
       , polysemy-zoo = H.callHackage "polysemy-zoo" "0.8.1.0"
       , port-utils = H.callHackage "port-utils" "0.2.1.0"
+      , postgresql-binary = H.callHackage "postgresql-binary" "0.13.1"
       , postgres-options = H.callHackage "postgres-options" "0.2.0.0"
       , postgresql-libpq = H.callHackage "postgresql-libpq" "0.9.5.0"
       , postgresql-migration = H.callHackage "postgresql-migration" "0.2.1.6"
       , postgresql-simple = H.callHackage "postgresql-simple" "0.6.5"
       , postgresql-simple-migration =
           H.callHackage "postgresql-simple-migration" "0.1.15.0"
+      , postgresql-syntax = H.callHackage "postgresql-syntax" "0.4.1"
       , pqueue = H.callHackage "pqueue" "1.4.3.0"
       , pretty-relative-time = H.callHackage "pretty-relative-time" "0.3.0.0"
       , primes = H.callHackage "primes" "0.2.1.0"
@@ -794,6 +810,8 @@ let packages =
       , tasty-rerun = H.callHackage "tasty-rerun" "1.1.18"
       , tasty-wai = H.callHackage "tasty-wai" "0.1.2.0"
       , tdigest = H.callHackage "tdigest" "0.3"
+      , template-haskell-compat-v0208 =
+          H.callHackage "template-haskell-compat-v0208" "0.1.9.2"
       , test-framework-smallcheck =
           H.callHackage "test-framework-smallcheck" "0.2"
       , testing-feat = H.callHackage "testing-feat" "1.1.1.1"
@@ -806,6 +824,8 @@ let packages =
       , text-conversions = H.callHackage "text-conversions" "0.3.1.1"
       , text-display = H.callHackage "text-display" "0.0.4.0"
       , text-icu = H.callHackage "text-icu" "0.8.0.2"
+      , text-latin1 = H.callHackage "text-latin1" "0.3.1"
+      , text-printer = H.callHackage "text-printer" "0.5.0.2"
       , text-rope = H.callHackage "text-rope" "0.2"
       , th-desugar = H.callHackage "th-desugar" "1.15"
       , th-env = H.callHackage "th-env" "0.1.1"
@@ -829,6 +849,7 @@ let packages =
       , tuple = H.callHackage "tuple" "0.3.0.2"
       , type-errors = H.callHackage "type-errors" "0.2.0.2"
       , type-errors-pretty = H.callHackage "type-errors-pretty" "0.0.1.2"
+      , type-hint = H.callHackage "type-hint" "0.1"
       , typerep-map = H.callHackage "typerep-map" "0.6.0.0"
       , uglymemo = H.callHackage "uglymemo" "0.1.0.1"
       , unagi-chan = H.callHackage "unagi-chan" "0.4.1.4"
diff --git a/horizon.lock b/horizon.lock
index 33d62d570acd22c2c00ca5cee96630d67799ceba..a80fca9f59de1a72eca4a7f89e896c1655753660 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -234,6 +234,10 @@
   , mapValue =
       "a53261c27531100833d7e097d7b5ebae3f5101c6e54f44216ed94992a21e8adf"
   }
+, { mapKey = "binary-parser"
+  , mapValue =
+      "640a5bdaf0c45155e9a46518e0fddae490271dae85c73859a7e654d50f67743b"
+  }
 , { mapKey = "blaze-svg"
   , mapValue =
       "6977fd19a31e74d534a7c3fb5533e3fadfe9e74af81df5a5c18dfcca63f11e6f"
@@ -254,6 +258,10 @@
   , mapValue =
       "120f74c36c336bc91bd611b1bd49e3faf93fb4fab1757f000177afed1a9ac9f4"
   }
+, { mapKey = "bytestring-strict-builder"
+  , mapValue =
+      "2faa9baaba5c12368ff6f53edbc548241b414089a037d66067088882602b4ffa"
+  }
 , { mapKey = "c2hs"
   , mapValue =
       "6d6262823310cf14a23c4fb5e0374a16a29b0ca6f667e9d0510f17383c3951b0"
@@ -394,6 +402,10 @@
   , mapValue =
       "ab4a61eadafdd406c25391be3f8723f08855ebeec9c8ae342adc8618e96932e1"
   }
+, { mapKey = "contravariant-extras"
+  , mapValue =
+      "963d6ec64d29c7f839cbe1550e3ed2bce5459529634506e31ca7a7e9e9f51b6f"
+  }
 , { mapKey = "control-monad-free"
   , mapValue =
       "a4619d59f869cb6c50d170575eaa089e8bae3ba3e7b1cab53e795206df055912"
@@ -462,10 +474,30 @@
   , mapValue =
       "745e2aaa3c9cc4da276e72edfd6de1db38fb65737a59f09410715cf965a13e06"
   }
+, { mapKey = "data-bword"
+  , mapValue =
+      "03c9898e4aba0352b1559ab9cc7f697adb1eebb22fe907eb3af2fa75e2916db8"
+  }
+, { mapKey = "data-checked"
+  , mapValue =
+      "2bd00dfe8dd52f1b4018dca78c44cc7a40909619550a6c49b20bb86b805f14fd"
+  }
+, { mapKey = "data-dword"
+  , mapValue =
+      "310100a03408bde7002169c4c15c7f8052ae57dcc8bdaef4f789cef9479ce1f4"
+  }
+, { mapKey = "data-endian"
+  , mapValue =
+      "140ab2b54e94c8f7817ac37836ef88794b7f2bd0867b7b07c4bac248a374b519"
+  }
 , { mapKey = "data-ordlist"
   , mapValue =
       "8dcf1ab5ef0d1a0dbc51dbb5f43ea01e06906faded30a9d44979a32a7c19b9b4"
   }
+, { mapKey = "data-serializer"
+  , mapValue =
+      "09c8326ce4297e38399a5501d137f55ab0ca588ecaf80704231c61af9fda4180"
+  }
 , { mapKey = "data-sketches"
   , mapValue =
       "49ba027c062aa14555dcade901290342ad130078fe1b4dc82b42889d6a361db6"
@@ -474,6 +506,10 @@
   , mapValue =
       "fa7f2b06e61a6eb6f4a704c1e56c827b692b335ca2a01861f3d889936d644170"
   }
+, { mapKey = "data-textual"
+  , mapValue =
+      "af15f3d1ff350076dbf0fd78309371c515c1b5ff7ff471fc2b43586586266e3e"
+  }
 , { mapKey = "dbus"
   , mapValue =
       "53b6df9019fe7d1b3da2167d7a790ac5a3766238a26de94d807e547ac1e84779"
@@ -1010,10 +1046,22 @@
   , mapValue =
       "dd3f1bdd1290b58fed3eeafeaaba3c4b63b7900cdb5065483fbb5cc9f479ad08"
   }
+, { mapKey = "hasql"
+  , mapValue =
+      "34cd25afdc29108c6e9829a92cab2f0b3d55fa00e2426227627e64e15abf22eb"
+  }
+, { mapKey = "hasql-th"
+  , mapValue =
+      "3044c356f1d3d408da4205d71925a830f81857571b753f6ee745423b75471279"
+  }
 , { mapKey = "hdaemonize"
   , mapValue =
       "ab4f90bf1de28057460801b3eb68e3785e2e5bba6227df52d511bf7c209905f1"
   }
+, { mapKey = "headed-megaparsec"
+  , mapValue =
+      "f2c3aae26e23112730ed6571ee277311220c693c9f04dc88c8e7c518532b1b92"
+  }
 , { mapKey = "heaps"
   , mapValue =
       "e042b769e4e44e7f41cbc5c52e1ef3ca3956fd922dcc8070ff55e9e9e6d3d24d"
@@ -1718,6 +1766,10 @@
   , mapValue =
       "812f1fd3e6a297a2e4761ad70c73ced43535e254eaae6d185c3f939960df8e23"
   }
+, { mapKey = "network-ip"
+  , mapValue =
+      "5daa8bc34ca712ee4e6393a0984583e1e78e6d31194b2ed7f22a4a2ec16b83f0"
+  }
 , { mapKey = "newtype"
   , mapValue =
       "4efce3d9b06e7cd5040441d5e538db7e9ee15152dfed299c7cf7ae604e8169f8"
@@ -1970,6 +2022,10 @@
   , mapValue =
       "6c933c650d29d124d42e6cf06de7452f448a50eaccc4e0fb6a71d8c443a61b9f"
   }
+, { mapKey = "postgresql-binary"
+  , mapValue =
+      "f72b466655600fefedbfc95b7d95359acf06fea0e6614d72e9d2d3294f25c67a"
+  }
 , { mapKey = "postgresql-libpq"
   , mapValue =
       "fb5b98161077394efc766528082c2b2d6b4c2314c3d4c62c4fe25aaf1de7a773"
@@ -1986,6 +2042,10 @@
   , mapValue =
       "c3984fff76f63bb4df429372acb1b68f414e63de21377e2bbc852b1e3d9e6bba"
   }
+, { mapKey = "postgresql-syntax"
+  , mapValue =
+      "465fb6f325ada1410d3f00e02309798bbf573cb53824d28323f6ed4309a071eb"
+  }
 , { mapKey = "pqueue"
   , mapValue =
       "ec14ad40754702507e00c6b0d1d52e9918a5c3c3ed49bb3f778ff8ff19478458"
@@ -2474,6 +2534,10 @@
   , mapValue =
       "267f4235576ffa1f41efba967e858655f2e58c7c3bf91e62c5c965f221bc4cbd"
   }
+, { mapKey = "template-haskell-compat-v0208"
+  , mapValue =
+      "6f44dae0ce460c5d02e999e1a3131078f005a5be7c9ce266d7076f5c212d64f6"
+  }
 , { mapKey = "test-framework-smallcheck"
   , mapValue =
       "a73ab79e14c1c165908515d87b2d2ce9600889810dd3eced97b4492ce60dd708"
@@ -2514,6 +2578,14 @@
   , mapValue =
       "0efa47092a230a4dc1cabef658dafbcb069d3a0c37a6b723ef5fb9a72b1a6d5a"
   }
+, { mapKey = "text-latin1"
+  , mapValue =
+      "77be4a6dd4517af77a1a7c24e2d8ee5b2b6e21602371bb94277a21a3ad0db4a3"
+  }
+, { mapKey = "text-printer"
+  , mapValue =
+      "b5a0cc78e5983230bb69ee372c7792f12a7fd9614edde7fc2b5b69585cb1818b"
+  }
 , { mapKey = "text-rope"
   , mapValue =
       "d5815a8ab3e230cc689a477e5a2dc1f8db8632d6e9ff017bcd79dcf2c0d0bbcd"
@@ -2590,6 +2662,10 @@
   , mapValue =
       "49e91e572f304d0f4b86ab9978a52ed477c3aecfed66f53998c34413d3ed3660"
   }
+, { mapKey = "type-hint"
+  , mapValue =
+      "a1d022397705b4fa57a56c20a09625818c00462ce204d6e87e40c484d1936dd2"
+  }
 , { mapKey = "typerep-map"
   , mapValue =
       "fa3e5c9455c12d0d41c359b25d40ef4b574cdcb6328b04763c8dfe6e7cbd7c1c"
diff --git a/overlay.nix b/overlay.nix
index 9aea9ed6fe58836269fce98bc99894666b55f327..ec79068e026be8409a60efe0ea83efbc0807d283 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -119,6 +119,8 @@ final: prev: with pkgs.haskell.lib; {
 
   binary-orphans = final.callPackage (./pkgs/binary-orphans.nix) { };
 
+  binary-parser = final.callPackage (./pkgs/binary-parser.nix) { };
+
   blaze-svg = final.callPackage (./pkgs/blaze-svg.nix) { };
 
   blaze-textual = final.callPackage (./pkgs/blaze-textual.nix) { };
@@ -129,6 +131,8 @@ final: prev: with pkgs.haskell.lib; {
 
   bytes = final.callPackage (./pkgs/bytes.nix) { };
 
+  bytestring-strict-builder = final.callPackage (./pkgs/bytestring-strict-builder.nix) { };
+
   c2hs = final.callPackage (./pkgs/c2hs.nix) { };
 
   cabal-install = final.callPackage (./pkgs/cabal-install.nix) { };
@@ -199,6 +203,8 @@ final: prev: with pkgs.haskell.lib; {
 
   constraints-extras = final.callPackage (./pkgs/constraints-extras.nix) { };
 
+  contravariant-extras = final.callPackage (./pkgs/contravariant-extras.nix) { };
+
   control-monad-free = final.callPackage (./pkgs/control-monad-free.nix) { };
 
   cpphs = final.callPackage (./pkgs/cpphs.nix) { };
@@ -233,12 +239,24 @@ final: prev: with pkgs.haskell.lib; {
 
   data-binary-ieee754 = final.callPackage (./pkgs/data-binary-ieee754.nix) { };
 
+  data-bword = final.callPackage (./pkgs/data-bword.nix) { };
+
+  data-checked = final.callPackage (./pkgs/data-checked.nix) { };
+
+  data-dword = final.callPackage (./pkgs/data-dword.nix) { };
+
+  data-endian = final.callPackage (./pkgs/data-endian.nix) { };
+
   data-ordlist = final.callPackage (./pkgs/data-ordlist.nix) { };
 
+  data-serializer = final.callPackage (./pkgs/data-serializer.nix) { };
+
   data-sketches = final.callPackage (./pkgs/data-sketches.nix) { };
 
   data-sketches-core = final.callPackage (./pkgs/data-sketches-core.nix) { };
 
+  data-textual = final.callPackage (./pkgs/data-textual.nix) { };
+
   dbus = final.callPackage (./pkgs/dbus.nix) { };
 
   deepseq-generics = final.callPackage (./pkgs/deepseq-generics.nix) { };
@@ -507,8 +525,14 @@ final: prev: with pkgs.haskell.lib; {
 
   haskell-src = final.callPackage (./pkgs/haskell-src.nix) { };
 
+  hasql = final.callPackage (./pkgs/hasql.nix) { };
+
+  hasql-th = final.callPackage (./pkgs/hasql-th.nix) { };
+
   hdaemonize = final.callPackage (./pkgs/hdaemonize.nix) { };
 
+  headed-megaparsec = final.callPackage (./pkgs/headed-megaparsec.nix) { };
+
   heaps = final.callPackage (./pkgs/heaps.nix) { };
 
   hedgehog-extras = final.callPackage (./pkgs/hedgehog-extras.nix) { };
@@ -861,6 +885,8 @@ final: prev: with pkgs.haskell.lib; {
 
   network-info = final.callPackage (./pkgs/network-info.nix) { };
 
+  network-ip = final.callPackage (./pkgs/network-ip.nix) { };
+
   newtype = final.callPackage (./pkgs/newtype.nix) { };
 
   newtype-generics = final.callPackage (./pkgs/newtype-generics.nix) { };
@@ -987,6 +1013,8 @@ final: prev: with pkgs.haskell.lib; {
 
   postgres-options = final.callPackage (./pkgs/postgres-options.nix) { };
 
+  postgresql-binary = final.callPackage (./pkgs/postgresql-binary.nix) { };
+
   postgresql-libpq = final.callPackage (./pkgs/postgresql-libpq.nix) { };
 
   postgresql-migration = final.callPackage (./pkgs/postgresql-migration.nix) { };
@@ -995,6 +1023,8 @@ final: prev: with pkgs.haskell.lib; {
 
   postgresql-simple-migration = final.callPackage (./pkgs/postgresql-simple-migration.nix) { };
 
+  postgresql-syntax = final.callPackage (./pkgs/postgresql-syntax.nix) { };
+
   pqueue = final.callPackage (./pkgs/pqueue.nix) { };
 
   pretty-relative-time = final.callPackage (./pkgs/pretty-relative-time.nix) { };
@@ -1239,6 +1269,8 @@ final: prev: with pkgs.haskell.lib; {
 
   tdigest = final.callPackage (./pkgs/tdigest.nix) { };
 
+  template-haskell-compat-v0208 = final.callPackage (./pkgs/template-haskell-compat-v0208.nix) { };
+
   test-framework-smallcheck = final.callPackage (./pkgs/test-framework-smallcheck.nix) { };
 
   testing-feat = final.callPackage (./pkgs/testing-feat.nix) { };
@@ -1259,6 +1291,10 @@ final: prev: with pkgs.haskell.lib; {
 
   text-icu = final.callPackage (./pkgs/text-icu.nix) { };
 
+  text-latin1 = final.callPackage (./pkgs/text-latin1.nix) { };
+
+  text-printer = final.callPackage (./pkgs/text-printer.nix) { };
+
   text-rope = final.callPackage (./pkgs/text-rope.nix) { };
 
   th-desugar = final.callPackage (./pkgs/th-desugar.nix) { };
@@ -1297,6 +1333,8 @@ final: prev: with pkgs.haskell.lib; {
 
   type-errors-pretty = final.callPackage (./pkgs/type-errors-pretty.nix) { };
 
+  type-hint = final.callPackage (./pkgs/type-hint.nix) { };
+
   typerep-map = final.callPackage (./pkgs/typerep-map.nix) { };
 
   uglymemo = final.callPackage (./pkgs/uglymemo.nix) { };
diff --git a/pkgs/binary-parser.nix b/pkgs/binary-parser.nix
new file mode 100644
index 0000000000000000000000000000000000000000..c529e622322fbbc7e2d0a2297a384373a99486d1
--- /dev/null
+++ b/pkgs/binary-parser.nix
@@ -0,0 +1,28 @@
+{ mkDerivation, QuickCheck, base, base-prelude, bytestring, lib
+, mtl, quickcheck-instances, tasty, tasty-hunit, tasty-quickcheck
+, text, transformers
+}:
+mkDerivation {
+  pname = "binary-parser";
+  version = "0.5.7.3";
+  sha256 = "6d07b5c759fc60c9b9e7b584538c30d6d3a5987867d2b5386d86f7a80e4ce3d0";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base bytestring mtl text transformers ];
+  testHaskellDepends = [
+    base base-prelude bytestring mtl QuickCheck quickcheck-instances
+    tasty tasty-hunit tasty-quickcheck text transformers
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/binary-parser";
+  description = "An efficient but limited parser API specialised to bytestrings";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/bytestring-strict-builder.nix b/pkgs/bytestring-strict-builder.nix
new file mode 100644
index 0000000000000000000000000000000000000000..1ba5a4f544fab64eb096bc4525ff2b27056cfa4a
--- /dev/null
+++ b/pkgs/bytestring-strict-builder.nix
@@ -0,0 +1,29 @@
+{ mkDerivation, QuickCheck, base, bytestring, criterion, lib
+, quickcheck-instances, rerebase, tasty, tasty-hunit
+, tasty-quickcheck
+}:
+mkDerivation {
+  pname = "bytestring-strict-builder";
+  version = "0.4.5.6";
+  sha256 = "7c9261ff2d10eb141fead8eb57f51fec14b28e753084c7a07fc319776531117f";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base bytestring ];
+  testHaskellDepends = [
+    QuickCheck quickcheck-instances rerebase tasty tasty-hunit
+    tasty-quickcheck
+  ];
+  benchmarkHaskellDepends = [ criterion rerebase ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/bytestring-strict-builder";
+  description = "An efficient strict bytestring builder";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/contravariant-extras.nix b/pkgs/contravariant-extras.nix
new file mode 100644
index 0000000000000000000000000000000000000000..20d34a3e93cae537ca4b831c17a8a987657eb27b
--- /dev/null
+++ b/pkgs/contravariant-extras.nix
@@ -0,0 +1,25 @@
+{ mkDerivation, base, contravariant, lib, template-haskell
+, template-haskell-compat-v0208
+}:
+mkDerivation {
+  pname = "contravariant-extras";
+  version = "0.3.5.3";
+  sha256 = "6a85370aba6dbebfde46a0029039ef329fc1e118794a67a021ed9bf808b58b64";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base contravariant template-haskell template-haskell-compat-v0208
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/contravariant-extras";
+  description = "Extras for the \"contravariant\" package";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/data-bword.nix b/pkgs/data-bword.nix
new file mode 100644
index 0000000000000000000000000000000000000000..7267c17a87435e9165c375c296e08db0855d6d2b
--- /dev/null
+++ b/pkgs/data-bword.nix
@@ -0,0 +1,22 @@
+{ mkDerivation, base, ghc-prim, lib, tasty, tasty-quickcheck }:
+mkDerivation {
+  pname = "data-bword";
+  version = "0.1.0.2";
+  sha256 = "d64880e7d6c7a2d635d7e79552888f415a417379ee637a29321abf08187e9635";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ghc-prim ];
+  testHaskellDepends = [ base tasty tasty-quickcheck ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/data-bword";
+  description = "Extra operations on binary words of fixed length";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/data-checked.nix b/pkgs/data-checked.nix
new file mode 100644
index 0000000000000000000000000000000000000000..0de820f709cb687d9945f99d42205b252515629d
--- /dev/null
+++ b/pkgs/data-checked.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, deepseq, lib }:
+mkDerivation {
+  pname = "data-checked";
+  version = "0.3";
+  sha256 = "dc87d09c7c8587c9e6e372166e8de3b42c2cd804a493ff100c253e4d713c5676";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base deepseq ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/data-checked";
+  description = "Type-indexed runtime-checked properties";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/data-dword.nix b/pkgs/data-dword.nix
new file mode 100644
index 0000000000000000000000000000000000000000..25b91f2d4b17ce98490df0d42d9bca16ff608711
--- /dev/null
+++ b/pkgs/data-dword.nix
@@ -0,0 +1,26 @@
+{ mkDerivation, base, data-bword, ghc-prim, hashable, lib, tasty
+, tasty-quickcheck, template-haskell
+}:
+mkDerivation {
+  pname = "data-dword";
+  version = "0.3.2.1";
+  sha256 = "1114f1efd8f8e80517f7a1df7e73e8a0f3dcc9414f3ba5669f05b29f90dfdd50";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base data-bword ghc-prim hashable template-haskell
+  ];
+  testHaskellDepends = [ base tasty tasty-quickcheck ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/data-dword";
+  description = "Stick two binary words together to get a bigger one";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/data-endian.nix b/pkgs/data-endian.nix
new file mode 100644
index 0000000000000000000000000000000000000000..bdfa83c01dafe0aa05442ef08cab19434f937f1f
--- /dev/null
+++ b/pkgs/data-endian.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "data-endian";
+  version = "0.1.1";
+  sha256 = "8c1d4f30374f8331d31f4d7c6b39284331b6b9436e7b50f86547417bd05f2ac0";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/data-endian";
+  description = "Endian-sensitive data";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/data-serializer.nix b/pkgs/data-serializer.nix
new file mode 100644
index 0000000000000000000000000000000000000000..46bef05de8dfa374082360567d39a2fca8893be7
--- /dev/null
+++ b/pkgs/data-serializer.nix
@@ -0,0 +1,28 @@
+{ mkDerivation, base, binary, bytestring, cereal, data-endian, lib
+, parsers, split, tasty, tasty-quickcheck
+}:
+mkDerivation {
+  pname = "data-serializer";
+  version = "0.3.5";
+  sha256 = "b4a0bfdeef7c8c77006682c46addf4ee9e1c8e51b5e01c7ac324813cd16ffd43";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base binary bytestring cereal data-endian parsers split
+  ];
+  testHaskellDepends = [
+    base binary bytestring cereal tasty tasty-quickcheck
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/data-serializer";
+  description = "Common API for serialization libraries";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/data-textual.nix b/pkgs/data-textual.nix
new file mode 100644
index 0000000000000000000000000000000000000000..5866aff4bd0e9f1baf013da76e412ace7f671e38
--- /dev/null
+++ b/pkgs/data-textual.nix
@@ -0,0 +1,30 @@
+{ mkDerivation, QuickCheck, base, bytestring, lib, parsers
+, test-framework, test-framework-quickcheck2, text, text-latin1
+, text-printer, type-hint
+}:
+mkDerivation {
+  pname = "data-textual";
+  version = "0.3.0.3";
+  sha256 = "4b9ee8ccd03f24203dd9307bf9aa67180ff0f07b45c3a01e33d8185ff275ec9a";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base bytestring parsers text text-latin1 text-printer
+  ];
+  testHaskellDepends = [
+    base parsers QuickCheck test-framework test-framework-quickcheck2
+    text-printer type-hint
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/data-textual";
+  description = "Human-friendly textual representations";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/hasql-th.nix b/pkgs/hasql-th.nix
new file mode 100644
index 0000000000000000000000000000000000000000..a3ac3fc5ca7c37f1019b0a31c7e2c2d053abc02d
--- /dev/null
+++ b/pkgs/hasql-th.nix
@@ -0,0 +1,28 @@
+{ mkDerivation, base, bytestring, containers, contravariant, foldl
+, hasql, lib, postgresql-syntax, template-haskell
+, template-haskell-compat-v0208, text, uuid, vector
+}:
+mkDerivation {
+  pname = "hasql-th";
+  version = "0.4.0.18";
+  sha256 = "db80c9f972c7311a499b6b2243286d5435ab60f606f88b1bb7d94430dbd4087d";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base bytestring containers contravariant foldl hasql
+    postgresql-syntax template-haskell template-haskell-compat-v0208
+    text uuid vector
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/hasql-th";
+  description = "Template Haskell utilities for Hasql";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/hasql.nix b/pkgs/hasql.nix
new file mode 100644
index 0000000000000000000000000000000000000000..f276990de0e9d485f660b0713afde7c309272735
--- /dev/null
+++ b/pkgs/hasql.nix
@@ -0,0 +1,38 @@
+{ mkDerivation, QuickCheck, aeson, attoparsec, base, bytestring
+, bytestring-strict-builder, contravariant, contravariant-extras
+, dlist, gauge, hashable, hashtables, lib, mtl, network-ip
+, postgresql-binary, postgresql-libpq, profunctors
+, quickcheck-instances, rerebase, scientific, tasty, tasty-hunit
+, tasty-quickcheck, text, text-builder, time, transformers, uuid
+, vector
+}:
+mkDerivation {
+  pname = "hasql";
+  version = "1.6.3";
+  sha256 = "d25a009d0f8bb5319f773808e65a059685b0274fa68a01a4c6ce5d4484baa411";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    aeson attoparsec base bytestring bytestring-strict-builder
+    contravariant dlist hashable hashtables mtl network-ip
+    postgresql-binary postgresql-libpq profunctors scientific text
+    text-builder time transformers uuid vector
+  ];
+  testHaskellDepends = [
+    contravariant-extras QuickCheck quickcheck-instances rerebase tasty
+    tasty-hunit tasty-quickcheck
+  ];
+  benchmarkHaskellDepends = [ gauge rerebase ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/hasql";
+  description = "An efficient PostgreSQL driver with a flexible mapping API";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/headed-megaparsec.nix b/pkgs/headed-megaparsec.nix
new file mode 100644
index 0000000000000000000000000000000000000000..ea6ed8741935017ec393ccf57544136080487bde
--- /dev/null
+++ b/pkgs/headed-megaparsec.nix
@@ -0,0 +1,25 @@
+{ mkDerivation, base, case-insensitive, lib, megaparsec
+, parser-combinators, selective
+}:
+mkDerivation {
+  pname = "headed-megaparsec";
+  version = "0.2.1.1";
+  sha256 = "34f75cedd58d71d983c235f7c9bf3f89302798c365359ecb696b26c0dffbfbbb";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base case-insensitive megaparsec parser-combinators selective
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/headed-megaparsec";
+  description = "More informative parser";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/network-ip.nix b/pkgs/network-ip.nix
new file mode 100644
index 0000000000000000000000000000000000000000..d289fdb27889cc64a0e2cc74af3edbce112a1b8f
--- /dev/null
+++ b/pkgs/network-ip.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, base, data-default-class, data-dword, data-endian
+, data-serializer, data-textual, hashable, lib, parsers, tasty
+, tasty-quickcheck, text-printer, type-hint
+}:
+mkDerivation {
+  pname = "network-ip";
+  version = "0.3.0.3";
+  sha256 = "e01dcc4389f3800536066ca150b6b5130d9d4b7fe7ed8e98ae7d92f3f7b1955c";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base data-default-class data-dword data-endian data-serializer
+    data-textual hashable parsers text-printer type-hint
+  ];
+  testHaskellDepends = [
+    base data-dword data-textual parsers tasty tasty-quickcheck
+    text-printer
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/network-ip";
+  description = "Internet Protocol data structures";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/postgresql-binary.nix b/pkgs/postgresql-binary.nix
new file mode 100644
index 0000000000000000000000000000000000000000..4b9344c0bce72dc28e7897ebcd57b8a023a6b88c
--- /dev/null
+++ b/pkgs/postgresql-binary.nix
@@ -0,0 +1,35 @@
+{ mkDerivation, QuickCheck, aeson, base, binary-parser, bytestring
+, bytestring-strict-builder, containers, criterion, lib, network-ip
+, postgresql-libpq, quickcheck-instances, rerebase, scientific
+, tasty, tasty-hunit, tasty-quickcheck, text, time, transformers
+, unordered-containers, uuid, vector
+}:
+mkDerivation {
+  pname = "postgresql-binary";
+  version = "0.13.1";
+  sha256 = "a2ce0f6302b9482835675f78b2051a95ffcc5c0d9e8c1b7ca670ea5ea5b61951";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    aeson base binary-parser bytestring bytestring-strict-builder
+    containers network-ip scientific text time transformers
+    unordered-containers uuid vector
+  ];
+  testHaskellDepends = [
+    aeson network-ip postgresql-libpq QuickCheck quickcheck-instances
+    rerebase tasty tasty-hunit tasty-quickcheck
+  ];
+  benchmarkHaskellDepends = [ criterion rerebase ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/postgresql-binary";
+  description = "Encoders and decoders for the PostgreSQL's binary format";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/postgresql-syntax.nix b/pkgs/postgresql-syntax.nix
new file mode 100644
index 0000000000000000000000000000000000000000..3ee5be7b513c42fa665ba3d823511692b5abca0e
--- /dev/null
+++ b/pkgs/postgresql-syntax.nix
@@ -0,0 +1,34 @@
+{ mkDerivation, QuickCheck, base, bytestring, case-insensitive
+, hashable, headed-megaparsec, hedgehog, lib, megaparsec
+, parser-combinators, quickcheck-instances, rerebase, tasty
+, tasty-hunit, tasty-quickcheck, text, text-builder
+, unordered-containers
+}:
+mkDerivation {
+  pname = "postgresql-syntax";
+  version = "0.4.1";
+  sha256 = "93cde438f4ca505450dc9c85d13c3e2868c5e268f25110c2e8c0b7bd9e9443d3";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base bytestring case-insensitive hashable headed-megaparsec
+    megaparsec parser-combinators text text-builder
+    unordered-containers
+  ];
+  testHaskellDepends = [
+    hedgehog QuickCheck quickcheck-instances rerebase tasty tasty-hunit
+    tasty-quickcheck
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/postgresql-syntax";
+  description = "PostgreSQL AST parsing and rendering";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/template-haskell-compat-v0208.nix b/pkgs/template-haskell-compat-v0208.nix
new file mode 100644
index 0000000000000000000000000000000000000000..81198602e977816490366ffb44deda26b99d343b
--- /dev/null
+++ b/pkgs/template-haskell-compat-v0208.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib, template-haskell }:
+mkDerivation {
+  pname = "template-haskell-compat-v0208";
+  version = "0.1.9.2";
+  sha256 = "c009e098660f8f8720bb6962663e4d9855516b285f83c3243b73e13eff42d7e9";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base template-haskell ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nikita-volkov/template-haskell-compat-v0208";
+  description = "A backwards compatibility layer for Template Haskell newer than 2.8";
+  license = lib.licenses.mit;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/text-latin1.nix b/pkgs/text-latin1.nix
new file mode 100644
index 0000000000000000000000000000000000000000..b35fc82286e3acd4b2622b231943be6d2f56c684
--- /dev/null
+++ b/pkgs/text-latin1.nix
@@ -0,0 +1,26 @@
+{ mkDerivation, base, bytestring, case-insensitive, data-checked
+, hashable, lib, semigroups, text
+}:
+mkDerivation {
+  pname = "text-latin1";
+  version = "0.3.1";
+  sha256 = "6c7482ae0cfde06fe6ad8f0e6ea6b0d082d27a075370b5c018c31e53aad9abf3";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base bytestring case-insensitive data-checked hashable semigroups
+    text
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/text-latin1";
+  description = "Latin-1 (including ASCII) utility functions";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/text-printer.nix b/pkgs/text-printer.nix
new file mode 100644
index 0000000000000000000000000000000000000000..7b6c436a4b97dd463fa5b88ccff9358719bdca8f
--- /dev/null
+++ b/pkgs/text-printer.nix
@@ -0,0 +1,28 @@
+{ mkDerivation, QuickCheck, base, bytestring, lib, pretty
+, test-framework, test-framework-quickcheck2, text, text-latin1
+}:
+mkDerivation {
+  pname = "text-printer";
+  version = "0.5.0.2";
+  sha256 = "b40929b1f0a1f4d0b43966f723ce3f6c64acba72763f222019bfae90197ef5e3";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base bytestring pretty text text-latin1
+  ];
+  testHaskellDepends = [
+    base QuickCheck test-framework test-framework-quickcheck2
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/text-printer";
+  description = "Abstract interface for text builders/printers";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/type-hint.nix b/pkgs/type-hint.nix
new file mode 100644
index 0000000000000000000000000000000000000000..6c9f7661d628d45ab8a284aa6eef21cc207f6a45
--- /dev/null
+++ b/pkgs/type-hint.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "type-hint";
+  version = "0.1";
+  sha256 = "1161cdbf4b4b43c2953ee60438e948737604193e1bfe2c880ff178538faa99b9";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/mvv/type-hint";
+  description = "Guide type inference with proxy values";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file