获得“setter”类型的记录

时间:2014-12-06 22:07:44

标签: haskell

如果我有这样的记录:

data PersonR = PersonR { firstName :: String
                       , lastName :: String
                       } deriving Show

想要查看firstName的类型:

firstName :: PersonR -> String

但这将是OOP中的典型吸气剂。由于在Haskell中变量是不可变的,我如何使用:t命令查看setter?我假设它会是:

:: PersonR -> String -> PersonR

但我怎么能得到这个呢?

1 个答案:

答案 0 :(得分:2)

Haskell没有为您定义一个setter函数。最佳近似是一种特殊的语法,它允许您在更改某些字段时方便地从旧记录创建新记录。

示例:

john = PersonR "John" "Doe"  -- same as PersonR { firstName = "John", lastName = "Doe" }

jane = john { firstName = "Jane" }

jane现在等于Person "Jane" "Doe"

使用此语法,您可以创建自己的setter函数:

setLastName :: PersonR -> String -> PersonR
setLastName person surname = person { lastName = surName }

但您可能会发现使用特殊语法本身也很方便。