为什么这种类型的声明不起作用?

fri*_*edo 1 haskell

我正在尝试创建一个"人"类型,每个人都有性别和名字.

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)
Run Code Online (Sandbox Code Playgroud)

当我尝试在ghci中加载它时,我只是得到了无用的错误 parse error on input 'Sex'

我在这做错了什么?

avp*_*vpx 10

问题在于您在记录语法中使用大写.代码应如下所示:

data Person = Person { sex :: Sex, name :: Name }...
Run Code Online (Sandbox Code Playgroud)

试试这个,代码似乎至少可以编译.由于"性别"和"名称"不是类型(而"性别"和"名称"都是),您不能使第一个字母大写.

  • 今年夏天我学会了Haskell,这是一次非常有益的经历.挂在那儿! (3认同)