
#11715: Constraint vs * -------------------------------------+------------------------------------- Reporter: bgamari | Owner: Type: bug | Status: new Priority: high | Milestone: 8.2.1 Component: Compiler (Type | Version: 8.0.1-rc1 checker) | Resolution: | Keywords: Typeable Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by int-index): Couldn't we theoretically have constraints passed as unboxed data? In https://ghc.haskell.org/trac/ghc/wiki/UnliftedDataTypes I see that Edward Kmett suggests a separate flag to `TYPE`, `Constraintiness`, which would be more disciplined than misusing `RuntimeRep` and would solve the same problems. Except I think that it should be called `Coherency`, not `Constraintiness`, because the main feature of things that go to the left of `=>` is that they should have coherency properties (as was already discussed). {{{ data Coherency = Coherent | Incoherent }}} This way we can even make `->` coherency-polymorphic (and eliminate `Dict`, that would be safe). `=>` could then require something `Coherent`, and `-XIncoherentContexts` (a companion to `-XIncoherentInstances`) could lift this restriction. Then `Int =>` would be disallowed unless the pragma is specified, but none of my objections would apply. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11715#comment:52 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler