From: Adam Megacz Date: Sat, 23 Apr 2011 03:22:06 +0000 (-0700) Subject: primops.txt.pp: add missing type application in description of GHC.Prim.Any X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=e11c554e94c39223ea55991a552ccb244dfe4364;hp=51bbdda993815fc0c3e55cbfcc60ffd512b9d4bd primops.txt.pp: add missing type application in description of GHC.Prim.Any Understanding GHC.Prim.Any is all about understanding the need for explicit type applications in CoreSyn; the previous example had one explicit type application but was missing the other, which this patch adds. It also expands the explanation, based on SPJ's post here: http://article.gmane.org/gmane.comp.lang.haskell.cvs.ghc/46551 --- diff --git a/compiler/prelude/primops.txt.pp b/compiler/prelude/primops.txt.pp index 7d80db4..49f7a97 100644 --- a/compiler/prelude/primops.txt.pp +++ b/compiler/prelude/primops.txt.pp @@ -1738,9 +1738,19 @@ primtype Any a but never enters a function value. It's also used to instantiate un-constrained type variables after type - checking. For example + checking. For example, {\tt length} has type - {\tt length Any []} + {\tt length :: forall a. [a] -> Int} + + and the list datacon for the empty list has type + + {\tt [] :: forall a. [a]} + + In order to compose these two terms as {\tt length []} a type + application is required, but there is no constraint on the + choice. In this situation GHC uses {\tt Any}: + + {\tt length Any ([] Any)} Annoyingly, we sometimes need {\tt Any}s of other kinds, such as {\tt (* -> *)} etc. This is a bit like tuples. We define a couple of useful ones here,