2016-10-12 18 views
6

Pracuję nad zadaniem "liczby rzymskie" z egzekucji Haskella i podążam za ich numerem instructions to installing stack. Pracuję nad pudełkiem Fedory 24.Jak dodać pakiet "containers" do mojego pliku .cabal (bez nadpisywania przez stos podczas kompilacji)?

Dopóki pracowałem z modułami Haskell z poziomu podstawowego, nie miałem problemu. Teraz próbuję zaimportować moduł Data.Map. Współpracuje przy użyciu wiersza polecenia ghci:

$ 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> 

Jednak, gdy próbuję zaimportować ją od wewnątrz mojego pliku src za pomocą polecenia:

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

używam do problemów przy próbie uruchomienia 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 
(...) 

google problem i znalazł rozwiązanie proste w the Cabal FAQ at haskell.org:

To, co musisz zrobić, to dodać kontenery do pliku build-depends w pliku .cabal.

Zakładam, że mają na myśli plik roman-numerals.cabal, który znajduje się w moim katalogu roboczym. Zawartość to:

-- 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 

Próbowałem dodać "kontenery" do budowania zależy zarówno i zarówno "biblioteki" i "test-suite" sekcje, ale gdy uruchamiam

$ stack test 

błąd nadal występuje, a plik .cabal zostaje przywrócony do tej samej zawartości, co powyżej.

Jakieś wskazówki? Bardzo doceniane!

Odpowiedz

9

to sugerując problemu:

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

hpack stanowi alternatywę YAML na formaty specyfikacji pakietów Haskell, które mogą być wykorzystane zamiast tradycyjnych postaci cabal. Następnie można użyć programu hpack, aby przekonwertować specyfikację z formatu hack na format cabal, aby móc zintegrować się z resztą łańcucha narzędzi Haskell.

Niektóre basic support for hpack został dodany do stosu jakiś czas temu. Sprawdza plik o nazwie package.yaml w bieżącym katalogu, który jest standardową nazwą dla specyfikacji pakietu hpack format, a jeśli istnieje, uruchamia hpack, aby przekonwertować go do pliku cabal, a następnie kontynuuje budowanie jak zwykle. To właśnie depcze twój plik .cabal.

Aby rozwiązać ten problem, albo:

  • Zmienić package.yaml zamiast roman-numerals.cabal aby osiągnąć ten sam efekt.
  • Usuń package.yaml i kontynuuj pracę bezpośrednio z roman-numerals.cabal.

Składnia dodanie zależności w formacie hpack jest:

dependencies: 
    - base 
    - containers 
+0

Dziękujemy! To zadziałało. – ktiu

Powiązane problemy