lef*_*out 6 haskell higher-rank-types lenses impredicativetypes
类似的类型Maybe (Lens' a b)不起作用,因为Lens'在引擎盖下是Rank-2类型,不能在没有-XImpredicativeTypes扩展名的类型构造函数中包装(在GHC中实际上不支持).
因此,提供一个在道德上具有类型的函数的最佳类型是什么
foo :: A -> Maybe (Lens' B C)
Run Code Online (Sandbox Code Playgroud)
一种可能性是推迟Maybe到通过的延续
foo' :: ? y . A -> (Lens' B C -> y) -> Maybe y
Run Code Online (Sandbox Code Playgroud)
但我并不特别喜欢.
这就是该Control.Lens.Reified模块的用途.它包含层次结构的newtype包装器lens.
foo :: A -> Maybe (ReifiedLens' B C)
Run Code Online (Sandbox Code Playgroud)