在模块之间共享镜头字段定义的惯用方法

时间:2014-10-01 17:15:47

标签: haskell lens

如果我有两个模块都使用Control.Lens.TH'makeFields来生成记录中的字段,并且每个不同模块中的记录具有相同的字段名称,那么确保最佳方法是什么?两个模块使用相同的name镜头定义和HasName类,而没有其中一个模块依赖于另一个模块?

目前,我正在使用另一个名为SharedFields的模块,其中包含需要共享的每个字段的单个记录,然后在需要生成TH字段的任何其他内容中导入SharedFields模块 - 但是这很尴尬,容易出错。

module First where

import Control.Lens

data First = First { firstName :: Bool }
  deriving (Read, Show, Eq)
makeFields ''First

module Second where

import Control.Lens

data Second = Second { secondName :: () }
  deriving (Read, Show, Eq)
makeFields ''Second

module Third (name) where

import First
import Second

0 个答案:

没有答案