Make (=>) polykinded (:: k -> k -> Constraint)
Would it be a good idea to treat =>
in -XQuantifiedConstraints
as
type family
(=>) :: k -> k -> Constraint where
(=>) = Implies0
(=>) = Implies1
(=>) = Implies2 ..
class (a => b) => Implies a b
instance (a => b) => Implies a b
class (forall x. f x => g x) => Implies1 f g
instance (forall x. f x => g x) => Implies1 f g
class (forall x y. f x y => g x y) => Implies2 f g
instance (forall x y. f x y => g x y) => Implies2 f g
..
or will this get too confusing? This means type signatures like the ones from #14942 (closed)
oneTwo :: (forall x. semi x => Semigroup x) => Free semi Int
nil :: (forall x. mon x => Monoid x) => Free mon Int
together :: (forall x. mon x => Monoid x) => [Free mon Int]
could equivalently be written
oneTwo :: (semi => Semigroup) => Free semi Int
nil :: (mon => Monoid) => Free mon Int
together :: (mon => Monoid) => [Free mon Int]
I'm not sold on this idea myself. It's quite possible this would screw with the parser.
Trac metadata
Trac field | Value |
---|---|
Version | 8.2.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |