[GHC] #14943: Make (=>) polykinded (:: k -> k -> Constraint)
GHC
ghc-devs at haskell.org
Mon Mar 19 22:47:47 UTC 2018
#14943: Make (=>) polykinded (:: k -> k -> Constraint)
-------------------------------------+-------------------------------------
Reporter: Iceland_jack | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.2
Keywords: | Operating System: Unknown/Multiple
QuantifiedConstraints, wipT2893 |
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
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.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14943>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list