Кто-нибудь смог интегрировать liquidhaskell с nixos?

Я пытаюсь использовать liquidhaskell на NixOS. Я могу установить пакет (liquidhaskell-0.8.2.3), но не для интеграции с Cabal, потому что для этого требуется Cabal 1.18-1.25, но у меня есть Cabal 2.0.1.0 .

Я установил пакет liquidhaskell как часть установки ghc-with-packages:

[~:0]$ readlink $( type -p liquid )
/nix/store/pdbzl0p6k1klmajx969b6vvwyw9w0s6b-ghc-8.2.2-with-packages/bin/liquid

Среди множества других, текст пакета также установлен в этом наборе:

[proclib:1]$ ls -ld /nix/store/pdbzl0p6k1klmajx969b6vvwyw9w0s6b-ghc-8.2.2-with-packages/lib/ghc-8.2.2/text-1.2.2.2/
dr-xr-xr-x 3 root root 68 Jan  1  1970 /nix/store/pdbzl0p6k1klmajx969b6vvwyw9w0s6b-ghc-8.2.2-with-packages/lib/ghc-8.2.2/text-1.2.2.2/

Однако жидкость не может видеть это:

[proclib:1]$ liquid ~/bin/h/nix.hs 
LiquidHaskell Version 0.8.2.3
Copyright 2013-18 Regents of the University of California. All Rights Reserved.

liquid: Main: Could not find module ‘Data.Text’
Perhaps you meant Data.Set (from containers-0.5.10.2)
Use -v to see a list of the files searched for.

Вышеупомянутое не является частью пакета каббалы (чтобы попытаться исключить фальшивку из уравнения).

Я попытался поиграть с nix-shell, чтобы это сработало, но либо nix-shell, либо жидкость сломались на языковых прагмах:

[~:0]$ nix-shell -p myHaskellEnv --run liquid ~/bin/h/nix.hs 
/nix/store/q1cwqhb6v8yx8vy4s5p6sxrq8s0bnqmy-nix.hs: line 5: {-#: command not found

Любая помощь с благодарностью получена.

1 ответ

Решение

Похоже, проблема в том, что жидкий haskell игнорирует оболочки ghcWithPackages, потому что он напрямую использует GHC API. Вы можете обойти это следующим образом, основываясь на этой теме.

nix-shell -p 'haskellPackages.ghcWithPackages(pkgs:[pkgs.text (pkgs.liquidhaskell)])' -p z3 --run 'liquid --ghc-option="-package-db=$(ghc-pkg list | head -n 1)" ./hellotext.hs'

Или несколько эквивалентно,

nix-shell -p 'haskellPackages.ghcWithPackages(pkgs:[pkgs.text])' -p z3 -p haskellPackages.liquidhaskell --run 'NIX_GHC_LIBDIR=$(ghc-pkg list | head -n 1)/.. liquid ./hellotext.hs'

который предполагает, что он будет работать из коробки, когда вы находитесь в nix-shell основанный на cabal2nix пакет.

Другие вопросы по тегам