4

レコード「ゲッター」をエクスポートする方法はありますが、「セッター」はエクスポートしませんか?

例。私たちが持っていると仮定します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 で getter を実行できるようにfield1したいのですが、M1 の外部でレコードを更新したくありません。可能であれば、Haskell のドキュメントの関連部分を教えていただけませんか? そうでない場合は、その理由を説明できますか?

4

1 に答える 1

2

かなり簡単なオプションの 1 つは、シノニムを定義してエクスポートすることです。

module M1(customCtor, getField1) where

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

getField1 = field1

ここにgetField1あるのは「getter」関数 (タイプ: DType -> Int) ですがfield1、更新用のレコード フィールドであるという追加のステータスはありません。

于 2013-09-08T08:59:57.853 に答える