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/DsCCall.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/DsCCall.lhs')
-rw-r--r-- | compiler/deSugar/DsCCall.lhs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/deSugar/DsCCall.lhs b/compiler/deSugar/DsCCall.lhs index 9adbac181f..bdacc9f07e 100644 --- a/compiler/deSugar/DsCCall.lhs +++ b/compiler/deSugar/DsCCall.lhs @@ -263,7 +263,7 @@ boxResult result_ty _ -> [] return_result state anss - = mkConApp (tupleCon Unboxed (2 + length extra_result_tys)) + = mkConApp (tupleCon UnboxedTuple (2 + length extra_result_tys)) (map Type (realWorldStatePrimTy : io_res_ty : extra_result_tys) ++ (state : anss)) @@ -327,9 +327,9 @@ mk_alt return_result (Just prim_res_ty, wrap_result) let the_rhs = return_result (Var state_id) (wrap_result (Var result_id) : map Var as) - ccall_res_ty = mkTyConApp (tupleTyCon Unboxed arity) + ccall_res_ty = mkTyConApp (tupleTyCon UnboxedTuple arity) (realWorldStatePrimTy : ls) - the_alt = ( DataAlt (tupleCon Unboxed arity) + the_alt = ( DataAlt (tupleCon UnboxedTuple arity) , (state_id : args_ids) , the_rhs ) |