Часть Queue.hs:Как проверить свои собственные типы данных с помощью HUnit в Haskell?
module Queue (Queue, emptyQueue, isEmptyQueue, enQueue, deQueue) where
data Queue a = EmptyQueue | Single a | Q a (Queue a) a deriving (Show, Eq)
emptyQueue :: Queue a
emptyQueue = EmptyQueue
enQueue :: a -> Queue a -> Queue a
enQueue x EmptyQueue = Single x
enQueue x (Single q) = Q q (EmptyQueue) x
enQueue x (Q qf q qb) = Q qf (enQueue qb q) x
Я использовал печать, увидеть, если их правильно один на один. Теперь я хочу протестировать их с помощью HUint.
Main.hs:
module Main where
import Queue
import Test.HUnit
test1 = TestCase $ assertEqual "" (Single 'a'::Queue Char) $ enQueue 'a' emptyQueue
tests = TestList [TestLabel "test1" test1]
main = do runTestTT tests
Вот что я получил:
*Queue> :r
[2 of 2] Compiling Main (Main.hs, interpreted)
Main.hs:5:36: Not in scope: data constructor ‘Single’
Failed, modules loaded: Queue.
Так как я могу это исправить?
Как вы экспортируете тип 'Queue' из' Queue.hs'? Если у вас есть 'module Queue (Queue), где ...' он не будет экспортировать конструкторы, вам понадобится 'module Queue (Queue (..)), где' для экспорта всех конструкторов типа' Queue'. – bheklilr
@bheklilr У меня есть вопросы. – liubiantao
Ошибка все еще не исправлена. Добавьте '' (..) '' ко второй очереди в Queue.hs – ThreeFx