Импорт 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 вместо.

Другие вопросы по тегам