summaryrefslogtreecommitdiffstats
path: root/ShowSyntax.sml
diff options
context:
space:
mode:
Diffstat (limited to 'ShowSyntax.sml')
-rw-r--r--ShowSyntax.sml58
1 files changed, 32 insertions, 26 deletions
diff --git a/ShowSyntax.sml b/ShowSyntax.sml
index 53cc2af..519fb2b 100644
--- a/ShowSyntax.sml
+++ b/ShowSyntax.sml
@@ -46,10 +46,20 @@ and patToStringI (indent : string) (Syntax.PWild : Syntax.pat) : string =
"PCon " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ listToString (stringToStringI) indent' x0 ^ ",\n" ^ indent' ^ patToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
and patToString (x : Syntax.pat) : string = patToStringI "" x
+and identTypeToStringI (indent : string) (Syntax.ITVar : Syntax.identType) : string =
+ "ITVar"
+ | identTypeToStringI (indent : string) (Syntax.ITStruct : Syntax.identType) : string =
+ "ITStruct"
+ | identTypeToStringI (indent : string) (Syntax.ITFunctor : Syntax.identType) : string =
+ "ITFunctor"
+ | identTypeToStringI (indent : string) (Syntax.ITSignature : Syntax.identType) : string =
+ "ITSignature"
+and identTypeToString (x : Syntax.identType) : string = identTypeToStringI "" x
+
and exprToStringI (indent : string) (Syntax.EIdent x : Syntax.expr) : string =
- "EIdent " ^ stringToStringI indent x
+ "EIdent " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ identTypeToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
| exprToStringI (indent : string) (Syntax.EDot x : Syntax.expr) : string =
- "EDot " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ structExprToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
+ "EDot " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ exprToStringI indent' x0 ^ ",\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ identTypeToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
| exprToStringI (indent : string) (Syntax.EBuiltin x : Syntax.expr) : string =
"EBuiltin " ^ stringToStringI indent x
| exprToStringI (indent : string) (Syntax.EInt x : Syntax.expr) : string =
@@ -74,6 +84,10 @@ and exprToStringI (indent : string) (Syntax.EIdent x : Syntax.expr) : string =
"ELambda " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ patToStringI indent' x0 ^ ",\n" ^ indent' ^ exprToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
| exprToStringI (indent : string) (Syntax.ECase x : Syntax.expr) : string =
"ECase " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ exprToStringI indent' x0 ^ ",\n" ^ indent' ^ listToString ((fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ patToStringI indent' x0 ^ ",\n" ^ indent' ^ exprToStringI indent' x1 ^ "\n" ^ indent ^ ")" end)) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
+ | exprToStringI (indent : string) (Syntax.EStruct x : Syntax.expr) : string =
+ "EStruct " ^ listToString (decToStringI) indent x
+ | exprToStringI (indent : string) (Syntax.EFunctorApp x : Syntax.expr) : string =
+ "EFunctorApp " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ exprToStringI indent' x0 ^ ",\n" ^ indent' ^ exprToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
and exprToString (x : Syntax.expr) : string = exprToStringI "" x
and decToStringI (indent : string) (Syntax.DVal x : Syntax.dec) : string =
@@ -87,19 +101,13 @@ and decToStringI (indent : string) (Syntax.DVal x : Syntax.dec) : string =
| decToStringI (indent : string) (Syntax.DType x : Syntax.dec) : string =
"DType " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ etypeToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
| decToStringI (indent : string) (Syntax.DStruct x : Syntax.dec) : string =
- "DStruct " ^ (fn indent => fn (x0, x1, x2) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ optionToString (stringToStringI) indent' x1 ^ ",\n" ^ indent' ^ structExprToStringI indent' x2 ^ "\n" ^ indent ^ ")" end) indent x
+ "DStruct " ^ (fn indent => fn (x0, x1, x2) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ optionToString (stringToStringI) indent' x1 ^ ",\n" ^ indent' ^ exprToStringI indent' x2 ^ "\n" ^ indent ^ ")" end) indent x
| decToStringI (indent : string) (Syntax.DSig x : Syntax.dec) : string =
"DSig " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ listToString ((fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ etypeToStringI indent' x1 ^ "\n" ^ indent ^ ")" end)) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
+ | decToStringI (indent : string) (Syntax.DFunctor x : Syntax.dec) : string =
+ "DFunctor " ^ (fn indent => fn (x0, x1, x2, x3) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ ",\n" ^ indent' ^ stringToStringI indent' x2 ^ ",\n" ^ indent' ^ exprToStringI indent' x3 ^ "\n" ^ indent ^ ")" end) indent x
and decToString (x : Syntax.dec) : string = decToStringI "" x
-and structExprToStringI (indent : string) (Syntax.SIdent x : Syntax.structExpr) : string =
- "SIdent " ^ stringToStringI indent x
- | structExprToStringI (indent : string) (Syntax.SDot x : Syntax.structExpr) : string =
- "SDot " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ structExprToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
- | structExprToStringI (indent : string) (Syntax.SStruct x : Syntax.structExpr) : string =
- "SStruct " ^ listToString (decToStringI) indent x
-and structExprToString (x : Syntax.structExpr) : string = structExprToStringI "" x
-
and tyToStringI (indent : string) (Syntax.TInt : Syntax.ty) : string =
"TInt"
| tyToStringI (indent : string) (Syntax.TBool : Syntax.ty) : string =
@@ -116,12 +124,12 @@ and tyToStringI (indent : string) (Syntax.TInt : Syntax.ty) : string =
"TList " ^ tyToStringI indent x
| tyToStringI (indent : string) (Syntax.TDatatype x : Syntax.ty) : string =
"TDatatype " ^ listToString (stringToStringI) indent x
+ | tyToStringI (indent : string) (Syntax.TStruct x : Syntax.ty) : string =
+ "TStruct " ^ listToString ((fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ identTypeToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end)) indent x
+ | tyToStringI (indent : string) (Syntax.TFunctor x : Syntax.ty) : string =
+ "TFunctor " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ tyToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
and tyToString (x : Syntax.ty) : string = tyToStringI "" x
-and structTypeToStringI (indent : string) (Syntax.TStruct x : Syntax.structType) : string =
- "TStruct " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ listToString ((fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ structTypeToStringI indent' x1 ^ "\n" ^ indent ^ ")" end)) indent' x0 ^ ",\n" ^ indent' ^ listToString ((fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end)) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
-and structTypeToString (x : Syntax.structType) : string = structTypeToStringI "" x
-
and typedPatToStringI (indent : string) (Syntax.TPWild : Syntax.typedPat) : string =
"TPWild"
| typedPatToStringI (indent : string) (Syntax.TPVar x : Syntax.typedPat) : string =
@@ -135,9 +143,9 @@ and typedPatToStringI (indent : string) (Syntax.TPWild : Syntax.typedPat) : stri
and typedPatToString (x : Syntax.typedPat) : string = typedPatToStringI "" x
and typedExprToStringI (indent : string) (Syntax.TEIdent x : Syntax.typedExpr) : string =
- "TEIdent " ^ stringToStringI indent x
+ "TEIdent " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ identTypeToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
| typedExprToStringI (indent : string) (Syntax.TEDot x : Syntax.typedExpr) : string =
- "TEDot " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedStructExprToStringI indent' x0 ^ ",\n" ^ indent' ^ structTypeToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
+ "TEDot " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedExprToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x0 ^ ",\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ identTypeToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
| typedExprToStringI (indent : string) (Syntax.TEBuiltin x : Syntax.typedExpr) : string =
"TEBuiltin " ^ stringToStringI indent x
| typedExprToStringI (indent : string) (Syntax.TEInt x : Syntax.typedExpr) : string =
@@ -160,6 +168,10 @@ and typedExprToStringI (indent : string) (Syntax.TEIdent x : Syntax.typedExpr) :
"TELambda " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedPatToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x0 ^ ",\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedExprToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
| typedExprToStringI (indent : string) (Syntax.TECase x : Syntax.typedExpr) : string =
"TECase " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedExprToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x0 ^ ",\n" ^ indent' ^ listToString ((fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedPatToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x0 ^ ",\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedExprToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x1 ^ "\n" ^ indent ^ ")" end)) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
+ | typedExprToStringI (indent : string) (Syntax.TEStruct x : Syntax.typedExpr) : string =
+ "TEStruct " ^ listToString (typedDecToStringI) indent x
+ | typedExprToStringI (indent : string) (Syntax.TEFunctorApp x : Syntax.typedExpr) : string =
+ "TEFunctorApp " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedExprToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x0 ^ ",\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedExprToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
and typedExprToString (x : Syntax.typedExpr) : string = typedExprToStringI "" x
and typedDecToStringI (indent : string) (Syntax.TDVal x : Syntax.typedDec) : string =
@@ -171,17 +183,11 @@ and typedDecToStringI (indent : string) (Syntax.TDVal x : Syntax.typedDec) : str
| typedDecToStringI (indent : string) (Syntax.TDDatatype x : Syntax.typedDec) : string =
"TDDatatype " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ listToString ((fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ optionToString (tyToStringI) indent' x1 ^ "\n" ^ indent ^ ")" end)) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
| typedDecToStringI (indent : string) (Syntax.TDStruct x : Syntax.typedDec) : string =
- "TDStruct " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedStructExprToStringI indent' x0 ^ ",\n" ^ indent' ^ structTypeToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
+ "TDStruct " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedExprToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
+ | typedDecToStringI (indent : string) (Syntax.TDFunctor x : Syntax.typedDec) : string =
+ "TDFunctor " ^ (fn indent => fn (x0, x1, x2, x3) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ stringToStringI indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ ",\n" ^ indent' ^ tyToStringI indent' x2 ^ ",\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedExprToStringI indent' x0 ^ ",\n" ^ indent' ^ tyToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x3 ^ "\n" ^ indent ^ ")" end) indent x
and typedDecToString (x : Syntax.typedDec) : string = typedDecToStringI "" x
-and typedStructExprToStringI (indent : string) (Syntax.TSIdent x : Syntax.typedStructExpr) : string =
- "TSIdent " ^ stringToStringI indent x
- | typedStructExprToStringI (indent : string) (Syntax.TSDot x : Syntax.typedStructExpr) : string =
- "TSDot " ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ (fn indent => fn (x0, x1) => let val indent' = indent ^ " " in "(\n" ^ indent' ^ typedStructExprToStringI indent' x0 ^ ",\n" ^ indent' ^ structTypeToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent' x0 ^ ",\n" ^ indent' ^ stringToStringI indent' x1 ^ "\n" ^ indent ^ ")" end) indent x
- | typedStructExprToStringI (indent : string) (Syntax.TSStruct x : Syntax.typedStructExpr) : string =
- "TSStruct " ^ listToString (typedDecToStringI) indent x
-and typedStructExprToString (x : Syntax.typedStructExpr) : string = typedStructExprToStringI "" x
-
and primopToStringI (indent : string) (Syntax.PExit : Syntax.primop) : string =
"PExit"
| primopToStringI (indent : string) (Syntax.PAdd : Syntax.primop) : string =