2016-10-12 11 views
6

Tôi đang làm việc trên tác vụ "chữ số La Mã" từ bài tập thể dục Haskell và theo dõi instructions to installing stack. Tôi đang làm việc trên một hộp Fedora 24.Làm cách nào để thêm gói "vùng chứa" vào tệp .cabal của tôi (mà không bị ghi đè bởi ngăn xếp tại thời gian biên dịch)?

Miễn là tôi đang làm việc với các mô-đun Haskell từ cơ sở, tôi không gặp vấn đề gì. Bây giờ tôi đang cố gắng nhập mô-đun Data.Map. Nó hoạt động tốt bằng cách sử dụng dòng lệnh 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> 

Tuy nhiên, khi tôi cố gắng nhập nó từ bên trong tập tin src của tôi bằng lệnh:

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

Tôi chạy vào vấn đề khi tôi cố gắng chạy các bài kiểm tra:

$ 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 
(...) 

tôi googled vấn đề và tìm ra giải pháp đơn giản tại the Cabal FAQ at haskell.org:

Những gì bạn cần làm là thêm vùng chứa vào công cụ xây dựng phụ thuộc vào tệp .cabal của bạn.

Tôi giả sử chúng có nghĩa là tệp roman-numerals.cabal nằm trong thư mục làm việc của tôi. Nội dung bao gồm:

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

Tôi cố gắng thêm "container" để xây dựng-phụ thuộc vào một trong hai và cả "thư viện" và "kiểm tra-suite" phần, nhưng khi tôi chạy

$ stack test 

lỗi vẫn tồn tại và tệp .cabal được hoàn nguyên về cùng nội dung được hiển thị ở trên.

Mọi con trỏ? Nhiều đánh giá cao!

Trả lời

9

này được gợi ý vào vấn đề:

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

hpack là một sự thay thế, định dạng đặc điểm kỹ thuật YAML dựa trên đối với các gói Haskell có thể được sử dụng thay cho định dạng cabal truyền thống. Chương trình hpack sau đó có thể được sử dụng để chuyển đổi một đặc điểm kỹ thuật từ định dạng hpack sang định dạng cabal để có thể tích hợp với phần còn lại của chuỗi công cụ Haskell.

Một số basic support for hpack đã được thêm vào ngăn xếp một số thời gian trước đây. Nó kiểm tra một tệp có tên là package.yaml trong thư mục hiện tại, là tên chuẩn cho các đặc tả gói định dạng hpack và nếu nó tồn tại, nó chạy hpack để chuyển đổi nó thành tệp cabal và sau đó tiến hành xây dựng như bình thường. Đây là những gì chà đạp trên tập tin .cabal của bạn.

Để giải quyết việc này, một trong hai:

  • Sửa package.yaml thay vì roman-numerals.cabal để đạt được tác dụng tương tự.
  • Xóa package.yaml và tiếp tục làm việc trực tiếp với roman-numerals.cabal.

Cú pháp để thêm phụ thuộc vào định dạng hpack là:

dependencies: 
    - base 
    - containers 
+0

Cảm ơn bạn! Điều này làm việc. – ktiu

Các vấn đề liên quan