For example, :t _Left would give Prism (Either a c) (Either b c) a b instead of (Applicative f, Choice p) => p a (f b) -> p (Either a c) (f (Either b c)). This would also help in making errors readable.
It could even return a DAG of specialized types such that the specialized types can be length-minimized further - for example, :t _Left could also give Prism' (Either a b) a.
For example,
:t _Left
would givePrism (Either a c) (Either b c) a b
instead of(Applicative f, Choice p) => p a (f b) -> p (Either a c) (f (Either b c))
. This would also help in making errors readable.It could even return a DAG of specialized types such that the specialized types can be length-minimized further - for example,
:t _Left
could also givePrism' (Either a b) a
.