2016-10-12 59 views
6

Haskell pistinden gelen "romen rakamları" görevi üzerinde çalışıyorum ve instructions to installing stack numaralarını takip ediyorum. Bir Fedora 24 kutusu üzerinde çalışıyorum."Kapsayıcılar" paketini .cabal dosyasına nasıl eklerim (derleme zamanında yığının üzerine yazılmadan)?

sürece ben tabanından Haskell modülleri ile çalışmak gibi, bir sorunum yoktu. Şimdi Data.Map modülünü almaya çalışıyorum. Ben çalıştırmayı denediğinizde

import qualified Data.Map as M (foldlWithKey, fromList) 

Ben sorunlarla çalıştırıyorum: Ben komutuyla benim src dosyası içinde onu almaya çalıştığınızda, ancak

$ ghci 
GHCi, version 7.8.4: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Prelude> import Data.Map 
Prelude Data.Map> 

: Bu GHCi komut satırını kullanarak çalışıyor Test:

$ stack test 
roman-numerals-0.0.0: build (lib + test) 
Preprocessing library roman-numerals-0.0.0... 
[2 of 2] Compiling Roman   (...) 
(...) /roman-numerals/src/Roman.hs:3:1: error: 
    Failed to load interface for ‘Data.Map’ 
    It is a member of the hidden package ‘containers-0.5.7.1’. 
    Perhaps you need to add ‘containers’ to the build-depends in your .cabal file. 
    Use -v to see a list of the files searched for. 
Progress: 1/2 
(...) 

Sorun googled ve the Cabal FAQ at haskell.org de basit bir çözüm buldu:

Yapmanız gereken şey, .cabal dosyanızda yapıya bağlı olarak kapsayıcı eklemek.

Çalışma dizinimdeki roma-numerals.cabal dosyasını kastettiklerini farz ediyorum. içerikleri şunlardır:

-- This file has been generated from package.yaml by hpack version 0.14.0. 
-- 
-- see: https://github.com/sol/hpack 

name:   roman-numerals 
version:  0.0.0 
build-type:  Simple 
cabal-version: >= 1.10 

library 
    hs-source-dirs: 
     src 
    build-depends: 
     base 
    exposed-modules: 
     Roman 
    other-modules: 
     Paths_roman_numerals 
    default-language: Haskell2010 

test-suite test 
    type: exitcode-stdio-1.0 
    main-is: Tests.hs 
    hs-source-dirs: 
     test 
    build-depends: 
     base 
    , roman-numerals 
    , hspec 
    default-language: Haskell2010 

ben "konteyner" eklemeye çalıştık ya ve "Kütüphane" ve "test süit" bölümleri hem yap-bağlıdır, ama ben

$ stack test 

çalıştırdığınızda Hata devam ederse ve .cabal dosyası yukarıda gösterilen aynı içeriğe geri döndürülür.

İşaretçiler var mı? Çok takdir!

cevap

9

Bu sorun ima edilmektedir:

-- This file has been generated from package.yaml by hpack version 0.14.0. 
-- 
-- see: https://github.com/sol/hpack 

hpack yerine geleneksel bir klik biçimi kullanılabilir Haskell paketleri alternatif, YAML esaslı özellikleri biçimidir. hpack programı daha sonra Haskell takım zincirinin geri kalanıyla entegre edebilmek için bir spesifikasyonu hpack formatından cabal formatına dönüştürmek için kullanılabilir.

Bazı basic support for hpack bir süre önce yığını eklendi. Bu hpack biçimi paket özellikleri için standart adıdır geçerli dizinde package.yaml adlı bir dosya için denetler ve varsa, bir Cabal dosyasına dönüştürmek için hpack çalışır ve daha sonra normal şekilde binayı ilerler. Bu, .cabal dosyanızın üzerinden geçen şeydir.

  • Değiştir package.yaml yerine roman-numerals.cabal aynı etkiyi elde etmek için:

    ya bu çözmek için.
  • package.yaml silin ve roman-numerals.cabal doğrudan çalışmaya devam edin.hpack formatında bağımlılıkları eklemek için

sözdizimi:

dependencies: 
    - base 
    - containers 
+0

teşekkür ederiz! Bu çalıştı. – ktiu