Add a pkgs.dhallToNix utility

This adds a `dhallToNix` utility which compiles expression from the Dhall
configuration language to Nix using Nix's support for "import from derivation".
The main motivation of this compiler is to allow users to carve out small typed
subsets of Nix projects.  Everything in the Dhall language (except `Double`s)
can be translated to Nix in this way, including functions.
This commit is contained in:
Gabriel Gonzalez 2017-01-26 20:11:49 -08:00
parent 2f367e0af7
commit c791c0fd16
2 changed files with 42 additions and 0 deletions

View file

@ -0,0 +1,38 @@
/* `dhallToNix` is a utility function to convert expressions in the Dhall
configuration language to their corresponding Nix expressions.
Example:
dhallToNix "{ foo = 1, bar = True }"
=> { foo = 1; bar = true; }
dhallToNix "λ(x : Bool) x == False"
=> x : x == false
dhallToNix "λ(x : Bool) x == False" false
=> true
See https://hackage.haskell.org/package/dhall-nix/docs/Dhall-Nix.html for
a longer tutorial
Note that this uses "import from derivation", meaning that Nix will perform
a build during the evaluation phase if you use this `dhallToNix` utility
*/
{ stdenv, dhall-nix }:
let
dhallToNix = code :
let
file = builtins.toFile "dhall-expression" code;
drv = stdenv.mkDerivation {
name = "dhall-compiled.nix";
buildCommand = ''
dhall-to-nix <<< "${file}" > $out
'';
buildInputs = [ dhall-nix ];
};
in
import "${drv}";
in
dhallToNix

View file

@ -91,6 +91,10 @@ with pkgs;
cmark = callPackage ../development/libraries/cmark { };
dhallToNix = callPackage ../build-support/dhall-to-nix.nix {
inherit (haskellPackages) dhall-nix;
};
dockerTools = callPackage ../build-support/docker { };
dotnetenv = callPackage ../build-support/dotnetenv {