haskell - 获取 "setter"类型的记录

标签 haskell

如果我有这样的记录:

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/

相关文章:

haskell - Typeclassopedia中Applicative的构成规律

regex - 如何在 Haskell 的 Text.Regex 库中转义字符?

list - Haskell:如何返回列表的可能拆分列表

http - 在 Haskell 中学习 Conduits 时与 MonadBaseControl 错误混淆

Haskell 无需显式递归即可生成随机数

haskell - 放松一元计算中的排序约束

string - Haskell字符串到使用单词的字符串列表

haskell - 如何在 Haskell 的函数内声明变量的类型?

haskell - 为什么不能推断类型类约束并变得模棱两可?

algorithm - 我可以在红黑树中插入未排序的数据吗?