我有點尷尬地問這樣一個平凡的問題在這裏,但我想跟隨最近的'Beginning Haskell'一書(Apress)作爲介紹Haskell,但代碼不起作用。我在網上找到了源代碼,這與我自己的代碼完全相同,也不起作用。開始Haskell:調用一個簡單的函數,匹配一個數據結構
data Client = GovOrg String
| Company String Integer Person String
| Individual Person Bool
deriving Show
data Person = Person String String Gender
deriving Show
data Gender = Male | Female | Unknown
deriving Show
clientName :: Client -> String
clientName (GovOrg name) = name
clientName (Company name _ _ _) = name
clientName (Individual (Person fName lName _) _) = fName ++ " " ++ lName
當我嘗試調用函數與
CLIENTNAME(GovOrg 「NASA」)
它返回 「NASA」。 但是當我嘗試把它稱爲:
CLIENTNAME(公司 「維珍」)
或者:
CLIENTNAME(個人 「亞當」, 「史密斯」) - (或此函數調用的任何其他排列)
結果是類型不匹配,並且:
可能原因:'公司」施加過多的參數
正如你或許可以告訴,我有困難的時候與這個階段的語法,但我敢肯定,我會如果我能夠在第一時間開始工作,可以有更好的時間。如何從解釋器調用函數有什麼問題嗎?
謝謝!作者從來沒有澄清如何調用這些函數,我想我假定由於定義的函數對整個數據不感興趣,函數調用不應該包含它。再次感謝!。 – MHJ
@ user3710884,無論函數是否實際檢查所有(或任何)參數,都需要應用參數。如果你沒有全部應用,你得到的東西實際上是一個函數,等着你去應用其餘的東西。由於'clientName'函數需要一個'Client'並獲取一個函數,所以你會得到一個類型錯誤。 – dfeuer