kullanarak basit bir haskell kütüphanesi oluşturun Nix ile bir süredir ilgileniyorum ve sonunda yeni bir haskell projesi başlatmak için kullanmaya çalışacağımı düşündüm. ,nix
name: project
version: 0.1.0.0
build-type: Simple
license: MIT
cabal-version: >= 1.18
library
exposed-modules: Lib
build-depends: base < 5
hs-source-dirs: src
default-language: Haskell2010
ve Lib.hs
Gördüğünüz gibi
module Lib where
hello :: Int -> IO()
hello x = putStrLn (show x)
sahiptir:
ben cabal dosyanın içeriği şu şekildedir dizin yapısında
project.cabal
src/Lib.hs
ile başladı bu oldukça basit. cabal build
'u çalıştırdığımda mutlu görünüyor. Herhangi bir yolla uzman olmadığımı unutmayın, bu yüzden burada yeni bir başlangıç hatası yapabilirim.
Bunu Nix ile kurmak için, bilgilerimi almak için https://github.com/Gabriel439/haskell-nix okuyorum. Cabal dosyamın bir Nix sürümünü almak için cabal2nix . > default.nix
'u çalıştırdım. Daha sonra bunu oluşturmak için bir release.nix
dosyası oluşturdum. aşağıdaki gibi iki dosyaların içeriğini şunlardır:
Bunu yaptıktan sonra ben nix-build release.nix
infaz ve geri
these derivations will be built:
/nix/store/p481alkpm89712n3hnwai0nxhmjrm8b2-project-0.1.0.0.drv
building path(s) ‘/nix/store/yszy2a6wd88pf6zlw0nw99l5wzvc0s9x-project-0.1.0.0’
setupCompilerEnvironmentPhase
Build with /nix/store/d5w12a8bprd2518xnqp1cwh3rbjiagyx-ghc-8.0.1.
unpacking sources
unpacking source archive /nix/store/fsn4b9w54h2jdpv546nwvy82vnkszl1w-project
source root is project
patching sources
compileBuildDriverPhase
setupCompileFlags: -package-db=/tmp/nix-build-project-0.1.0.0.drv-0/package.conf.d -j4 -threaded
[1 of 1] Compiling Main (/nix/store/4mdp8nhyfddh7bllbi7xszz7k9955n79-Setup.hs, /tmp/nix-build-project-0.1.0.0.drv-0/Main.o)
Linking Setup ...
...
...
Building project-0.1.0.0...
Preprocessing library project-0.1.0.0...
dist/build/Lib_o_split: getDirectoryContents: does not exist (No such file or
directory)
builder for ‘/nix/store/p481alkpm89712n3hnwai0nxhmjrm8b2-project-0.1.0.0.drv’ failed with exit code 1
error: build of ‘/nix/store/p481alkpm89712n3hnwai0nxhmjrm8b2-project-0.1.0.0.drv’ failed
var release.nix
let
pkgs = import <nixpkgs> { };
in
pkgs.haskellPackages.callPackage ./default.nix { }
default.nix
{ mkDerivation, base, stdenv }:
mkDerivation {
pname = "project";
version = "0.1.0.0";
src = ./.;
libraryHaskellDepends = [ base ];
license = stdenv.lib.licenses.mit;
}
Elbette ki iyi değil. Hangi hatayı burada yapıyorum? Benzer bir girişimde, kütüphane yerine bir yürütülebilir dosya oluştururken başarılı oldum, bu yüzden bununla ilgili bir şey olduğundan şüpheleniyorum. Takip ettiğim github repo, bir yürütülebilir dosyayı da kullanıyordu.
varsayılan nix tarafından inanıyoruz
Karanlıkta bir çekim bitti ama 'enableSplitObjs = false;' ifadesini default.nix dosyanıza eklemek hiç işe yarıyor mu? Eğer bu hata "hata: iddiayla başarısız oldu" durumunda başarısız olursa, enableDeadCodeElimination = false; 'yerine? – ppb
@ppb 'enableSplitObjs = false;' doğru şekilde oluşturuldu. Neden bu şeyleri düzeltiyor? Tüm haskell nix seçeneklerinin belgelendiği bir yer var mı? Ayrıca, bunu bir cevap yaparsanız kabul edeceğim. – phil