Sho*_*hoe 7 haskell invariants lenses haskell-lens
有没有办法让我只从具有镜头的模块中导出特定的吸气剂xor setter?
例如,让我们假设一个数据结构具有一直存在的不变性,>= 0仅通过递增它并仅使用初始值创建来修改0:
module Something
( Counter
-- export only `count` getter
, make
, increment
) where
data Counter = Counter { _count :: Int } deriving (Eq)
makeLenses ''Positive
make :: Counter
make = Counter 0
increment :: Counter -> Counter
increment c = c ^. count %~ (+1)
Run Code Online (Sandbox Code Playgroud)
我怎么能只导出count吸气剂?
lef*_*out 10
事实上,镜头并不是"吸气剂和固定器",它恰好与这样的一对同构.因此,您不能只导出其中一个,而是必须定义新内容并将其导出.幸运的是,这非常简单:
data Counter = Counter { _count' :: Int } deriving (Eq)
makeLenses ''Counter
count :: Getter Counter Int
count = count'
Run Code Online (Sandbox Code Playgroud)