[英]Why won't my test file import my datastructure? Haskell
我目前正在為(非常簡單的)二十一點游戲編寫單元測試,並且我的測試文件(Tests.hs)似乎沒有導入我在為(HelpFunctions.hs)進行單元測試的文件中聲明的數據結構。 我可以訪問此文件中的功能/方法,但不能訪問數據結構。 有人可以幫我發現問題嗎?
這是我的測試文件的頂部:
module Tests(performTests) where
import Test.HUnit
import HelpFunctions
cardList = [(Hearts, Ace)]
(...)
這是我要為其編寫測試的文件的頂部
module HelpFunctions(Suit, Value, blackjack, cardDeck, shuffleOne,
shuffleCards, getValue, addHand, dealCard, bust,
getHighest
) where
import System.Random
import Control.Monad(when)
{- Suit is one of the four suits or color of a playing card
ie Hearts, Clubs, Diamonds or Spades
INVARIANT: Must be one of the specified.
-}
data Suit = Hearts | Clubs | Diamonds | Spades deriving (Show)
{- Value is the numeric value of a playing card according to the rules of blackjack.
INVARIANT: Must be one of the specified.
-}
data Value = Two | Three | Four | Five | Six | Seven | Eight |
Nine | Ten | Jack | Queen | King | Ace
deriving (Eq, Show)
(...)
當編譯測試文件時,我得到了錯誤
Tests.hs:6:14: error: Data constructor not in scope: Hearts
|
6 | cardList = [(Hearts, Ace)] | ^^^^^^
Tests.hs:6:22: error: Data constructor not in scope: Ace
|
6 | cardList = [(Hearts, Ace)] | ^^^
我還有另一個文件,可以從其中導入HelpFunctions和數據結構,並且可以正常工作。
您的問題在這里:
module HelpFunctions(Suit, Value, ...
這行HelpFunctions
導出類型Suit
和Value
,但不導出其數據構造函數(即類型是抽象的)。
你要
module HelpFunctions(Suit(..), Value(..), ...
您可以顯式列出所有構造函數,但是..
簡寫表示法表示“此類型的所有數據構造函數”。
參考: Haskell 2010語言報告, 5.2導出列表 :
通過聲明的代數數據類型牛逼
data
或newtype
聲明可以通過以下三種方式中的一種被命名為:
- 形式T命名類型, 但不命名構造函數或字段名 。 導出沒有類型構造函數的類型的能力允許構造抽象數據類型(請參見5.8節)。
- 形式T(c 1 ,…,c n )命名類型及其部分或全部構造函數和字段名稱。
- 縮寫形式T
(..)
命名類型及其當前在范圍內(無論是否限定)的所有構造函數和字段名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.