diff --git a/manifest.dhall b/manifest.dhall
index cb166e0353bcbc7d73f44cb239716d6cb53cfdf3..7d4eec37b307b6681cbd1d4cbeea46998736e5e7 100644
--- a/manifest.dhall
+++ b/manifest.dhall
@@ -158,6 +158,7 @@ in  [ callHackage "HTF" "0.15.0.0"
         "https://github.com/milloni/gray-code-0.3.1"
         (Some "f310a19e44416206633cfd084f10ffb7cfea9f1d")
         (None Text)
+    , callHackage "haskell-src" "1.0.4"
     , callCabal2nix
         "heapwords"
         "https://github.com/input-output-hk/cardano-base"
diff --git a/overlay.nix b/overlay.nix
index dec4dae5aba869b3ada6f86007658f2a66f28cc8..ec335959e4f8fa5326888fb7ca6e6683771a5fdf 100644
--- a/overlay.nix
+++ b/overlay.nix
@@ -97,6 +97,8 @@ final: prev: with pkgs.haskell.lib; {
 
   gray-code = prev.callPackage (./pkgs/gray-code.nix) { };
 
+  haskell-src = prev.callPackage (./pkgs/haskell-src.nix) { };
+
   heapwords = prev.callPackage (./pkgs/heapwords.nix) { };
 
   hedgehog-quickcheck = prev.callPackage (./pkgs/hedgehog-quickcheck.nix) { };
diff --git a/pkgs/haskell-src.nix b/pkgs/haskell-src.nix
new file mode 100644
index 0000000000000000000000000000000000000000..3b56fca6aa098bc88ac657cccf8451b6a05e430d
--- /dev/null
+++ b/pkgs/haskell-src.nix
@@ -0,0 +1,23 @@
+{ mkDerivation, array, base, happy, lib, pretty, syb }:
+mkDerivation {
+  pname = "haskell-src";
+  version = "1.0.4";
+  sha256 = "8bc77695f9cc113933048409d2ed3bf2a3b947e18312a23b0dbb7838d086f3ea";
+  revision = "1";
+  editedCabalFile = "0dfjzq0sxxcalqxygp2svx4890qx8b4amad0xldwy1f4xrp3lsnb";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ array base pretty syb ];
+  libraryToolDepends = [ happy ];
+  enableLibraryProfiling = false;
+  enableExecutableProfiling = false;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  description = "Support for manipulating Haskell source code";
+  license = lib.licenses.bsd3;
+  broken = false;
+}