Как добавить пакет" контейнеры " в мой.файл cabal (без перезаписи стеком во время компиляции)?

Я работаю над задачей "римские цифры" из трека exercism Haskell и следовал их инструкция по установке стека. Я работаю над коробкой Fedora 24.

пока я работал с модулями Haskell с базы, у меня не было проблем. Теперь я пытаюсь импортировать данные.Модуль карты. Он отлично работает с помощью командной строки ГГц:

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

однако, когда я пытаюсь импортировать его из файла src с команда:

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

я сталкиваюсь с проблемами, когда пытаюсь запустить тест:

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

я погуглил проблему и нашел простое решение в The Cabal FAQ на haskell.org:

что вам нужно сделать, это добавить контейнеры в сборку-зависит от вашего .файл Кабал-клана.

Я предполагаю, что они имеют в виду римские цифры файла.Кабал-это в моем рабочем каталоге. Содержание являются:

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

Я попытался добавить " контейнеры "в build-depends в обоих разделах" library "и" test-suite", но когда я запускаю

$ stack test

ошибка сохраняется, и .файл cabal возвращается к тому же содержимому, показанному выше.

какие-нибудь советы? Высоко ценится!

1 ответов


это намекает на проблему:

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

hpack альтернативный, основанный на ЯМЛ формат спецификации для пакетов Хаскелл которые можно использовать вместо традиционного формата Кабал. The hpack программа может быть использована для преобразования спецификации из формата hpack в формат cabal, чтобы иметь возможность интегрироваться с остальной частью Haskell toolchain.

некоторые базовая поддержка hpack был добавлен в стек некоторое время назад. Он проверяет наличие файла package.yaml в текущем каталоге, который является стандартным именем для спецификаций пакета формата hpack, и если он существует, он работает hpack преобразовать его в файл cabal, а затем продолжить строительство как обычно. Это то, что топчет твое .файл Кабал-клана.

чтобы решить эту проблему, либо:

  • изменить package.yaml вместо roman-numerals.cabal для достижения того же эффекта.
  • удалить package.yaml и продолжайте работать непосредственно с roman-numerals.cabal.

синтаксис для добавления зависимостей в формате hpack:

dependencies:
  - base
  - containers