2015-02-11 93 views
3
data Peg = Red | Green | Blue | Yellow | Orange | Purple 
    deriving (Show, Eq, Ord) 

type Code = [Peg] 

data Move = Move Code Int Int 
     deriving (Show, Eq) 

isConsistent :: Move -> Code -> Bool 
isConsistent (move1 code1 num1 num2) code2 = True --parse error here 

Haskell相對較新。想知道爲什麼我在嘗試加載後收到以下錯誤消息。Haskell:模式3中的解析錯誤

Parse error in pattern: move1 

回答

8

move1不是數據的構造函數(這是你被允許以什麼模式匹配的),實際上它不能,因爲他們不得不開始用大寫字母。從數據聲明中將其替換爲構造函數Move,錯誤應該消失。

您可能仍會收到一些警告,如「code1已定義但未使用」,如果您真的不關心內容,則可以通過將模式更改爲(Move _ _ _)來擺脫它們。

+4

請注意,如果您需要一個值來引用正在匹配模式的整個片段,則在其前面加上「name @」,例如:move1 @(Move code int1 int2)'。現在move1指的是整個Move。 – Carcigenicate 2015-02-11 00:37:46