Кто-нибудь смог интегрировать 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
пакет.