Haskell记录setter导出

时间:2013-09-08 08:27:14

标签: haskell

有没有办法导出记录“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文档的相关部分? 如果不是,你能解释一下原因吗?

1 个答案:

答案 0 :(得分:2)

一个相当简单的选择是定义同义词并导出:

module M1(customCtor, getField1) where

data DType = DCtor { field1 :: Int }
customCtor = DCtor { field1 = 1 }

getField1 = field1

此处,getField1是一个“getter”函数(类型:DType -> Int),它获取field1但没有附加状态作为更新的记录字段。