X-Git-Url: http://git.megacz.com/?p=coq-hetmet.git;a=blobdiff_plain;f=src%2FHaskCoreVars.v;h=d158f050e07a299215f47a1f01ed664bf5f0abf5;hp=954dfc5f8022443b263e59e98d869c6c7c18ea3c;hb=50747fb9b9a44a24ea7a29b8703706386f6cd092;hpb=8c26722a1ee110077968a8a166eb7130266b2035 diff --git a/src/HaskCoreVars.v b/src/HaskCoreVars.v index 954dfc5..d158f05 100644 --- a/src/HaskCoreVars.v +++ b/src/HaskCoreVars.v @@ -6,12 +6,26 @@ Generalizable All Variables. Require Import Preamble. Require Import General. Require Import Coq.Strings.String. +Require Import HaskLiteralsAndTyCons. (* GHC uses a single type for expression variables, type variables, and coercion variables; this is that type *) -Variable CoreVar : Type. Extract Inlined Constant CoreVar => "Var.Var". -Variable coreVar_eq : forall (a b:CoreVar), sumbool (a=b) (not (a=b)). Extract Inlined Constant coreVar_eq => "(==)". -Variable coreVarToString : CoreVar -> string. Extract Inlined Constant coreVarToString => "outputableToString". -Axiom coreVar_eq_refl : forall v, (coreVar_eq v v) = (left _ (refl_equal v)). -Instance CoreVarEqDecidable : EqDecidable CoreVar := { eqd_dec := coreVar_eq }. -Instance CoreVarToString : ToString CoreVar := - { toString := coreVarToString }. +Variable CoreVar : Type. Extract Inlined Constant CoreVar => "Var.Var". +Variable coreVar_eq : forall (a b:CoreVar), sumbool (a=b) (not (a=b)). Extract Inlined Constant coreVar_eq => "(==)". +Variable coreVarToString : CoreVar -> string. Extract Inlined Constant coreVarToString => "outputableToString". +Instance CoreVarEqDecidable : EqDecidable CoreVar := { eqd_dec := coreVar_eq }. +Instance CoreVarToString : ToString CoreVar := { toString := coreVarToString }. + +Variable CoreTyCon : Type. Extract Inlined Constant CoreTyCon => "TyCon.TyCon". + +(* because Haskell's 3-tuples (triples) are distinct from both ((x,y),z) and (x,(y,z)), we need a new type: *) +Inductive triple {A B C:Type} := +| mkTriple : A -> B -> C -> triple. +Notation "a ** b ** c" := (mkTriple a b c) (at level 20). +Extract Inductive triple => "(,,)" [ "(,,)" ]. + +Inductive CoreAltCon := +| DataAlt : CoreDataCon -> CoreAltCon +| LitAlt : HaskLiteral -> CoreAltCon +| DEFAULT : CoreAltCon. +Extract Inductive CoreAltCon => + "CoreSyn.AltCon" [ "CoreSyn.DataAlt" "CoreSyn.LitAlt" "CoreSyn.DEFAULT" ].