summaryrefslogtreecommitdiffstats
path: root/generate-show-syntax.sml
diff options
context:
space:
mode:
Diffstat (limited to 'generate-show-syntax.sml')
-rw-r--r--generate-show-syntax.sml41
1 files changed, 21 insertions, 20 deletions
diff --git a/generate-show-syntax.sml b/generate-show-syntax.sml
index d58d73d..c1e104f 100644
--- a/generate-show-syntax.sml
+++ b/generate-show-syntax.sml
@@ -4,30 +4,31 @@ use "Syntax.sml";
use "Parser.sml";
use "Opts.sml";
-val header =
- "fun intToStringI (_ : string) (i : int) : string = Int.toString i\n"
- ^ "\n"
- ^ "fun varToStringI (_ : string) (v : Syntax.var) : string = \"Var \" ^ Int.toString v\n"
- ^ "\n"
- ^ "fun stringToStringI (_ : string) (s : string) : string = \"\\\"\" ^ String.toString s ^ \"\\\"\"\n"
- ^ "\n"
- ^ "fun optionToString (_ : string -> 'a -> string) (_ : string) NONE : string = \"NONE\"\n"
- ^ " | optionToString show indent (SOME x) = \"SOME (\" ^ show indent x ^ \")\"\n"
- ^ "\n"
- ^ "fun listToString (_ : string -> 'a -> string) (_ : string) ([] : 'a list) : string = \"[]\"\n"
- ^ " | listToString show indent [x] = \"[\" ^ show indent x ^ \"]\"\n"
- ^ " | listToString show indent xs =\n"
- ^ " let val indent' = indent ^ \" \" in\n"
- ^ " \"[\\n\"\n"
- ^ " ^ indent' ^ String.concatWith (\",\\n\" ^ indent') (map (show indent') xs) ^ \"\\n\"\n"
- ^ " ^ indent ^ \"]\"\n"
- ^ " end\n"
+val header = "\
+ \fun intToStringI (_ : string) (i : int) : string = Int.toString i\n\
+ \\n\
+ \fun varToStringI (_ : string) (v : Syntax.var) : string = \"Var \" ^ Int.toString v\n\
+ \\n\
+ \fun stringToStringI (_ : string) (s : string) : string = \"\\\"\" ^ String.toString s ^ \"\\\"\"\n\
+ \\n\
+ \fun optionToString (_ : string -> 'a -> string) (_ : string) NONE : string = \"NONE\"\n\
+ \ | optionToString show indent (SOME x) = \"SOME (\" ^ show indent x ^ \")\"\n\
+ \\n\
+ \fun listToString (_ : string -> 'a -> string) (_ : string) ([] : 'a list) : string = \"[]\"\n\
+ \ | listToString show indent [x] = \"[\" ^ show indent x ^ \"]\"\n\
+ \ | listToString show indent xs =\n\
+ \ let val indent' = indent ^ \" \" in\n\
+ \ \"[\\n\"\n\
+ \ ^ indent' ^ String.concatWith (\",\\n\" ^ indent') (map (show indent') xs) ^ \"\\n\"\n\
+ \ ^ indent ^ \"]\"\n\
+ \ end\n\
+\"
fun showTy (Syntax.Tyvar var) : string = var ^ "ToStringI"
| showTy (Syntax.Tycon ([ty], con)) = con ^ "ToString (" ^ showTy ty ^ ")"
| showTy (Syntax.TyTuple tys) =
let val vars = List.tabulate (length tys, fn i => "x" ^ Int.toString i) in
- "(fn indent => fn (" ^ String.concatWith ", " vars ^ ") => let val indent' = indent ^ \" \" in \"(\\n\" ^ indent' ^ " ^ String.concatWith " ^ \",\\n\" ^ indent' ^ " (map (fn (var, ty) => showTy ty ^ " indent' " ^ var) (ListPair.zip (vars, tys))) ^ " ^ \"\\n\" ^ indent ^ \")\" end)"
+ "(fn indent => fn (" ^ String.concatWith ", " vars ^ ") => let val indent' = indent ^ \" \" in \"(\\n\" ^ indent' ^ " ^ String.concatWith " ^ \",\\n\" ^ indent' ^ " (map (fn (var, ty) => showTy ty ^ " indent' " ^ var) (ListPair.zipEq (vars, tys))) ^ " ^ \"\\n\" ^ indent ^ \")\" end)"
end
| showTy _ = "(fn _ => fn _ => \"UNHANDLED\")"
@@ -51,7 +52,7 @@ val _ = TextIO.output (out, "(*\n This file was generated by generate-show-synt
val _ = TextIO.output (out, "structure Show" ^ structName ^ " = struct\n")
val _ = TextIO.output (out, header)
val _ = map
- (fn (i, Syntax.DDatatype (typeName, cases)) =>
+ (fn (i, Syntax.DDatatype (_, typeName, cases)) =>
(TextIO.output (out,
"\n" ^ (if i = 0 then "fun" else "and") ^ " "
^ String.concatWith "\n | " (map