如何非毫不含糊地回复"也许"一个镜头?

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)

但我并不特别喜欢.

Ben*_*son 7

这就是该Control.Lens.Reified模块的用途.它包含层次结构的newtype包装器lens.

foo :: A -> Maybe (ReifiedLens' B C)
Run Code Online (Sandbox Code Playgroud)