简体   繁体   中英

How to non-impredicatively return `Maybe` a lens?

A type like Maybe (Lens' ab) 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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM