访问数据类型的属性

时间:2015-06-05 21:14:24

标签: haskell

这是我的代码:

NULL

这是我对我在此处所写内容的解释:有一种数据类型data Person = Person {name :: String} greet :: Person -> String -> String greet person lastName = "Hi my name is " ++ name ++ ", last name: " ++ lastName ,其中存在一个返回字符串的方法Person

还存在一个函数name,它接收greetPerson并返回不同的String。但是,greet方法调用String数据类型的name方法来连接此字符串。

然而,当我编译此代码时,我收到此错误:

Person

为什么会这样?

2 个答案:

答案 0 :(得分:8)

请注意,name是您从Record语法中免费获得的函数。你可以在ghci中看到它的类型:

λ> :t name
name :: Person -> String

您收到错误是因为您尝试将++函数应用于名为name的函数而不是String。所以你的代码应该是这样的:

greet :: Person -> String -> String
greet person lastName = "Hi my name is " ++ name person ++ ", last name: " ++ lastName

答案 1 :(得分:4)

@ Sibi的回答是正确的,但是RecordWildCards你可以接近你的原文:

{-# LANGUAGE RecordWildCards #-}

data Person = Person {name :: String}

greet :: Person -> String -> String
greet Person{..} lastName = 
    "Hi my name is " ++ name ++ ", last name: " ++ lastName