diff --git a/flake.lock b/flake.lock
index 3cd0bbded9c62432f7fa82c84e2b80f2d0e80803..1aab6764c18bcaba01f4dde1944b570762b86eda 100644
--- a/flake.lock
+++ b/flake.lock
@@ -3,11 +3,11 @@
     "Cabal": {
       "flake": false,
       "locked": {
-        "lastModified": 1663468572,
-        "narHash": "sha256-mhl5d/3DTGI+tHnIJ4AEBXSCtbP+PTlxMBa2SMOY+sY=",
+        "lastModified": 1664636112,
+        "narHash": "sha256-AFNvWKvO/psPq5OPCFqvl/AejNmVC2l4OQkKLEyNT0A=",
         "ref": "master",
-        "rev": "182e2c15191cd96a477a7fda41f9f89192b665ff",
-        "revCount": 13167,
+        "rev": "a5106bed5a197e9f670a0949f803e714ad4ef403",
+        "revCount": 13196,
         "type": "git",
         "url": "https://gitlab.haskell.org/ghc/packages/Cabal"
       },
@@ -35,11 +35,11 @@
     "all-cabal-hashes": {
       "flake": false,
       "locked": {
-        "lastModified": 1663669089,
-        "narHash": "sha256-vlwG3n8Q+ROimoU60f6e0ehgHVhY6iNpYy8zxRj9usg=",
+        "lastModified": 1665080357,
+        "narHash": "sha256-J/abnrLrWzWaIA3v6Rp7yGFCnCVVS6vA5+6KPZb0VKs=",
         "owner": "commercialhaskell",
         "repo": "all-cabal-hashes",
-        "rev": "efe0ff8f8ced37a3d619e7849cf0217cfbbc3fad",
+        "rev": "9f72eda9849486e6b55762056e59dbee946cbcbf",
         "type": "github"
       },
       "original": {
@@ -52,11 +52,11 @@
     "all-cabal-hashes_2": {
       "flake": false,
       "locked": {
-        "lastModified": 1663590767,
-        "narHash": "sha256-1hDRgWXpj60PEeh5DH0km5CN/vXYmMZiNqLJnJbmfN0=",
+        "lastModified": 1664652215,
+        "narHash": "sha256-srogTegrD+241OSa1IVFnEzIRcdOi6rkQQ0z0v9S13E=",
         "owner": "commercialhaskell",
         "repo": "all-cabal-hashes",
-        "rev": "e456824564bb5457549a70dc03c7ae00b3dfaec3",
+        "rev": "21f7dfd6196d284ace4cfa5a6e1aa73072312e84",
         "type": "github"
       },
       "original": {
@@ -115,6 +115,23 @@
         "type": "github"
       }
     },
+    "cardano-ledger": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1665417848,
+        "narHash": "sha256-52jiXfBToQuNASCJEE4fLo+LggWmaS3SrTbSHYb0VcA=",
+        "owner": "milloni",
+        "repo": "cardano-ledger",
+        "rev": "2b18cf684f3f98b5c43fa269f7d61f715a17fcb3",
+        "type": "github"
+      },
+      "original": {
+        "owner": "milloni",
+        "ref": "milloni/horizon",
+        "repo": "cardano-ledger",
+        "type": "github"
+      }
+    },
     "cardano-prelude": {
       "flake": false,
       "locked": {
@@ -184,17 +201,17 @@
     "doctest": {
       "flake": false,
       "locked": {
-        "lastModified": 1652986762,
-        "narHash": "sha256-Ehlq1U6EUscYndVnH7IVe2MdjzHQTgqRQDEWR9wGVzk=",
-        "owner": "parsonsmatt",
+        "lastModified": 1664345633,
+        "narHash": "sha256-58Re5dTwbQHpj/IwNgMwazu65Gs4aPLY+XKuh0/8ScQ=",
+        "owner": "sol",
         "repo": "doctest",
-        "rev": "a5f696b80bb8220d284e34d90f0b94291b859e77",
+        "rev": "4eb97c213acf7abe965a3a1b67397199ed155f3c",
         "type": "github"
       },
       "original": {
-        "owner": "parsonsmatt",
+        "owner": "sol",
         "repo": "doctest",
-        "rev": "a5f696b80bb8220d284e34d90f0b94291b859e77",
+        "rev": "4eb97c213acf7abe965a3a1b67397199ed155f3c",
         "type": "github"
       }
     },
@@ -253,11 +270,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1661009076,
-        "narHash": "sha256-phAE40gctVygRq3G3B6LhvD7u2qdQT21xsz8DdRDYFo=",
+        "lastModified": 1664385320,
+        "narHash": "sha256-uSCHb9RUqHRjTpI8OzyaUuHckFnnxwZqlXEuo+yUpYQ=",
         "owner": "hercules-ci",
         "repo": "flake-parts",
-        "rev": "850d8a76026127ef02f040fb0dcfdb8b749dd9d9",
+        "rev": "45298bd207b26e1bcd030a0bb075aa2da29f8e30",
         "type": "github"
       },
       "original": {
@@ -274,11 +291,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1663071030,
-        "narHash": "sha256-vqdGU5iR2nKiSH6Z0bhNAwg/6szAicXaopv7lpMRNRg=",
+        "lastModified": 1664385320,
+        "narHash": "sha256-uSCHb9RUqHRjTpI8OzyaUuHckFnnxwZqlXEuo+yUpYQ=",
         "owner": "hercules-ci",
         "repo": "flake-parts",
-        "rev": "89cce5852d100df3d815c3c4a3fd39e55b3e1bfc",
+        "rev": "45298bd207b26e1bcd030a0bb075aa2da29f8e30",
         "type": "github"
       },
       "original": {
@@ -348,11 +365,11 @@
     "flat": {
       "flake": false,
       "locked": {
-        "lastModified": 1651405431,
-        "narHash": "sha256-vyU10XtlJGD83hG970EVmOiomdhB20pxztYhcSMP9OA=",
+        "lastModified": 1664966899,
+        "narHash": "sha256-j1ABQ4I9UlRz4PcJVpfVQMeRBB9UIkS/wljmmoDYG5w=",
         "owner": "Quid2",
         "repo": "flat",
-        "rev": "44dd79ab3d6547afd7674876f0307995fc40dfcf",
+        "rev": "dd323e72857806a2b03b27b579596586d0a4d583",
         "type": "github"
       },
       "original": {
@@ -361,13 +378,80 @@
         "type": "github"
       }
     },
+    "ghc-exactprint": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1664486261,
+        "narHash": "sha256-3SQPyJoQQTY7cG2S4TbpG9btPWS7U4F7AlGwAq5PXzk=",
+        "owner": "alanz",
+        "repo": "ghc-exactprint",
+        "rev": "8d3f0aa528e9a3fe5e0626cd733650641daaa2e9",
+        "type": "github"
+      },
+      "original": {
+        "owner": "alanz",
+        "ref": "ghc-9.4",
+        "repo": "ghc-exactprint",
+        "type": "github"
+      }
+    },
+    "ghc-typelits-knownnat": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1658650195,
+        "narHash": "sha256-9ITC1f0wGvOH1VrFXegwSUugjR777FknFcfOsNxXhMY=",
+        "owner": "clash-lang",
+        "repo": "ghc-typelits-knownnat",
+        "rev": "634b0c076e5cf6ce24d80fa845121b38ec9efe01",
+        "type": "github"
+      },
+      "original": {
+        "owner": "clash-lang",
+        "ref": "941-support",
+        "repo": "ghc-typelits-knownnat",
+        "type": "github"
+      }
+    },
+    "ghc-typelits-natnormalise": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1663485752,
+        "narHash": "sha256-cHDm8Bd5VhN3hhCBQYFfaGl3uczC46CTbM1mIKZP9bY=",
+        "owner": "clash-lang",
+        "repo": "ghc-typelits-natnormalise",
+        "rev": "64f3fe6bbc1a3c8d729ede7c9f14b158e2a12641",
+        "type": "github"
+      },
+      "original": {
+        "owner": "clash-lang",
+        "repo": "ghc-typelits-natnormalise",
+        "type": "github"
+      }
+    },
+    "gray-code": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1665142843,
+        "narHash": "sha256-Tv3cE4BDhEPHuzP2V4Onkn5JsRBsUCbZtQ6t9wZDvlc=",
+        "owner": "milloni",
+        "repo": "gray-code-0.3.1",
+        "rev": "f310a19e44416206633cfd084f10ffb7cfea9f1d",
+        "type": "github"
+      },
+      "original": {
+        "owner": "milloni",
+        "ref": "milloni/fix-quicktest",
+        "repo": "gray-code-0.3.1",
+        "type": "github"
+      }
+    },
     "haskell-flake": {
       "locked": {
-        "lastModified": 1661726764,
-        "narHash": "sha256-YzzOoff6m3W4g4B0E8xd3omvOhEVuRu/Rdvnmy2H6Jc=",
+        "lastModified": 1664562023,
+        "narHash": "sha256-EYpGp8IlktZUF6k6StHZ8u8XaCY0JpTuG7u3FJWyPHM=",
         "owner": "srid",
         "repo": "haskell-flake",
-        "rev": "3c27b5ba2eafc52f4bed232a8ff74cf0a5a99375",
+        "rev": "c5843170f9581b33740b4c081fdf6e835720d85e",
         "type": "github"
       },
       "original": {
@@ -412,11 +496,11 @@
     "hlint": {
       "flake": false,
       "locked": {
-        "lastModified": 1663597420,
-        "narHash": "sha256-CUNiq0bwTEz8YmcmDgaU/z299cYxT9mNvKBHx14jpaU=",
+        "lastModified": 1663663215,
+        "narHash": "sha256-lrwi32UYEwttFe7H4JLaHCQOzb9o5eZD0/RhvMwQSQ0=",
         "owner": "ndmitchell",
         "repo": "hlint",
-        "rev": "08a25c6b7915e5f22aad7ee68da95d576225d55d",
+        "rev": "ca0226efb388671fc4bcd75e8993a8ba5b26b612",
         "type": "github"
       },
       "original": {
@@ -456,6 +540,7 @@
         "ema": "ema",
         "flake-parts": "flake-parts_2",
         "flake-utils": "flake-utils_2",
+        "ghc-exactprint": "ghc-exactprint",
         "haskell-src-meta": "haskell-src-meta",
         "hedgehog-golden": "hedgehog-golden",
         "hlint": "hlint",
@@ -472,11 +557,11 @@
         "unicode-data": "unicode-data"
       },
       "locked": {
-        "lastModified": 1663606203,
-        "narHash": "sha256-kpklnkrSiyJ8xPcCxieLU7U2q8WDjw1XpbhZpalLc5A=",
-        "ref": "refs/heads/master",
-        "rev": "e1598f0fe47496101c82f32c5f3df8d9f0f0b730",
-        "revCount": 110,
+        "lastModified": 1664656399,
+        "narHash": "sha256-XW7bxVaZcB3vUVatqlXPLDlxJ4iL2FdmcPIB40idRRc=",
+        "ref": "master",
+        "rev": "30191d3a4b44b0aa2db584d3836606bc6d3f695c",
+        "revCount": 116,
         "type": "git",
         "url": "https://gitlab.homotopic.tech/horizon/horizon-platform"
       },
@@ -512,7 +597,7 @@
       "locked": {
         "lastModified": 1655192403,
         "narHash": "sha256-XyKDvRGDh8VXA6zN8DUTnDaTMrk0MxMKg70MaAX1A2Y=",
-        "ref": "refs/heads/master",
+        "ref": "master",
         "rev": "a7ae54afdc4c05a5aabf202d5a76d02705eb6147",
         "revCount": 28,
         "type": "git",
@@ -540,6 +625,23 @@
         "type": "github"
       }
     },
+    "moo": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1665149984,
+        "narHash": "sha256-HWxnkf6xEAFfY14QxQFU/RsQ09skzLSMKvrAB1EQstU=",
+        "owner": "milloni",
+        "repo": "moo",
+        "rev": "20e4c6ee880e7d62b18b995750063dd7349a3f8e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "milloni",
+        "ref": "milloni/build-fix",
+        "repo": "moo",
+        "type": "github"
+      }
+    },
     "nixpkgs": {
       "locked": {
         "lastModified": 1644525281,
@@ -574,11 +676,11 @@
     },
     "nixpkgs_2": {
       "locked": {
-        "lastModified": 1663551060,
-        "narHash": "sha256-e2SR4cVx9p7aW/XnVsGsWZBplApA9ZJUjc0fejJhnYo=",
+        "lastModified": 1664556388,
+        "narHash": "sha256-04xEtpc0AqLhgDtJ/kT+aZGPrXOI+1a3obf6iWrJQXs=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "8a5b9ee7b7a2b38267c9481f5c629c015108ab0d",
+        "rev": "511213e0ece88be30a4bd73488f7d1cd85879654",
         "type": "github"
       },
       "original": {
@@ -606,11 +708,11 @@
     },
     "nixpkgs_4": {
       "locked": {
-        "lastModified": 1662019588,
-        "narHash": "sha256-oPEjHKGGVbBXqwwL+UjsveJzghWiWV0n9ogo1X6l4cw=",
+        "lastModified": 1664989420,
+        "narHash": "sha256-Q8IxomUjjmewsoJgO3htkXLfCckQ7HkDJ/ZhdYVf/fA=",
         "owner": "nixos",
         "repo": "nixpkgs",
-        "rev": "2da64a81275b68fdad38af669afeda43d401e94b",
+        "rev": "37bd39839acf99c5b738319f42478296f827f274",
         "type": "github"
       },
       "original": {
@@ -673,11 +775,11 @@
     "quickcheck-dynamic": {
       "flake": false,
       "locked": {
-        "lastModified": 1662454862,
-        "narHash": "sha256-sMAO+Vkocf/ejwg2sx58rXlmoE6tTPQV/ECVVOnWPHo=",
+        "lastModified": 1664439350,
+        "narHash": "sha256-D58nHr/UmspU1LWxwvk9/NyUKzdlCSk1UYrHfWYcPqU=",
         "owner": "input-output-hk",
         "repo": "quickcheck-dynamic",
-        "rev": "81310df2de73094d5daff1b675a4318cff5fc8b5",
+        "rev": "d017f6a534e654312e6249c92a408fe354922f5f",
         "type": "github"
       },
       "original": {
@@ -692,27 +794,33 @@
         "all-cabal-hashes": "all-cabal-hashes",
         "cardano-base": "cardano-base",
         "cardano-crypto": "cardano-crypto",
+        "cardano-ledger": "cardano-ledger",
         "cardano-prelude": "cardano-prelude",
         "flake-parts": "flake-parts",
         "flake-utils": "flake-utils",
         "flat": "flat",
+        "ghc-typelits-knownnat": "ghc-typelits-knownnat",
+        "ghc-typelits-natnormalise": "ghc-typelits-natnormalise",
+        "gray-code": "gray-code",
         "haskell-flake": "haskell-flake",
         "horizon-platform": "horizon-platform",
         "lint-utils": "lint-utils_2",
+        "moo": "moo",
         "nixpkgs": "nixpkgs_4",
         "nixpkgs-libR": "nixpkgs-libR",
         "nothunks": "nothunks",
-        "plutus": "plutus"
+        "plutus": "plutus",
+        "strict-containers": "strict-containers"
       }
     },
     "servant": {
       "flake": false,
       "locked": {
-        "lastModified": 1662636711,
-        "narHash": "sha256-y6fySO8NqtEad+W+F48QJgRR0JYfqXwo/+MCxcrpJpg=",
+        "lastModified": 1664361303,
+        "narHash": "sha256-sDZsKGZV3I9l7sx2lHGU/bGmtnKbTHqHsXSkS0id2zg=",
         "owner": "TeofilC",
         "repo": "servant",
-        "rev": "a53d69929cf6fe531bb25aec65e7ab6405278459",
+        "rev": "76fc90a51f915230bbe1e0d1dbe9727fcdc7a0fc",
         "type": "github"
       },
       "original": {
@@ -722,6 +830,23 @@
         "type": "github"
       }
     },
+    "strict-containers": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1665410955,
+        "narHash": "sha256-K0QfB5GFYlJ/D0KO3U6SxWOBgZx8NvcuAgRhV1JhbOg=",
+        "owner": "milloni",
+        "repo": "strict-containers",
+        "rev": "9e833be00bc2c5cdb0b4e743b7a2cde00dd4f616",
+        "type": "github"
+      },
+      "original": {
+        "owner": "milloni",
+        "ref": "milloni/fix",
+        "repo": "strict-containers",
+        "type": "github"
+      }
+    },
     "sydtest": {
       "flake": false,
       "locked": {
@@ -741,11 +866,11 @@
     "tasty": {
       "flake": false,
       "locked": {
-        "lastModified": 1660335396,
-        "narHash": "sha256-kZjFyOWW2WLs4+MerJi5xgpBorO8lkfEOeNS1bJhygs=",
+        "lastModified": 1663784811,
+        "narHash": "sha256-YbPOBdGyUkyAF1M1ngRVtxWyEjmG2/Xbde4VSG/if1U=",
         "owner": "UnkindPartition",
         "repo": "tasty",
-        "rev": "df7ccab50d361c7d1a3c00960faac883d98c2530",
+        "rev": "207d3453a64b414593512c1e968171d64a8dbe61",
         "type": "github"
       },
       "original": {
@@ -773,11 +898,11 @@
     "unicode-data": {
       "flake": false,
       "locked": {
-        "lastModified": 1663575864,
-        "narHash": "sha256-HWxlqziq3j2ev9wpON6NDUcCn9cjH72S/ddxSkvGLDY=",
+        "lastModified": 1664354489,
+        "narHash": "sha256-fQlOCE0iUUv+SLRCDExzGk4GiDIHeOEsJAW1RRbTMiE=",
         "owner": "composewell",
         "repo": "unicode-data",
-        "rev": "e924329f0e5e853426ec7453da23b11dceb53136",
+        "rev": "bf8bb533650119b3ce196aa95b009c6f4ebc1f04",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index fbdf92f9cb586c51b8263fa6ec226a24195e4185..b93a60b0889b88536b74de4d12a711b1d5cdcd30 100644
--- a/flake.nix
+++ b/flake.nix
@@ -12,6 +12,10 @@
       url = "github:input-output-hk/cardano-crypto/07397f0e50da97eaa0575d93bee7ac4b2b2576ec";
       flake = false;
     };
+    cardano-ledger = {
+      url = "github:milloni/cardano-ledger?ref=milloni/horizon";
+      flake = false;
+    };
     cardano-prelude = {
       url = "github:input-output-hk/cardano-prelude";
       flake = false;
@@ -22,6 +26,18 @@
     };
     flake-parts.url = "github:hercules-ci/flake-parts";
     flake-parts.inputs.nixpkgs.follows = "nixpkgs";
+    ghc-typelits-knownnat = {
+      url = "github:clash-lang/ghc-typelits-knownnat?ref=941-support";
+      flake = false;
+    };
+    ghc-typelits-natnormalise = {
+      url = "github:clash-lang/ghc-typelits-natnormalise";
+      flake = false;
+    };
+    gray-code = {
+      url = "github:milloni/gray-code-0.3.1?ref=milloni/fix-quicktest";
+      flake = false;
+    };
     haskell-flake.url = "github:srid/haskell-flake";
     horizon-platform = {
       url = "git+https://gitlab.homotopic.tech/horizon/horizon-platform";
@@ -31,6 +47,10 @@
       flake = false;
     };
     lint-utils.url = "git+https://gitlab.homotopic.tech/nix/lint-utils";
+    moo = {
+      url = "github:milloni/moo?ref=milloni/build-fix";
+      flake = false;
+    };
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
     nixpkgs-libR.url = "github:nixos/nixpkgs/602748c14b82a2e17078713686fe1df2824fa502";
     nothunks = {
@@ -41,6 +61,10 @@
       url = "github:milloni/plutus?ref=milloni/ghc942";
       flake = false;
     };
+    strict-containers = {
+      url = "github:milloni/strict-containers?ref=milloni/fix";
+      flake = false;
+    };
   };
   outputs = inputs@{ self, nixpkgs, nixpkgs-libR, horizon-platform, flake-utils, lint-utils, ... }:
     flake-utils.lib.eachSystem [ "x86_64-linux" ] (system:
diff --git a/overlay.nix b/overlay.nix
index c913813fc3ee2a4b7868cbbf91f04b16500d1ff3..84f6ef0741f2796ae7a1561b89a24cf44ee5f66d 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -6,6 +6,8 @@ final: prev: with pkgs.haskell.lib;
 
   PyF = prev.callHackage "PyF" "0.11.0.0" { };
 
+  Unique = dontCheck (doJailbreak (prev.callHackage "Unique" "0.4.7.9" {}));
+
   algebraic-graphs = prev.callHackage "algebraic-graphs" "0.7" {};
 
   bin = doJailbreak prev.bin;
@@ -34,6 +36,12 @@ final: prev: with pkgs.haskell.lib;
 
   fin = doJailbreak prev.fin;
 
+  ghc-typelits-knownnat = prev.callCabal2nix "ghc-typelits-knownnat" inputs.ghc-typelits-knownnat {};
+
+  ghc-typelits-natnormalise = prev.callCabal2nix "ghc-typelits-natnormalise" inputs.ghc-typelits-natnormalise {};
+
+  gray-code = prev.callCabal2nix "gray-code" inputs.gray-code {};
+
   heapwords = enableCabalFlag (prev.callCabal2nix "heapwords" (inputs.cardano-base + /heapwords) {}) "development";
 
   inline-r = doJailbreak (prev.callCabal2nix "inline-r" (inputs.HaskellR + /inline-r) {});
@@ -44,6 +52,8 @@ final: prev: with pkgs.haskell.lib;
 
   monoidal-containers = doJailbreak prev.monoidal-containers;
 
+  moo = dontCheck (prev.callCabal2nix "moo" inputs.moo {});
+
   multiset = dontCheck prev.multiset;
 
   nonempty-vector = doJailbreak (dontCheck prev.nonempty-vector);
@@ -73,6 +83,12 @@ final: prev: with pkgs.haskell.lib;
 
   singletons-th = prev.callHackage "singletons-th" "3.1.1" { };
 
+  small-steps = doJailbreak (prev.callCabal2nix "small-steps" (inputs.cardano-ledger + /libs/small-steps) {});
+
+  small-steps-test = doJailbreak (prev.callCabal2nix "small-steps-test" (inputs.cardano-ledger + /libs/small-steps) {});
+
+  strict-containers = dontCheck (doJailbreak (prev.callCabal2nix "strict-containers" (inputs.strict-containers + /strict-containers) {}));
+
   th-extras = doJailbreak prev.th-extras;
 
   th-desugar = prev.callHackage "th-desugar" "1.14" {};