我定义了一个名为Name的数据类型,它由类型同义词FirstName和LastName组成。
我如何打印出名字?我知道如何用记录语法打印,但不知道如何用默认语法打印。
type FirstName = String
type LastName = String
data Name = Name FirstName LastName
main = do
tim <- Name "tim" "lim"
putStrLn (FirstName tim)
出现以下错误:
test.hs:11:17: error:
Data constructor not in scope: FirstName :: t0 -> String
|
11 | putStrLn (FirstName tim)
| ^^^^^^^^^
2条答案
按热度按时间nlejzf6q1#
例如,使用模式匹配来解包:
但是对于您的
Name
,使用记录可能会更好:然后Haskell会自动生成两个函数
firstName :: Name -> FirstName
和lastName :: Name -> LastName
,这样你就可以把这个函数用于:使用记录语法的主要优点是,你可以很容易地从数据构造函数中获得一个字段,而不必解压缩数据构造函数,也不必处理所有的字段。如果字段的数量增加,可能需要一些额外的工作来重构你最初使用非记录语法的所有地方。
注意:此处不能使用类似
tim <- Name "tim" "lim"
的语法,因为Name
不是返回一元值的函数)。yrdbyhpb2#
如果您没有定义记录访问者,那么访问它的字段的唯一方法是模式匹配: