diff options
author | Max Bolingbroke <batterseapower@hotmail.com> | 2011-09-06 17:22:47 +0100 |
---|---|---|
committer | Max Bolingbroke <batterseapower@hotmail.com> | 2011-09-06 20:48:41 +0100 |
commit | 9729fe7c3e54597ccf29c43c8c8ad0eaa2402ced (patch) | |
tree | 1ad67ec5008c8f30a7a8a01fa44cb35b9ce619d4 /compiler/deSugar/MatchCon.lhs | |
parent | b98267adc04266e0001019fb17746be570cc79ae (diff) | |
download | haskell-9729fe7c3e54597ccf29c43c8c8ad0eaa2402ced.tar.gz |
Implement -XConstraintKind
Basically as documented in http://hackage.haskell.org/trac/ghc/wiki/KindFact,
this patch adds a new kind Constraint such that:
Show :: * -> Constraint
(?x::Int) :: Constraint
(Int ~ a) :: Constraint
And you can write *any* type with kind Constraint to the left of (=>):
even if that type is a type synonym, type variable, indexed type or so on.
The following (somewhat related) changes are also made:
1. We now box equality evidence. This is required because we want
to give (Int ~ a) the *lifted* kind Constraint
2. For similar reasons, implicit parameters can now only be of
a lifted kind. (?x::Int#) => ty is now ruled out
3. Implicit parameter constraints are now allowed in superclasses
and instance contexts (this just falls out as OK with the new
constraint solver)
Internally the following major changes were made:
1. There is now no PredTy in the Type data type. Instead
GHC checks the kind of a type to figure out if it is a predicate
2. There is now no AClass TyThing: we represent classes as TyThings
just as a ATyCon (classes had TyCons anyway)
3. What used to be (~) is now pretty-printed as (~#). The box
constructor EqBox :: (a ~# b) -> (a ~ b)
4. The type LCoercion is used internally in the constraint solver
and type checker to represent coercions with free variables
of type (a ~ b) rather than (a ~# b)
Diffstat (limited to 'compiler/deSugar/MatchCon.lhs')
-rw-r--r-- | compiler/deSugar/MatchCon.lhs | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/compiler/deSugar/MatchCon.lhs b/compiler/deSugar/MatchCon.lhs index d84b9013cc..adaa48e18c 100644 --- a/compiler/deSugar/MatchCon.lhs +++ b/compiler/deSugar/MatchCon.lhs @@ -25,6 +25,7 @@ import DataCon import TcType import DsMonad import DsUtils +import MkCore ( mkCoreLets ) import Util ( all2, takeList, zipEqual ) import ListSetOps ( runs ) import Id @@ -140,7 +141,7 @@ matchOneCon vars ty (eqn1 : eqns) -- All eqns for a single constructor = do { ds_ev_binds <- dsTcEvBinds bind ; return (wrapBinds (tvs `zip` tvs1) . wrapBinds (ds `zip` dicts1) - . wrapDsEvBinds ds_ev_binds, + . mkCoreLets ds_ev_binds, eqn { eqn_pats = conArgPats arg_tys args ++ pats }) } -- Choose the right arg_vars in the right order for this group |