summary refs log blame commit diff
path: root/pkgs/build-support/dhall-to-nix.nix
blob: 3805656dfa0e081fc67d17581a938792f14370a5 (plain) (tree)


































                                                                               
                 

            
/* `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