let
  overrides = { lib, mylib }: self: super:
    mylib.mapNixDir (path: self.callPackage path {}) [
      ./.
    ] // {
    };
in
  self: super: let
    inherit (super) lib mylib;
  in {
    haskell = super.haskell // {
      packages = lib.mapAttrs (name: value:
        if builtins.hasAttr "override" value
          then value.override (old: {
            overrides =
              lib.composeExtensions (old.overrides or (_: _: { })) (overrides { inherit lib mylib; });
          })
          else value
      ) super.haskell.packages;
    };
    haskellPackages = super.haskellPackages.override (old: {
      overrides =
        lib.composeExtensions (old.overrides or (_: _: { })) (overrides { inherit lib mylib; });
    });
  }