импорт lib в haskell после установки с помощью cabal - PullRequest
1 голос
/ 09 февраля 2012

Извините за простоту этого вопроса, но я не нашел другого вопроса, который касался моей проблемы. Я установил 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 / Library / 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]
    )

Лекса смог найти импорт для \ и Array, но не может найти Nat. Любые указатели о том, как найти импорт? Компилятор также жалуется на аккумулятор Array (V). Я подозреваю, что V на самом деле не должна быть заглавной буквой V, скорее, это какой-то символ, который выглядит как V. Руководство по этому вопросу также будет высоко оценено!

1 Ответ

3 голосов
/ 09 февраля 2012

Тип Nat определен в Data.Number.Nat, поэтому вы должны импортировать его вверху файла:

import Data.Number.Nat

Что касается (V), то, вероятно, оно должно быть (||). «V», скорее всего, ∨, символ логической дизъюнкции: более широко известный как логический оператор или . Подобные подстановки операторов распространены в наборе кода Haskell, но могут быть довольно запутанными, пока вы не привыкнете их видеть.

Кроме того, вы не должны импортировать функции массива из GHC.Arr; это внутренний модуль GHC; Я рекомендую вместо этого импортировать Data.Array.

...