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 |