如果我有这样的记录:
data PersonR = PersonR { firstName :: String
, lastName :: String
} deriving Show
想要检查 firstName
的类型:
firstName :: PersonR -> String
但这将是 OOP 中的典型 getter。由于在 Haskell 中变量是不可变的,我如何使用 :t
命令查看 setter?我假设它会是:
:: PersonR -> String -> PersonR
但是我怎样才能得到这个呢?
最佳答案
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 }
但您可能会发现使用特殊语法本身也同样方便。
关于haskell - 获取 "setter"类型的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337130/