A type like Maybe (Lens' a b)
doesn't work because Lens'
is under the hood a Rank-2 type, that can't be wrapped in a type constructor without the -XImpredicativeTypes
extension (which is not really supported in GHC).
What is thus the best type to give a function that would morally have type
foo :: A -> Maybe (Lens' B C)
A possibility would be to defer the Maybe
into a passed continuation
foo' :: ∀ y . A -> (Lens' B C -> y) -> Maybe y
but I don't particularly like that.
This is what the Control.Lens.Reified
module is for. It contains newtype
wrappers for the lens
hierarchy.
foo :: A -> Maybe (ReifiedLens' B C)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With