如何非强制性地 return `Maybe` 镜头?
How to non-impredicatively return `Maybe` a lens?
像 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
但我不是特别喜欢。
这就是 Control.Lens.Reified
模块的用途。它包含 lens
层次结构的 newtype
包装器。
foo :: A -> Maybe (ReifiedLens' B C)
像 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
但我不是特别喜欢。
这就是 Control.Lens.Reified
模块的用途。它包含 lens
层次结构的 newtype
包装器。
foo :: A -> Maybe (ReifiedLens' B C)