像Maybe (Lens' a b)这样的类型不能工作,因为Lens'位于Rank-2类型下,如果没有-XImpredicativeTypes扩展,就不能将它封装在类型构造函数中(在GHC中并不真正支持这种扩展)。
因此,给出一个道德上有类型的函数的最佳类型是什么?
foo :: A -> Maybe (Lens' B C)一种可能是将Maybe推迟到一个经过的连续。
foo' :: ∀ y . A -> (Lens' B C -> y) -> Maybe y但我并不特别喜欢这样。
发布于 2017-01-07 16:20:33
这就是Control.Lens.Reified模块的用途。它包含newtype层次结构的lens包装器。
foo :: A -> Maybe (ReifiedLens' B C)https://stackoverflow.com/questions/41522857
复制相似问题