Импорт lib в haskell после установки с помощью cabal
Извините за простоту этого вопроса, но я не нашел другого вопроса, который касался моей проблемы. Я установил haskell и leksah, затем выполнил "cabal install nat", чтобы установить lib с натуральными числами. Библиотека выглядит так, как будто она была установлена в "/Users/jstanford/Library/Haskell/ghc-7.0.4/lib/nat-0.2/lib"
Я создал рабочую область и пакет в лексах, и обновил свои префы, чтобы посмотреть в:
/Library/Frameworks/GHC.framework / Users / jstanford / Библиотека /Haskell /Users/jstanford/.leksah-0.10/packageSources
для исходников пакетов и оставил значение по умолчанию ~/.leksah-0.10/packageSources для распаковки пакетов cabal.
Я взял первые фрагменты кода из "Жемчужины разработки функциональных алгоритмов", поэтому мой код выглядит так:
-----------------------------------------------------------------------------
--
-- Module : Main
-- Copyright :
-- License : AllRightsReserved
--
-- Maintainer :
-- Stability :
-- Portability :
--
-- |
--
-----------------------------------------------------------------------------
module Main (
main
) where
import Data.List ((\\))
import GHC.Arr (accumArray, elems, Array(..))
minfree :: [Nat] -> Nat
minfree xs = head([0 ..])\\ xs
search :: Array Int Bool -> Int
search = length takeWhile id . elems
checklist :: [Int] -> Array Int Bool
checklist xs = accumArray(V) False (0,n)
(zip (filter (<= n) xs) (repeat True))
where n = length xs
main = (
minfree[0, 2, 5]
)
Leksah смог найти импорт для \ и Array, но не может найти Nat. Любые указатели о том, как найти импорт? Компилятор также жалуется на аккумулятор Array(V). Я подозреваю, что буквой V на самом деле не должна быть заглавная буква V, а скорее какой-то символ, который выглядит как V. Руководство по этому вопросу также будет высоко оценено!
1 ответ
Nat
тип определяется в Data.Number.Nat
, поэтому вы должны импортировать его вверху вашего файла:
import Data.Number.Nat
Для (V)
, вероятно, это должно быть (||)
, "V", скорее всего, ∨, символ логической дизъюнкции: более известный как логическое значение или оператор. Подобные операторные замены распространены в наборе кода Haskell, но могут быть довольно запутанными, пока вы не привыкнете их видеть.
Кроме того, вы не должны импортировать функции массива из GHC.Arr
; это внутренний модуль GHC; Я рекомендую импортировать Data.Array
вместо.