Translation of GHC typechecker output to haskell-src-exts's 'Type'

Simon Peyton Jones simonpj at
Mon Apr 3 10:59:39 UTC 2017


Please start a wiki page, somewhere under
that gives the information you wish was more clearly described.

And/or add a Note in TyCoRep to explain.

My answer to your question would be:

The type that Haskell programmers write 
	Ord a => a -> a
is represented in Type using FunTy, thus
	Ord a -> a -> a
There is no "=>" data contructor.

Instead you can tell the difference between -> and => by looking at the kind of the bit before the ->.  Thus
	ty1 -> ty2
if ty1 :: Constraint, then it it's a "=>" otherwise a "->".

Use (isPredTy ty1) to tell the difference.

Does that help


|  -----Original Message-----
|  From: ghc-devs [mailto:ghc-devs-bounces at] On Behalf Of Tom
|  Sydney Kerckhove
|  Sent: 02 April 2017 14:02
|  To: Ben Gamari <ben at>
|  Cc: ghc-devs at
|  Subject: Re: Translation of GHC typechecker output to haskell-src-
|  exts's 'Type'
|  On 02-04-17 14:40:05, Tom Sydney Kerckhove wrote:
|  > Is there a way to access the types before this translation happens?
|  > It's okay if I have to assume that type-checking succeeds...
|  I have found a way to do what I want, even after this translation.
|  It relies on the fact that type class constraints always occur on the
|  left side of the result of splitFunTy.
|  Thank you for your help!
|  --
|  Tom Sydney Kerckhove

More information about the ghc-devs mailing list