about summary refs log tree commit diff
path: root/users/wpcarro/buildHaskell/default.nix
blob: 2f0fd9e1c2d1a1fe04a58ee35c82df45c77a3438 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{ pkgs, ... }:

{
  # Create a nix-shell for Haskell development.
  shell = { deps }:
    let
      ghc = pkgs.haskellPackages.ghcWithPackages (hpkgs: deps hpkgs);
    in
    pkgs.mkShell {
      buildInputs = [ ghc ];
    };

  # Build a Haskell executable. This assumes a project directory with a
  # top-level Main.hs.
  # - `name`: You can find the result at ./result/$name
  # - `srcs`: Will be passed to `srcs` field of `pkgs.stdenv.mkDerivation`.
  # - `deps`: A function that accepts `hpkgs` and returns a list of Haskell
  # - `ghcExtensions`: A list of strings representing the language extensions to
  #   use.
  program = { name, srcs, deps, ghcExtensions }:
    let
      ghc = pkgs.haskellPackages.ghcWithPackages (hpkgs: deps hpkgs);
    in
    pkgs.stdenv.mkDerivation {
      name = name;
      buildInputs = [ ];
      srcs = srcs;
      buildPhase = ''
        ${ghc}/bin/ghc -Wall Main.hs ${pkgs.lib.concatMapStrings (x: "-X${x} ") ghcExtensions}
      '';
      installPhase = ''
        mkdir -p $out && mv Main $out/${name}
      '';
    };
}