Difference between revisions of "Haskell"

From NixOS Wiki
Jump to: navigation, search
m (Fix broken link)
(Note about IFD)
Line 22: Line 22:
  
 
When using <code>cabal2nix</code>, Nix does not pull a cabal package by respecting the constraint specified in the cabal file (see [https://github.com/chrissound/Cabal2NixLimitationExample example]). Issue is discussed [https://stackoverflow.com/questions/57441156/pulling-in-specific-haskell-packages-cabal-dependencies-with-nix here]. You should be using `callCabal2nix` anyway.
 
When using <code>cabal2nix</code>, Nix does not pull a cabal package by respecting the constraint specified in the cabal file (see [https://github.com/chrissound/Cabal2NixLimitationExample example]). Issue is discussed [https://stackoverflow.com/questions/57441156/pulling-in-specific-haskell-packages-cabal-dependencies-with-nix here]. You should be using `callCabal2nix` anyway.
 +
 +
== IFD and Haskell ==
 +
 +
<code>callCabal2nix</code>, which is implicitly used for building Haskell projects, uses IFD.[https://github.com/NixOS/templates/issues/28][https://discourse.nixos.org/t/another-simple-flake-for-haskell-development/18164/6]. This means that since IFD is disabled by default in certain nix commands,[https://github.com/NixOS/nix/pull/5253] the following commands will be broken for Haskell projects whose flake output specifies multiple system attributes:
 +
 +
* <code>nix flake show</code>
 +
* <code>nix flake check</code>
  
 
[[Category:Languages]]
 
[[Category:Languages]]
 
[[Category:Applications]]
 
[[Category:Applications]]

Revision as of 14:08, 4 May 2022

Introduction

Nix recipes for Haskellers aims to get a beginner comfortable managing simple Haskell programs and projects using Nix.

Scripting

Here's an example using nix-shell to get a redistributable Haskell script that you can run on any Nix system with `./my-script.hs`:

#!/usr/bin/env nix-shell
#!nix-shell --pure -i runghc -p "haskellPackages.ghcWithPackages (pkgs: [ pkgs.turtle ])"

main = do
  # do stuff
  putStrLn "Hello world from a distributable Haskell script!"

FAQ

Limitations

When using cabal2nix, Nix does not pull a cabal package by respecting the constraint specified in the cabal file (see example). Issue is discussed here. You should be using `callCabal2nix` anyway.

IFD and Haskell

callCabal2nix, which is implicitly used for building Haskell projects, uses IFD.[1][2]. This means that since IFD is disabled by default in certain nix commands,[3] the following commands will be broken for Haskell projects whose flake output specifies multiple system attributes:

  • nix flake show
  • nix flake check