id summary reporter owner description type status priority milestone component version resolution keywords cc os architecture failure testcase blockedby blocking related differential wikipage
14943 Make (=>) polykinded (:: k -> k -> Constraint) Iceland_jack "Would it be a good idea to treat `=>` in `-XQuantifiedConstraints` as
{{{#!hs
type family
(=>) :: k -> k -> Constraint where
(=>) = Implies0
(=>) = Implies1
(=>) = Implies2 ..
}}}
{{{#!hs
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
{{{#!hs
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
{{{#!hs
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." bug new normal Compiler 8.2.2 QuantifiedConstraints Unknown/Multiple Unknown/Multiple None/Unknown