Control.Lens

时间:2016-04-24 22:01:08

标签: haskell lens

我很难阅读Control.Lens.Wrapped模块中的类型,而且我没有找到关于它的其他内容或它显然基于的newtype库。特别是我想知道在保留newtype封装器时我可以做些什么。例如,假设我有两个列在Data.Monoid.Sum包装器中的列表。有没有什么方法可以轻松++列表并在Sum包装器中找回新值?我想要一个单态地看起来像这样的函数:

canIdoThis :: ([a] -> [a] -> [a]) -> Sum [a] -> Sum [a] -> Sum [a]

这样我就可以做一些像

这样的事情
canIdoThis (++) (Sum [1,2]) (Sum [3,4])

并获取Sum [1,2,3,4]。 (当然,canIdoThis也适用于Product [a]等)

任何其他提示或只是对Control.Lens.Wrapped可以做的所有善意的一般性记录都非常感激。

1 个答案:

答案 0 :(得分:2)

不使用Wrapped,但是:

import Data.Coercible

canIdoThis :: ([a] -> [a] -> [a]) -> Sum [a] -> Sum [a] -> Sum [a]
canIdoThis = coerce

你确定这些应该包含在Sum中吗?默认情况下不会instance Num [a]