diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4573eead98b91c54fdec1e8b0b72ab2847a96f92..d662779c5b5d013cf5009f908e70f9f575b0177e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -14,12 +14,6 @@ aarch64-darwin:devour:
   script:
   - nix build github:srid/devour-flake#packages.aarch64-darwin.default -L --no-link --print-out-paths --override-input flake . --keep-going
 
-aarch64-linux:devour:
-  stage: devour
-  script:
-  - nix build github:srid/devour-flake#packages.aarch64-linux.default -L --no-link --print-out-paths --override-input flake . --keep-going
-
-
 x86_64-linux:generate:
   stage: generate
   needs: ["x86_64-linux:devour"]
@@ -61,28 +55,6 @@ aarch64-darwin:packages:
         job: aarch64-darwin:generate
     strategy: depend
 
-
-aarch64-linux:generate:
-  stage: generate
-  needs: ["aarch64-linux:devour"]
-  script:
-  - nix run "git+https://gitlab.horizon-haskell.net/haskell/flake-to-gitlab-ci?ref=refs/tags/0.2.5.0" -- aarch64-linux > flake-ci.yml
-  when: on_failure
-  artifacts:
-    paths:
-      - flake-ci.yml
-
-aarch64-linux:packages:
-  stage: packages
-  needs: ["aarch64-linux:devour", "aarch64-linux:generate"]
-  when: on_failure
-  trigger:
-    include:
-      - artifact: flake-ci.yml
-        job: aarch64-linux:generate
-    strategy: depend
-
-
 x86_64-linux:cachix:
   stage: cache
   rules:
@@ -96,10 +68,3 @@ aarch64-darwin:cachix:
     - if: $CI_COMMIT_REF_PROTECTED == "true"
   script:
   - nix-shell -p cachix --command "nix build github:srid/devour-flake#packages.aarch64-darwin.default -L --no-link --print-out-paths --override-input flake . | xargs cat | cachix push horizon"
-
-aarch64-linux:cachix:
-  stage: cache
-  rules:
-    - if: $CI_COMMIT_REF_PROTECTED == "true"
-  script:
-  - nix-shell -p cachix --command "nix build github:srid/devour-flake#packages.aarch64-linux.default -L --no-link --print-out-paths --override-input flake . | xargs cat | cachix push horizon"
diff --git a/horizon.dhall b/horizon.dhall
index 99fa4c3db948cf6d3eb063ec44678b62f6dd7be3..5a732f4374dba7c1b54a1eb26e6379a919cb7f13 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -50,20 +50,24 @@ let packages =
         , mtl-prelude = H.callHackage "mtl-prelude" "2.0.3.2"
         , multiset = H.callHackage "multiset" "0.3.4.3"
         , nonempty-vector = H.callHackage "nonempty-vector" "0.2.2.0"
+        , ordered-containers = H.callHackage "ordered-containers" "0.2.3"
         , ral = H.callHackage "ral" "0.2.1"
         , rebase = H.callHackage "rebase" "1.20.2"
         , rerebase = H.callHackage "rerebase" "1.20.2"
+        , singletons = H.callHackage "singletons" "3.0.2"
+        , singletons-th = H.callHackage "singletons-th" "3.2"
         , size-based = H.callHackage "size-based" "0.1.3.1"
         , testing-type-modifiers =
             H.callHackage "testing-type-modifiers" "0.1.0.1"
+        , th-desugar = H.callHackage "th-desugar" "1.15"
         , timeit = H.callHackage "timeit" "2.0"
-        , plutus-core = callCHaP "plutus-core" "1.21.0.0"
-        , plutus-ledger-api = callCHaP "plutus-ledger-api" "1.21.0.0"
-        , plutus-tx = callCHaP "plutus-tx" "1.21.0.0"
-        , plutus-tx-plugin = callCHaP "plutus-tx-plugin" "1.21.0.0"
+        , plutus-core = callCHaP "plutus-core" "1.27.0.0"
+        , plutus-ledger-api = callCHaP "plutus-ledger-api" "1.27.0.0"
+        , plutus-tx = callCHaP "plutus-tx" "1.27.0.0"
+        , plutus-tx-plugin = callCHaP "plutus-tx-plugin" "1.27.0.0"
         , pointed = H.callHackage "pointed" "5.0.4"
         , prettyprinter-configurable =
-            callCHaP "prettyprinter-configurable" "1.21.0.0"
+            callCHaP "prettyprinter-configurable" "1.27.0.0"
         , protolude = H.callHackage "protolude" "0.3.3"
         , quickcheck-text = H.callHackage "quickcheck-text" "0.1.2.1"
         , quickcheck-transformer =
diff --git a/horizon.lock b/horizon.lock
index 890d15bae4bd368da07b77b13ef31c0b62f8381d..dab8f60bd89b081177adeb31e21f5acf075425da 100644
--- a/horizon.lock
+++ b/horizon.lock
@@ -146,21 +146,25 @@
   , mapValue =
       "9d80fc08e3d760d8af9a0f34147125f2a58c615dad1a52596b78a108685cb4b6"
   }
+, { mapKey = "ordered-containers"
+  , mapValue =
+      "82399ab7c3bc5396733b8f6bd020287315bb4f5f7370930cdaeaa2e3ba7d5ac3"
+  }
 , { mapKey = "plutus-core"
   , mapValue =
-      "18732c5023a841f3e37912f3a228797b10d1588228de46715ffe760cf9de0497"
+      "8d44f9e5c546f5357467ee32cbbe117cf01daf864bd2d3f59041a7fc4a2da53d"
   }
 , { mapKey = "plutus-ledger-api"
   , mapValue =
-      "b9e3ee528c819f47c0f280b0f04026632e6165d8702932be40269d508fb8390f"
+      "2fa871510ecd3a48703003a8fdd0f87ebd2378c05951c93a2d4c5edf9b03861f"
   }
 , { mapKey = "plutus-tx"
   , mapValue =
-      "468a23b35b159f46c99fffe6def7c4f23656ae0d241b680b313f66385ccc44e4"
+      "cb4c8e02c1c1ef5099a586843d35114b2880b02fa52a0358b18bfbf8f643e5c0"
   }
 , { mapKey = "plutus-tx-plugin"
   , mapValue =
-      "fb6a8ed441dd44e729592f1be852f0a88bcf0b19de467026191a47a6ae11e958"
+      "4122991755f1842b0be454aed7ce939c5230c8bad890d47caafe5a80cdaac8dc"
   }
 , { mapKey = "pointed"
   , mapValue =
@@ -168,7 +172,7 @@
   }
 , { mapKey = "prettyprinter-configurable"
   , mapValue =
-      "53cf758c6d1badd3dad57e04b449c698701bbe352485daeca0fbcf37980d207c"
+      "7bf7f4bd7e6d0611ac824d1c2ea11dd3ee00a35bbcb72bb188eb0fd8428e7ffb"
   }
 , { mapKey = "protolude"
   , mapValue =
@@ -194,6 +198,14 @@
   , mapValue =
       "ef1324b562e7a76e1ea4d7b28668433f5335d06a0e05512afa3847fe002531f1"
   }
+, { mapKey = "singletons"
+  , mapValue =
+      "3794647db60781862718845669b5b889b4d6ddf81dbced4f676596dc03c95cf0"
+  }
+, { mapKey = "singletons-th"
+  , mapValue =
+      "e0f5fe7b3164ada93df85657c38134b14f3434c7462c6b0cdaa76e1c96f237d6"
+  }
 , { mapKey = "size-based"
   , mapValue =
       "eb8507a989ea112f6da17056c1358384f6a2aa520330b0050ac60ff3c04d8640"
@@ -202,6 +214,10 @@
   , mapValue =
       "e5fdcd67cb1473c656713b3eb1ca9f6928b63d82383d88e3f24e7f564f913138"
   }
+, { mapKey = "th-desugar"
+  , mapValue =
+      "10e4baa5f6bc4b1f38886e2b2a4d601766b70b97bc9adb2d13465729cb5ac705"
+  }
 , { mapKey = "timeit"
   , mapValue =
       "022199d17c6465f72907d4e4d7fb9e5f569c3e0105ac487fd2fbb66488705a7f"
diff --git a/overlay.nix b/overlay.nix
index 171c48f7e3a514d91a248d08e6843982ade14b06..ff58b14ef79eae163227ed1daa2807f6d1909cd1 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -75,6 +75,8 @@ final: prev: with pkgs.haskell.lib; {
 
   nonempty-vector = final.callPackage (./pkgs/nonempty-vector.nix) { };
 
+  ordered-containers = final.callPackage (./pkgs/ordered-containers.nix) { };
+
   plutus-core = final.callPackage (./pkgs/plutus-core.nix) { };
 
   plutus-ledger-api = final.callPackage (./pkgs/plutus-ledger-api.nix) { };
@@ -99,10 +101,16 @@ final: prev: with pkgs.haskell.lib; {
 
   rerebase = final.callPackage (./pkgs/rerebase.nix) { };
 
+  singletons = final.callPackage (./pkgs/singletons.nix) { };
+
+  singletons-th = final.callPackage (./pkgs/singletons-th.nix) { };
+
   size-based = final.callPackage (./pkgs/size-based.nix) { };
 
   testing-type-modifiers = final.callPackage (./pkgs/testing-type-modifiers.nix) { };
 
+  th-desugar = final.callPackage (./pkgs/th-desugar.nix) { };
+
   timeit = final.callPackage (./pkgs/timeit.nix) { };
 
   vector-instances = final.callPackage (./pkgs/vector-instances.nix) { };
diff --git a/pkgs/ordered-containers.nix b/pkgs/ordered-containers.nix
new file mode 100644
index 0000000000000000000000000000000000000000..8959f707fed075457376f55aec0c84f433839312
--- /dev/null
+++ b/pkgs/ordered-containers.nix
@@ -0,0 +1,20 @@
+{ mkDerivation, base, containers, lib }:
+mkDerivation {
+  pname = "ordered-containers";
+  version = "0.2.3";
+  sha256 = "36849705752f3bc367fa1d172e1ec57375418341e9d74de572ae1b6fb56a81a3";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base containers ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "Set- and Map-like types that remember the order elements were inserted";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/plutus-core.nix b/pkgs/plutus-core.nix
index 4fa8f76f4b49f1b25082a934b253e96b3a75db83..15afdab20730eb328ffae22edbab3c1eb33853b1 100644
--- a/pkgs/plutus-core.nix
+++ b/pkgs/plutus-core.nix
@@ -1,32 +1,33 @@
-{ mkDerivation, HUnit, QuickCheck, Stream, aeson, algebraic-graphs
-, array, barbies, base, base64-bytestring, bifunctors, bimap, brick
-, bytestring, bytestring-strict-builder, cardano-crypto
-, cardano-crypto-class, cassava, cborg, composition-prelude
-, containers, criterion, criterion-measurement, cryptonite
-, data-default-class, deepseq, dependent-map, dependent-sum
-, deriving-aeson, deriving-compat, directory, dlist, dom-lt
-, exceptions, extra, fetchzip, filepath, flat, free, ghc-prim
-, hashable, haskeline, hedgehog, hex-text, lazy-search, lens, lib
-, megaparsec, microlens, microlens-th, mmorph, mono-traversable
-, monoidal-containers, mtl, multiset, nonempty-vector, nothunks
-, optparse-applicative, parser-combinators, pretty-show
-, prettyprinter, prettyprinter-configurable, primitive, profunctors
+{ mkDerivation, HUnit, QuickCheck, Stream, aeson, aeson-pretty
+, algebraic-graphs, array, barbies, base, base64-bytestring
+, bifunctors, bimap, brick, bytestring, bytestring-strict-builder
+, cardano-crypto, cardano-crypto-class, cassava, cborg
+, composition-prelude, containers, criterion, criterion-measurement
+, cryptonite, data-default-class, deepseq, dependent-map
+, dependent-sum, deriving-aeson, deriving-compat, directory, dlist
+, dom-lt, exceptions, extra, fetchzip, filepath, flat, free
+, ghc-prim, hashable, haskeline, hedgehog, hex-text, lazy-search
+, lens, lib, megaparsec, microlens, microlens-th, mmorph
+, mono-traversable, monoidal-containers, mtl, multiset
+, nonempty-vector, nothunks, optparse-applicative
+, parser-combinators, pretty-show, prettyprinter
+, prettyprinter-configurable, primitive, profunctors
 , quickcheck-instances, quickcheck-transformer, ral, random
 , recursion-schemes, semigroupoids, semigroups, serialise
-, size-based, some, split, tagged, tasty, tasty-discover
-, tasty-expected-failure, tasty-golden, tasty-hedgehog, tasty-hunit
-, tasty-quickcheck, template-haskell, test-framework
-, test-framework-hunit, test-framework-quickcheck2, text
-, text-zipper, th-compat, th-lift, th-lift-instances, th-utilities
-, time, transformers, unordered-containers, vector, vty
-, vty-crossplatform, witherable
+, singletons, singletons-th, size-based, some, split, tagged, tasty
+, tasty-discover, tasty-expected-failure, tasty-golden
+, tasty-hedgehog, tasty-hunit, tasty-quickcheck, template-haskell
+, test-framework, test-framework-hunit, test-framework-quickcheck2
+, text, text-zipper, th-compat, th-lift, th-lift-instances
+, th-utilities, time, transformers, unordered-containers, vector
+, vty, vty-crossplatform, witherable
 }:
 mkDerivation {
   pname = "plutus-core";
-  version = "1.21.0.0";
+  version = "1.27.0.0";
   src = fetchzip {
-    url = "https://chap.intersectmbo.org/package/plutus-core-1.21.0.0.tar.gz";
-    sha256 = "0kryy9gzy59jrspcwmbp2wypha6fm8hwlas9a44q4f7nmiyq2wcs";
+    url = "https://chap.intersectmbo.org/package/plutus-core-1.27.0.0.tar.gz";
+    sha256 = "0qqipppnjmybmrvd5d27mbhc1sjj0a1fw9qfaj3c266pnwf0x15k";
   };
   isLibrary = true;
   isExecutable = true;
@@ -46,22 +47,23 @@ mkDerivation {
     semigroupoids semigroups serialise size-based some Stream tagged
     tasty tasty-golden tasty-hedgehog tasty-hunit template-haskell text
     th-compat th-lift th-lift-instances th-utilities time transformers
-    unordered-containers witherable
+    unordered-containers vector witherable
   ];
   executableHaskellDepends = [
-    aeson base brick bytestring cardano-crypto-class cassava containers
-    criterion criterion-measurement deepseq directory exceptions
-    filepath flat haskeline hedgehog lens megaparsec microlens
-    microlens-th mono-traversable mtl optparse-applicative
-    prettyprinter primitive QuickCheck quickcheck-instances random
+    aeson aeson-pretty base brick bytestring cardano-crypto-class
+    cassava containers criterion criterion-measurement deepseq
+    directory exceptions filepath flat haskeline hedgehog lens
+    megaparsec microlens microlens-th mono-traversable mtl
+    optparse-applicative prettyprinter primitive QuickCheck
+    quickcheck-instances random serialise singletons singletons-th
     split text text-zipper time transformers vector vty
     vty-crossplatform
   ];
   testHaskellDepends = [
     aeson base bytestring cardano-crypto-class cassava containers
-    data-default-class dlist filepath flat hashable hedgehog hex-text
-    HUnit lens mmorph mtl nonempty-vector pretty-show prettyprinter
-    QuickCheck quickcheck-instances serialise split tasty
+    data-default-class dlist extra filepath flat hashable hedgehog
+    hex-text HUnit lens mmorph mtl nonempty-vector pretty-show
+    prettyprinter QuickCheck quickcheck-instances serialise split tasty
     tasty-expected-failure tasty-golden tasty-hedgehog tasty-hunit
     tasty-quickcheck template-haskell test-framework
     test-framework-hunit test-framework-quickcheck2 text
diff --git a/pkgs/plutus-ledger-api.nix b/pkgs/plutus-ledger-api.nix
index 47af735830a1048b52e1fbca6da2fbf654982435..f178d2582ba9c1413993ac910621a2f65c176a06 100644
--- a/pkgs/plutus-ledger-api.nix
+++ b/pkgs/plutus-ledger-api.nix
@@ -1,23 +1,23 @@
 { mkDerivation, PyF, QuickCheck, async, barbies, base
 , base16-bytestring, base64-bytestring, bytestring, cborg
-, containers, deepseq, extra, fetchzip, filepath, flat, hedgehog
-, lens, lib, mtl, nothunks, plutus-core, plutus-tx
-, plutus-tx-plugin, prettyprinter, primitive, serialise, tagged
-, tasty, tasty-hedgehog, tasty-hunit, tasty-quickcheck, text
+, containers, deepseq, extra, fetchzip, filepath, hedgehog, lens
+, lib, mtl, nothunks, plutus-core, plutus-tx, plutus-tx-plugin
+, prettyprinter, primitive, serialise, tagged, tasty
+, tasty-hedgehog, tasty-hunit, tasty-quickcheck, text
 }:
 mkDerivation {
   pname = "plutus-ledger-api";
-  version = "1.21.0.0";
+  version = "1.27.0.0";
   src = fetchzip {
-    url = "https://chap.intersectmbo.org/package/plutus-ledger-api-1.21.0.0.tar.gz";
-    sha256 = "11jf09xjm0fx1bc29xwvg8f76mpnwfafhdr7imralmckr00h1grl";
+    url = "https://chap.intersectmbo.org/package/plutus-ledger-api-1.27.0.0.tar.gz";
+    sha256 = "1bidhyl2zr2a9ha2am8v27qc03k9qx3bhm6bacvsh7zdb93r8f5j";
   };
   isLibrary = true;
   isExecutable = true;
   enableSeparateDataOutput = false;
   libraryHaskellDepends = [
     barbies base base16-bytestring base64-bytestring bytestring cborg
-    containers deepseq flat lens mtl nothunks plutus-core plutus-tx
+    containers deepseq lens mtl nothunks plutus-core plutus-tx
     prettyprinter PyF QuickCheck serialise tagged text
   ];
   executableHaskellDepends = [
diff --git a/pkgs/plutus-tx-plugin.nix b/pkgs/plutus-tx-plugin.nix
index ef97bf44b64dfe20b21f731dedd8fa2646694ffc..9129786e7adb1f0c2d498df12791743ddd9dfbcb 100644
--- a/pkgs/plutus-tx-plugin.nix
+++ b/pkgs/plutus-tx-plugin.nix
@@ -1,15 +1,15 @@
 { mkDerivation, PyF, array, base, bytestring, containers, deepseq
 , either, extra, fetchzip, filepath, flat, ghc, hedgehog, lens, lib
 , mtl, optparse-applicative, plutus-core, plutus-tx, prettyprinter
-, tagged, tasty, tasty-hedgehog, tasty-hunit, template-haskell
-, text, uniplate
+, serialise, tagged, tasty, tasty-golden, tasty-hedgehog
+, tasty-hunit, template-haskell, text, uniplate
 }:
 mkDerivation {
   pname = "plutus-tx-plugin";
-  version = "1.21.0.0";
+  version = "1.27.0.0";
   src = fetchzip {
-    url = "https://chap.intersectmbo.org/package/plutus-tx-plugin-1.21.0.0.tar.gz";
-    sha256 = "124xyvwjg18p0rw1sy03ma61cvhiw01vzdjbxjylwwp7zbq6lnq3";
+    url = "https://chap.intersectmbo.org/package/plutus-tx-plugin-1.27.0.0.tar.gz";
+    sha256 = "1dx6a479b1pfh264az467n5pbx6i6zflng4973v3py35vvaa4lcf";
   };
   isLibrary = true;
   isExecutable = true;
@@ -23,9 +23,9 @@ mkDerivation {
     base containers lens optparse-applicative prettyprinter PyF text
   ];
   testHaskellDepends = [
-    base containers deepseq filepath flat hedgehog lens mtl plutus-core
-    plutus-tx tagged tasty tasty-hedgehog tasty-hunit template-haskell
-    text
+    base bytestring containers deepseq filepath flat hedgehog lens mtl
+    plutus-core plutus-tx serialise tagged tasty tasty-golden
+    tasty-hedgehog tasty-hunit template-haskell text
   ];
   enableLibraryProfiling = true;
   enableExecutableProfiling = true;
diff --git a/pkgs/plutus-tx.nix b/pkgs/plutus-tx.nix
index 5ba730a3500fbabcc60930bf30a018e484c00352..5ccb278221b2030fed81e0cddd808132584595f9 100644
--- a/pkgs/plutus-tx.nix
+++ b/pkgs/plutus-tx.nix
@@ -1,31 +1,32 @@
-{ mkDerivation, aeson, base, base16-bytestring, bytestring, cborg
-, containers, data-default-class, deepseq, deriving-compat, doctest
-, extra, fetchzip, filepath, flat, ghc-prim, hashable, hedgehog
-, hedgehog-fn, lens, lib, memory, mtl, plutus-core, pretty-show
-, prettyprinter, serialise, tagged, tasty, tasty-hedgehog
-, tasty-hunit, template-haskell, text, th-abstraction, th-compat
-, transformers
+{ mkDerivation, aeson, aeson-pretty, base, base16-bytestring
+, bytestring, cborg, containers, data-default-class, deepseq
+, deriving-compat, doctest, extra, fetchzip, filepath, flat
+, ghc-prim, hashable, hedgehog, hedgehog-fn, lens, lib, memory, mtl
+, plutus-core, pretty-show, prettyprinter, serialise, tagged, tasty
+, tasty-hedgehog, tasty-hunit, template-haskell, text
+, th-abstraction, th-compat, transformers
 }:
 mkDerivation {
   pname = "plutus-tx";
-  version = "1.21.0.0";
+  version = "1.27.0.0";
   src = fetchzip {
-    url = "https://chap.intersectmbo.org/package/plutus-tx-1.21.0.0.tar.gz";
-    sha256 = "0k63i92bxz29wxc0lxp88p4n5mryqzlfq3mk25agda1crh0j5hfm";
+    url = "https://chap.intersectmbo.org/package/plutus-tx-1.27.0.0.tar.gz";
+    sha256 = "14m8nwq91ymk4zy7ihy4js9a5lw1xjw7kz6rf9sx532qyj0wd1hh";
   };
   isLibrary = true;
   isExecutable = false;
   enableSeparateDataOutput = false;
   libraryHaskellDepends = [
-    aeson base bytestring containers data-default-class deepseq
-    deriving-compat extra flat ghc-prim hashable hedgehog lens memory
-    mtl plutus-core prettyprinter serialise tagged tasty tasty-hedgehog
-    template-haskell text th-abstraction th-compat
+    aeson aeson-pretty base base16-bytestring bytestring containers
+    data-default-class deepseq deriving-compat extra flat ghc-prim
+    hashable hedgehog lens memory mtl plutus-core prettyprinter
+    serialise tagged tasty tasty-hedgehog template-haskell text
+    th-abstraction th-compat
   ];
   testHaskellDepends = [
-    aeson base base16-bytestring bytestring cborg filepath hedgehog
-    hedgehog-fn plutus-core pretty-show serialise tasty tasty-hedgehog
-    tasty-hunit text transformers
+    aeson base base16-bytestring bytestring cborg containers filepath
+    hedgehog hedgehog-fn lens plutus-core pretty-show serialise tasty
+    tasty-hedgehog tasty-hunit text transformers
   ];
   testToolDepends = [ doctest ];
   enableLibraryProfiling = true;
diff --git a/pkgs/prettyprinter-configurable.nix b/pkgs/prettyprinter-configurable.nix
index 3984be954765c03bdba8be808933e48dc3f287ff..61fc31447ac74eadbff6975cfc31d65e1fd3401a 100644
--- a/pkgs/prettyprinter-configurable.nix
+++ b/pkgs/prettyprinter-configurable.nix
@@ -5,10 +5,10 @@
 }:
 mkDerivation {
   pname = "prettyprinter-configurable";
-  version = "1.21.0.0";
+  version = "1.27.0.0";
   src = fetchzip {
-    url = "https://chap.intersectmbo.org/package/prettyprinter-configurable-1.21.0.0.tar.gz";
-    sha256 = "0lpmq26h4bvrqhlxj9hw11jwjx36yw7h70r5zr70q907b132d478";
+    url = "https://chap.intersectmbo.org/package/prettyprinter-configurable-1.27.0.0.tar.gz";
+    sha256 = "0gaky3s74cms6z8yrqp3synh1fdmz8fxw6cqgdhymw3n8b0dx98f";
   };
   isLibrary = true;
   isExecutable = false;
diff --git a/pkgs/singletons-th.nix b/pkgs/singletons-th.nix
new file mode 100644
index 0000000000000000000000000000000000000000..1a7d511160fe1079af9088c6fc6a8b7e611004db
--- /dev/null
+++ b/pkgs/singletons-th.nix
@@ -0,0 +1,26 @@
+{ mkDerivation, base, containers, ghc-boot-th, lib, mtl, singletons
+, syb, template-haskell, th-desugar, th-orphans, transformers
+}:
+mkDerivation {
+  pname = "singletons-th";
+  version = "3.2";
+  sha256 = "775e084f4304e9aba82642da37d3e9111dade2eff2603538a70661ce134c95e4";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base containers ghc-boot-th mtl singletons syb template-haskell
+    th-desugar th-orphans transformers
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://www.github.com/goldfirere/singletons";
+  description = "A framework for generating singleton types";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/singletons.nix b/pkgs/singletons.nix
new file mode 100644
index 0000000000000000000000000000000000000000..33596097334e195be3c1ebc073be790f2005b6df
--- /dev/null
+++ b/pkgs/singletons.nix
@@ -0,0 +1,24 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "singletons";
+  version = "3.0.2";
+  sha256 = "f568ee129ef6438a4325f145f17fa4a3074b3564c72fd35ba1f68dcee14d5e82";
+  revision = "2";
+  editedCabalFile = "040hwa1r4vx64v62ffw2nfn29h91ns082zqc47jsp5ciwl69821p";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  testHaskellDepends = [ base ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://www.github.com/goldfirere/singletons";
+  description = "Basic singleton types and definitions";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file
diff --git a/pkgs/th-desugar.nix b/pkgs/th-desugar.nix
new file mode 100644
index 0000000000000000000000000000000000000000..c24b0e72d284b50ed5ac62d08e09a93568094d53
--- /dev/null
+++ b/pkgs/th-desugar.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, HUnit, base, containers, ghc-prim, hspec, lib, mtl
+, ordered-containers, syb, template-haskell, th-abstraction
+, th-orphans, transformers-compat
+}:
+mkDerivation {
+  pname = "th-desugar";
+  version = "1.15";
+  sha256 = "179e2cddabb1af642d08e304fa24f4910ad42aae10095961a47d0c916e5ffe98";
+  revision = "1";
+  editedCabalFile = "1mpig192p595d3961w1x35w50h8i6c9zp0h4d44mnjy2wd7hb99j";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base containers ghc-prim mtl ordered-containers syb
+    template-haskell th-abstraction th-orphans transformers-compat
+  ];
+  testHaskellDepends = [
+    base containers hspec HUnit mtl syb template-haskell th-abstraction
+    th-orphans
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = true;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/goldfirere/th-desugar";
+  description = "Functions to desugar Template Haskell";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
\ No newline at end of file