我有点尴尬地问这样一个平凡的问题在这里,但我想跟随最近的'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