有没有办法导出记录“getter”而不是“setter”?
例子。
假设我们有 M1.hs
module M1(customCtor, field1) where
data DType = DCtor { field1 :: Int }
customCtor = DCtor { field1 = 1 }
和
M2.hs
import M1
modified = customCtor{ field1 = 3 } -- how to prevent this?
main = putStrLn . show . field1 $ modified
我希望能够在 M2.hs 中运行
field1
getter,但不能在 M1 之外更新记录。如果可能,您能否指出 Haskell 文档的相关部分?
如果不是,你能解释一下原因吗?
最佳答案
一个相当简单的选择是定义一个同义词并导出:
module M1(customCtor, getField1) where
data DType = DCtor { field1 :: Int }
customCtor = DCtor { field1 = 1 }
getField1 = field1
在这里,
getField1
是一个“getter”函数(类型:DType -> Int
),它获取 field1
但没有作为更新记录字段的附加状态。关于Haskell 记录 setter 导出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18681865/