有没有办法导出记录“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.h中运行field1
getter但不能更新M1之外的记录。
如果有可能,您能否指出我对Haskell文档的相关部分?
如果不是,你能解释一下原因吗?
答案 0 :(得分:2)
一个相当简单的选择是定义同义词并导出:
module M1(customCtor, getField1) where
data DType = DCtor { field1 :: Int }
customCtor = DCtor { field1 = 1 }
getField1 = field1
此处,getField1
是一个“getter”函数(类型:DType -> Int
),它获取field1
但没有附加状态作为更新的记录字段。