Commit 4c658451 authored by chak@cse.unsw.edu.au.'s avatar chak@cse.unsw.edu.au.

Comments only

Mon Sep 18 17:43:31 EDT 2006  Manuel M T Chakravarty <chak@cse.unsw.edu.au>
  * Comments only
  Wed Aug  9 04:45:19 EDT 2006  simonpj@microsoft.com
    * Comments only
parent 7676e57a
......@@ -84,9 +84,7 @@ data HsBind id
-- (with a free type variable a'). The coercion will take
-- a CoreExpr of this type and convert it to a CoreExpr of
-- type Int -> forall a'. a' -> a'
-- Notice that the coercion captures the free a'. That's
-- why coercions are (CoreExpr -> CoreExpr), rather than
-- just CoreExpr (with a functional type)
-- Notice that the coercion captures the free a'.
bind_fvs :: NameSet -- After the renamer, this contains a superset of the
-- Names of the other binders in this binding group that
......
......@@ -193,7 +193,7 @@ data Type
Type
| PredTy -- The type of evidence for a type predictate
PredType -- Can be expanded to a representation type.
PredType -- See Note [PredTy], and Note [Equality predicates]
-- NB: A PredTy (EqPred _ _) can appear only as the kind
-- of a coercion variable; never as the argument or result
-- of a FunTy (unlike ClassP, IParam)
......@@ -219,7 +219,7 @@ data TyNote = FTVNote TyVarSet -- The free type variables of the noted expressio
\end{code}
-------------------------------------
Source types
Note [PredTy]
A type of the form
PredTy p
......@@ -259,6 +259,24 @@ The predicate really does turn into a real extra argument to the
function. If the argument has type (PredTy p) then the predicate p is
represented by evidence (a dictionary, for example, of type (predRepTy p).
Note [Equality predicates]
~~~~~~~~~~~~~~~~~~~~~~~~~~
forall a b. (a :=: S b) => a -> b
could be represented by
ForAllTy a (ForAllTy b (FunTy (PredTy (EqPred a (S b))) ...))
OR
ForAllTy a (ForAllTy b (ForAllTy (c::PredTy (EqPred a (S b))) ...))
The latter is what we do. (Unlike for class and implicit parameter
constraints, which do use FunTy.)
Reason:
* FunTy is always a *value* function
* ForAllTy is discarded at runtime
We often need to make a "wildcard" (c::PredTy..). We always use the same
name (wildCoVarName), since it's not mentioned.
%************************************************************************
%* *
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment