X-Git-Url: http://git.megacz.com/?p=coq-hetmet.git;a=blobdiff_plain;f=src%2FHaskCoreToWeak.v;fp=src%2FHaskCoreToWeak.v;h=6fc5b431ea1cdee2c9e15b70bf05d5ba4cad4fa6;hp=b538417f84e5c0b0f67422c941ef4fa046b884a0;hb=26733c04106397dc8a10396ce688e908e8d0cde7;hpb=65a6d16ea7d8a07fe8e162151b76cf40a41d8c31 diff --git a/src/HaskCoreToWeak.v b/src/HaskCoreToWeak.v index b538417..6fc5b43 100644 --- a/src/HaskCoreToWeak.v +++ b/src/HaskCoreToWeak.v @@ -75,24 +75,24 @@ Variable coreViewDeep : CoreType -> CoreType. Extract Inlined Constant coreView Definition coreTypeToWeakType t := coreTypeToWeakType' (coreViewDeep t). (* detects our crude Core-encoding of modal type introduction/elimination forms *) -Definition isBrak (ce:@CoreExpr CoreVar) : ??(WeakTypeVar * CoreType) := +Definition isBrak (ce:@CoreExpr CoreVar) : ??(CoreVar * WeakTypeVar * CoreType) := match ce with | (CoreEApp (CoreEApp (CoreEVar v) (CoreEType (TyVarTy ec))) (CoreEType tbody)) => if coreName_eq hetmet_brak_name (coreVarCoreName v) then - match coreVarToWeakVar v with + match coreVarToWeakVar ec with | WExprVar _ => None - | WTypeVar tv => Some (tv,tbody) + | WTypeVar tv => Some (v,tv,tbody) | WCoerVar _ => None end else None | _ => None end. -Definition isEsc (ce:@CoreExpr CoreVar) : ??(WeakTypeVar * CoreType) := +Definition isEsc (ce:@CoreExpr CoreVar) : ??(CoreVar * WeakTypeVar * CoreType) := match ce with | (CoreEApp (CoreEApp (CoreEVar v) (CoreEType (TyVarTy ec))) (CoreEType tbody)) => if coreName_eq hetmet_esc_name (coreVarCoreName v) then - match coreVarToWeakVar v with + match coreVarToWeakVar ec with | WExprVar _ => None - | WTypeVar tv => Some (tv,tbody) + | WTypeVar tv => Some (v,tv,tbody) | WCoerVar _ => None end else None | _ => None @@ -120,15 +120,15 @@ Fixpoint coreExprToWeakExpr (ce:@CoreExpr CoreVar) : ???WeakExpr := end | CoreEApp e1 e2 => match isBrak e1 with - | Some (tv,t) => + | Some (v,tv,t) => coreExprToWeakExpr e2 >>= fun e' => coreTypeToWeakType t >>= fun t' => - OK (WEBrak tv e' t') + OK (WEBrak v tv e' t') | None => match isEsc e1 with - | Some (tv,t) => + | Some (v,tv,t) => coreExprToWeakExpr e2 >>= fun e' => coreTypeToWeakType t >>= fun t' => - OK (WEEsc tv e' t') + OK (WEEsc v tv e' t') | None => coreExprToWeakExpr e1 >>= fun e1' => match e2 with | CoreEType t =>