簡體   English   中英

為什么我的測試文件不會導入我的數據結構? 哈斯克爾

[英]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導出類型SuitValue ,但不導出其數據構造函數(即類型是抽象的)。

你要

module HelpFunctions(Suit(..), Value(..), ...

您可以顯式列出所有構造函數,但是..簡寫表示法表示“此類型的所有數據構造函數”。


參考: Haskell 2010語言報告, 5.2導出列表

  1. 通過聲明的代數數據類型牛逼 datanewtype聲明可以通過以下三種方式中的一種被命名為:

    • 形式T命名類型, 但不命名構造函數或字段名 導出沒有類型構造函數的類型的能力允許構造抽象數據類型(請參見5.8節)。
    • 形式T(c 1 ,…,c n命名類型及其部分或全部構造函數和字段名稱。
    • 縮寫形式T (..)命名類型及其當前在范圍內(無論是否限定)的所有構造函數和字段名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM