Hide the gnarly levity polymorphism stuff in the signatures of `undefined`, `throw`, etc
In base-4.12, throw
goes from
throw :: Exception e => e -> a
to
throw :: forall (r :: RuntimeRep). forall (a :: TYPE r). forall e. Exception e => e -> a
http://hackage.haskell.org/package/base-4.12.0.0/docs/Control-Exception-Base.html#v:throw
Similar story for undefined
. Even as a fairly experienced haskell programmer I find the signature difficult to parse, leaving aside the meaning of RuntimeRep
and TYPE
. The amount of research an expert in Haskell 98 would have to do to thoroughly understand that signature is unreasonable (the various meanings of forall
, DataKinds
, as well as the levity polymorphism stuff).
I don't have a proposed solution, but a constraint synonym or something that hid RuntimeRep
and TYPE
, and which could be documented with "This means a type with any runtime representation; everything is fine" would be okay.
Relevant: #12030 (closed) #11549 (closed)
Trac metadata
Trac field | Value |
---|---|
Version | 8.6.3 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | libraries/base |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |