如果我有这样的记录:
data PersonR = PersonR { firstName :: String
, lastName :: String
} deriving Show
想要查看firstName
的类型:
firstName :: PersonR -> String
但这将是OOP中的典型吸气剂。由于在Haskell中变量是不可变的,我如何使用:t
命令查看setter?我假设它会是:
:: PersonR -> String -> PersonR
但我怎么能得到这个呢?
答案 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 }
但您可能会发现使用特殊语法本身也很方便。