2009-12-31 71 views
1

我試圖創建一個'人'類型,其中每個人都有一個性別和一個名字。爲什麼這種類型的聲明不起作用?

data Sex = Sex Char deriving Show 

male = Sex 'M' 
female = Sex 'F' 

data Name = Name [Char]  deriving Show 

data Person = Person { 
    Sex :: Sex, 
    Name :: Name 
} deriving (Show) 

當我嘗試在ghci中加載此我只是得到了無益的錯誤parse error on input 'Sex'

我在做什麼錯在這裏?

+1

只是一個隨機PS,如果你定義這個就像是一個布爾數據值,那麼它的可能性就會小得多,而且錯誤也會減少。例如,如果有人用(性別'Z')調用函數怎麼辦?我會建議如下:data Sex =女| |男性派生(...) – codebliss 2009-12-31 07:46:03

+0

@codebliss,謝謝,我忘記了類型的'|'技巧。 (我是*真的* n00bish n00b。) – friedo 2009-12-31 07:52:30

+1

它不是你問的問題,但你會更好地將Sex定義爲「data Sex = Male | Female」。 – 2010-01-03 20:10:34

回答

10

問題在於您在記錄語法中使用大寫字母。該代碼應該看起來像:

data Person = Person { sex :: Sex, name :: Name }... 

試過,代碼似乎至少編譯。由於「性別」和「名稱」不是類型(而「性別」和「名稱」是),所以不能將第一個字母大寫。

+0

就是這樣,謝謝!我仍然在學習類型構造函數,值構造函數等之間的區別。所有這些對我來說都非常混亂和新鮮。 :) – friedo 2009-12-31 06:07:46

+3

今年夏天我學到了Haskell,這是一次非常有意義的經歷。掛在那裏! – avpx 2009-12-31 06:10:27

相關問題