X-Git-Url: http://git.megacz.com/?p=coq-hetmet.git;a=blobdiff_plain;f=src%2FHaskWeakVars.v;h=e7ab943afe134d56fa4e4ff9d008429e089e54c4;hp=896aff4f3ea91fd95bf24685df2e5df56a5965e0;hb=423b0bd3972c5bcbbd757cb715e13b5b9104a9a6;hpb=14afe39e905be69eabd8944b97bb2b731bf44939 diff --git a/src/HaskWeakVars.v b/src/HaskWeakVars.v index 896aff4..e7ab943 100644 --- a/src/HaskWeakVars.v +++ b/src/HaskWeakVars.v @@ -14,6 +14,11 @@ Require Import HaskCoreVars. Require Import HaskCoreTypes. Require Import HaskWeakTypes. +Inductive CoreVarToWeakVarResult : Type := +| CVTWVR_EVar : CoreType -> CoreVarToWeakVarResult +| CVTWVR_TyVar : Kind -> CoreVarToWeakVarResult +| CVTWVR_CoVar : CoreType -> CoreType -> CoreVarToWeakVarResult. + (* a WeakExprVar just wraps a CoreVar and tags it with the type of its value *) Inductive WeakExprVar := weakExprVar : CoreVar -> WeakType -> WeakExprVar. @@ -42,17 +47,13 @@ Definition haskLiteralToWeakType lit : WeakType := WTyCon (haskLiteralToTyCon lit). Coercion haskLiteralToWeakType : HaskLiteral >-> WeakType. -Variable coreVarToWeakVar : CoreVar -> WeakVar. Extract Inlined Constant coreVarToWeakVar => "coreVarToWeakVar". -Variable getTyConTyVars_ : CoreTyCon -> list CoreVar. Extract Inlined Constant getTyConTyVars_ => "getTyConTyVars". -Definition tyConTyVars (tc:CoreTyCon) := - filter (map (fun x => match coreVarToWeakVar x with WTypeVar v => Some v | _ => None end) (getTyConTyVars_ tc)). - Opaque tyConTyVars. -Definition tyConKind (tc:TyCon) : list Kind := map (fun (x:WeakTypeVar) => x:Kind) (tyConTyVars tc). +Variable coreVarToWeakVar : CoreVar -> CoreVarToWeakVarResult. Extract Inlined Constant coreVarToWeakVar => "coreVarToWeakVar". +Variable getTyConTyVars_ : CoreTyCon -> list CoreVar. Extract Inlined Constant getTyConTyVars_ => "getTyConTyVars". -Variable rawTyFunKind : CoreTyCon -> Kind. Extract Inlined Constant rawTyFunKind => "(coreKindToKind . TyCon.tyConKind)". +Variable rawTyFunKind : CoreTyCon -> ((list Kind) * Kind). Extract Inlined Constant rawTyFunKind => "rawTyFunKind". Definition tyFunKind (tc:TyFun) : ((list Kind) * Kind) := - splitKind (rawTyFunKind tc). + rawTyFunKind tc. Instance WeakVarToString : ToString WeakVar := { toString := fun x => toString (weakVarToCoreVar x) }.