CakeML / cakeml

CakeML: A Verified Implementation of ML
https://cakeml.org
Other
945 stars 83 forks source link

CF normalisation to ANF doesn't support pattern function arguments #493

Open michaelsproul opened 6 years ago

michaelsproul commented 6 years ago

This code:

fun supervisor x = (
  FirstFunc.firstFunc ();
  SecondFunc.secondFunc ()
);

Produces this s-expr, which parses fine (with cake --sexp=true)

(Tdec (Dletrec (0 0 0 0 0 0) (("supervisor" "x" Let (SOME "a") (Con NONE nil) (Let NONE (App Opapp ((Var (Long "FirstFunc" (Short "firstFunc"))) (Var (Short "a")))) (Let (SOME "b") (Con NONE nil) (App Opapp ((Var (Long "SecondFunc" (Short "secondFunc"))) (Var (Short "b"))))))))))

Whereas the same function, with an _ in place of the function argument, produces this s-expr, which fails to parse:

(Tdec (Dletrec (0 0 0 0 0 0) (("supervisor" nil Mat (Var (Short nil)) ((Pany Let (SOME "a") (Con NONE nil) (Let NONE (App Opapp ((Var (Long "FirstFunc" (Short "firstFunc"))) (Var (Short "a")))) (Let (SOME "b") (Con NONE nil) (App Opapp ((Var (Long "SecondFunc" (Short "secondFunc"))) (Var (Short "b"))))))))))))
mn200 commented 6 years ago

The nil corresponds to cmlPtreeConversion’s introduction of a variable that is called "". That string is indeed the empty list.

I notice also that the sexp translation is also generating let-bindings for arguments to functions, akin to the way in which this is done by the CF machinery. I don't know if that's necessary and/or a good idea.

xrchz commented 6 years ago

The sexp parser is verified to invert the printer. So I don't understand how this is possible. What exactly fails?

xrchz commented 6 years ago

I don't think the sexp translation introduced any Lets. Note the original message does not specify the starting AST.

mn200 commented 6 years ago
  1. Notice how the sexp has a variable called a; the original does not; cmlPtreeConversion doesn't introduce such things, but the CF ANF-processing does.
  2. The inversion theorem is only wrt moving between strings and s-expressions. There's another conversion between s-expressions and ASTs too and I don't know if that's been verified.
michaelsproul commented 6 years ago

The full AST that you can feed to cake is:

(
(Tdec (Dtype (0 0 0 0 0 0) ((nil "ternaryComparisons_ordering" ("Greater" ) ("Equal" ) ("Less" ))))) 
(Tdec (Dtype (0 0 0 0 0 0) ((("'a" "'b") "sum" ("Inr" (Tvar "'b")) ("Inl" (Tvar "'a")))))) 
(Tdec (Dlet (0 0 0 0 0 0) "fst" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon NONE ("v2" "v1")) Var (Short "v2"))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "snd" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon NONE ("v2" "v1")) Var (Short "v1"))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "curry" (Fun "v1" (Fun "v2" (Fun "v3" (App Opapp ((Var (Short "v1")) (Con NONE ((Var (Short "v2")) (Var (Short "v3"))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "uncurry" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((Var (Short "v1")) (App Opapp ((Var (Short "fst")) (Var (Short "v2")))))) (App Opapp ((Var (Short "snd")) (Var (Short "v2")))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "o" (Fun "v2" (Fun "v3" (Fun "v1" (App Opapp ((Var (Short "v2")) (App Opapp ((Var (Short "v3")) (Var (Short "v1"))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "i" (Fun "v1" (Var (Short "v1"))))) 
(Tdec (Dlet (0 0 0 0 0 0) "c" (Fun "v3" (Fun "v2" (Fun "v1" (App Opapp ((App Opapp ((Var (Short "v3")) (Var (Short "v1")))) (Var (Short "v2"))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "k" (Fun "v2" (Fun "v1" (Var (Short "v2")))))) 
(Tdec (Dlet (0 0 0 0 0 0) "s" (Fun "v3" (Fun "v2" (Fun "v1" (App Opapp ((App Opapp ((Var (Short "v3")) (Var (Short "v1")))) (App Opapp ((Var (Short "v2")) (Var (Short "v1"))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "update" (Fun "v3" (Fun "v4" (Fun "v2" (Fun "v1" (If (App Equality ((Var (Short "v3")) (Var (Short "v1")))) (Var (Short "v4")) (App Opapp ((Var (Short "v2")) (Var (Short "v1"))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "w" (Fun "v2" (Fun "v1" (App Opapp ((App Opapp ((Var (Short "v2")) (Var (Short "v1")))) (Var (Short "v1")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "isl" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "Inl")) ("v1")) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "Inr")) ("v2")) App OpbLt ((Lit 0) (Lit 0)))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "isr" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "Inl")) ("v1")) App OpbLt ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "Inr")) ("v2")) App OpbLeq ((Lit 0) (Lit 0)))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "outl" (Fun "x1" (Mat (Var (Short "x1")) (((Pcon (SOME (Short "Inl")) ("v1")) Var (Short "v1")) ((Pcon (SOME (Short "Inr")) ("v2")) Raise (Con (SOME (Short "Bind")) nil))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "outr" (Fun "x1" (Mat (Var (Short "x1")) (((Pcon (SOME (Short "Inl")) ("v1")) Raise (Con (SOME (Short "Bind")) nil)) ((Pcon (SOME (Short "Inr")) ("v2")) Var (Short "v2"))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "f" (Fun "v3" (Fun "v4" (Fun "v5" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "Inl")) ("v1")) Con (SOME (Short "Inl")) ((App Opapp ((Var (Short "v3")) (Var (Short "v1")))))) ((Pcon (SOME (Short "Inr")) ("v2")) Con (SOME (Short "Inr")) ((App Opapp ((Var (Short "v4")) (Var (Short "v2"))))))))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("exp_aux" "v2" Fun "v3" (Fun "v1" (If (App Equality ((Var (Short "v3")) (Lit 0))) (Var (Short "v1")) (App Opapp ((App Opapp ((App Opapp ((Var (Short "exp_aux")) (Var (Short "v2")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App OpnTimes ((Var (Short "v2")) (Var (Short "v1")))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "exp" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((Var (Short "exp_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 1))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "min" (Fun "v1" (Fun "v2" (If (App OpbLt ((Var (Short "v1")) (Var (Short "v2")))) (Var (Short "v1")) (Var (Short "v2"))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "max" (Fun "v1" (Fun "v2" (If (App OpbLt ((Var (Short "v1")) (Var (Short "v2")))) (Var (Short "v2")) (Var (Short "v1"))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "even" (Fun "v1" (App Equality ((App OpnModulo ((Var (Short "v1")) (Lit 2))) (Lit 0)))))) 
(Tdec (Dlet (0 0 0 0 0 0) "odd" (Fun "v1" (App OpbLt ((Lit 0) (App OpnModulo ((Var (Short "v1")) (Lit 2)))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("funpow" "v1" Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v2")) (Lit 0))) (Var (Short "v3")) (App Opapp ((App Opapp ((App Opapp ((Var (Short "funpow")) (Var (Short "v1")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App Opapp ((Var (Short "v1")) (Var (Short "v3")))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "abs_diff" (Fun "v2" (Fun "v1" (If (App OpbLt ((Var (Short "v2")) (Var (Short "v1")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v1")) (Var (Short "v2")))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (Var (Short "v1")))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "pre" (Fun "v1" (Let (SOME "k") (App OpnMinus ((Var (Short "v1")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("while" "v1" Fun "v2" (Fun "v3" (If (App Opapp ((Var (Short "v1")) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "while")) (Var (Short "v1")))) (Var (Short "v2")))) (App Opapp ((Var (Short "v2")) (Var (Short "v3")))))) (Var (Short "v3")))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("owhile" "v1" Fun "v2" (Fun "v3" (If (App Opapp ((Var (Short "v1")) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "owhile")) (Var (Short "v1")))) (Var (Short "v2")))) (App Opapp ((Var (Short "v2")) (Var (Short "v3")))))) (Con (SOME (Short "SOME")) ((Var (Short "v3")))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "least" (Fun "v3" (App Opapp ((App Opapp ((App Opapp ((Var (Short "while")) (Fun "v1" (App Equality ((App Opapp ((Var (Short "v3")) (Var (Short "v1")))) (App OpbLt ((Lit 0) (Lit 0)))))))) (Fun "v2" (App OpnPlus ((Var (Short "v2")) (Lit 1)))))) (Lit 0)))))) 
(Tmod "Runtime" NONE ((Dtabbrev (0 0 0 0 0 0) nil "unit" (Tapp nil TC_tup)) (Dlet (0 0 0 0 0 0) "fullGC" (Fun "v1" (App ConfigGC ((Lit 0) (Lit 0))))) (Dlet (0 0 0 0 0 0) "debugMsg" (Fun "v1" (App (FFI . "") ((Var (Short "v1")) (App Aw8alloc ((Lit 0) (Lit (word8 0)))))))))) 
(Tmod "Option" NONE ((Dtabbrev (0 0 0 0 0 0) ("'a") "option" (Tapp ((Tvar "'a")) (TC_name (Short "option")))) (Dlet (0 0 0 0 0 0) "getOpt" (Fun "v3" (Fun "v2" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "NONE")) nil) Var (Short "v2")) ((Pcon (SOME (Short "SOME")) ("v1")) Var (Short "v1"))))))) (Dlet (0 0 0 0 0 0) "isSome" (Fun "v2" (Mat (Var (Short "v2")) (((Pcon (SOME (Short "NONE")) nil) App OpbLt ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "SOME")) ("v1")) App OpbLeq ((Lit 0) (Lit 0))))))) (Dlet (0 0 0 0 0 0) "valOf" (Fun "x1" (Mat (Var (Short "x1")) (((Pcon (SOME (Short "NONE")) nil) Raise (Con (SOME (Short "Bind")) nil)) ((Pcon (SOME (Short "SOME")) ("v1")) Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "join" (Fun "v2" (Mat (Var (Short "v2")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "SOME")) ("v1")) Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "map" (Fun "v2" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "SOME")) ("v1")) Con (SOME (Short "SOME")) ((App Opapp ((Var (Short "v2")) (Var (Short "v1"))))))))))) (Dlet (0 0 0 0 0 0) "mapPartial" (Fun "v2" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "SOME")) ("v1")) App Opapp ((Var (Short "v2")) (Var (Short "v1"))))))))) (Dlet (0 0 0 0 0 0) "compose" (Fun "v3" (Fun "v4" (Fun "v2" (Mat (App Opapp ((Var (Short "v4")) (Var (Short "v2")))) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "SOME")) ("v1")) Con (SOME (Short "SOME")) ((App Opapp ((Var (Short "v3")) (Var (Short "v1")))))))))))) (Dlet (0 0 0 0 0 0) "composePartial" (Fun "v3" (Fun "v4" (Fun "v2" (Mat (App Opapp ((Var (Short "v4")) (Var (Short "v2")))) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "SOME")) ("v1")) App Opapp ((Var (Short "v3")) (Var (Short "v1")))))))))) (Dlet (0 0 0 0 0 0) "isNone" (Fun "v2" (Mat (Var (Short "v2")) (((Pcon (SOME (Short "NONE")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "SOME")) ("v1")) App OpbLt ((Lit 0) (Lit 0))))))) (Dlet (0 0 0 0 0 0) "map2" (Fun "v1" (Fun "v2" (Fun "v3" (If (Log And (App Opapp ((Var (Short "isSome")) (Var (Short "v2")))) (App Opapp ((Var (Short "isSome")) (Var (Short "v3"))))) (Con (SOME (Short "SOME")) ((App Opapp ((App Opapp ((Var (Short "v1")) (App Opapp ((Var (Short "valOf")) (Var (Short "v2")))))) (App Opapp ((Var (Short "valOf")) (Var (Short "v3")))))))) (Con (SOME (Short "NONE")) nil)))))))) 
(Tmod "List" NONE ((Dtabbrev (0 0 0 0 0 0) ("'a") "list" (Tapp ((Tvar "'a")) (TC_name (Short "list")))) (Dletrec (0 0 0 0 0 0) (("length" "v3" Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Lit 0) ((Pcon (SOME (Short "::")) ("v2" "v1")) App OpnPlus ((App Opapp ((Var (Short "length")) (Var (Short "v1")))) (Lit 1))))))) (Dlet (0 0 0 0 0 0) "null" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "::")) ("v2" "v1")) App OpbLt ((Lit 0) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("revAppend" "v4" Fun "v3" (Mat (Var (Short "v4")) (((Pcon (SOME (Short "nil")) nil) Var (Short "v3")) ((Pcon (SOME (Short "::")) ("v2" "v1")) App Opapp ((App Opapp ((Var (Short "revAppend")) (Var (Short "v1")))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v3"))))))))))) (Dlet (0 0 0 0 0 0) "rev" (Fun "v1" (App Opapp ((App Opapp ((Var (Short "revAppend")) (Var (Short "v1")))) (Con (SOME (Short "nil")) nil))))) (Dlet (0 0 0 0 0 0) "@" (Fun "v1" (Fun "v2" (App ListAppend ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "hd" (Fun "x1" (Mat (Var (Short "x1")) (((Pcon (SOME (Short "nil")) nil) Raise (Con (SOME (Short "Bind")) nil)) ((Pcon (SOME (Short "::")) ("v2" "v1")) Var (Short "v2")))))) (Dlet (0 0 0 0 0 0) "tl" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "TL_hol" (Fun "x1" (Mat (Var (Short "x1")) (((Pcon (SOME (Short "nil")) nil) Raise (Con (SOME (Short "Bind")) nil)) ((Pcon (SOME (Short "::")) ("v2" "v1")) Var (Short "v1")))))) (Dletrec (0 0 0 0 0 0) (("last" "x1" Mat (Var (Short "x1")) (((Pcon (SOME (Short "nil")) nil) Raise (Con (SOME (Short "Bind")) nil)) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Equality ((Var (Short "v1")) (Con (SOME (Short "nil")) nil))) (Var (Short "v2")) (App Opapp ((Var (Short "last")) (Var (Short "v1"))))))))) (Dlet (0 0 0 0 0 0) "getItem" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con (SOME (Short "SOME")) ((Con NONE ((Var (Short "v2")) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("nth" "v1" Fun "v2" (If (App Equality ((Var (Short "v2")) (Lit 0))) (App Opapp ((Var (Short "hd")) (Var (Short "v1")))) (App Opapp ((App Opapp ((Var (Short "nth")) (App Opapp ((Var (Short "TL_hol")) (Var (Short "v1")))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))) (Dletrec (0 0 0 0 0 0) (("take" "v3" Fun "v4" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Equality ((Var (Short "v4")) (Lit 0))) (Con (SOME (Short "nil")) nil) (Con (SOME (Short "::")) ((Var (Short "v2")) (App Opapp ((App Opapp ((Var (Short "take")) (Var (Short "v1")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))))) (Dletrec (0 0 0 0 0 0) (("drop" "v3" Fun "v4" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Equality ((Var (Short "v4")) (Lit 0))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v1")))) (App Opapp ((App Opapp ((Var (Short "drop")) (Var (Short "v1")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))) (Dletrec (0 0 0 0 0 0) (("concat" "v3" Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) App ListAppend ((Var (Short "v2")) (App Opapp ((Var (Short "concat")) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("map" "v3" Fun "v4" (Mat (Var (Short "v4")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con (SOME (Short "::")) ((App Opapp ((Var (Short "v3")) (Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "map")) (Var (Short "v3")))) (Var (Short "v1"))))))))))) (Dletrec (0 0 0 0 0 0) (("mapi_aux" "v3" Fun "v4" (Fun "v5" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con (SOME (Short "::")) ((App Opapp ((App Opapp ((Var (Short "v3")) (Var (Short "v4")))) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "mapi_aux")) (Var (Short "v3")))) (App OpnPlus ((Var (Short "v4")) (Lit 1))))) (Var (Short "v1")))))))))))) (Dlet (0 0 0 0 0 0) "mapi" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((Var (Short "mapi_aux")) (Var (Short "v1")))) (Lit 0))) (Var (Short "v2"))))))) (Dletrec (0 0 0 0 0 0) (("mapPartial" "v4" Fun "v5" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v3" "v2")) Mat (App Opapp ((Var (Short "v4")) (Var (Short "v3")))) (((Pcon (SOME (Short "NONE")) nil) App Opapp ((App Opapp ((Var (Short "mapPartial")) (Var (Short "v4")))) (Var (Short "v2")))) ((Pcon (SOME (Short "SOME")) ("v1")) Con (SOME (Short "::")) ((Var (Short "v1")) (App Opapp ((App Opapp ((Var (Short "mapPartial")) (Var (Short "v4")))) (Var (Short "v2"))))))))))))) (Dletrec (0 0 0 0 0 0) (("app" "f" Fun "ls" (Mat (Var (Short "ls")) (((Pcon (SOME (Short "nil")) nil) Con NONE nil) ((Pcon (SOME (Short "::")) ("x" "xs")) Let NONE (App Opapp ((Var (Short "f")) (Var (Short "x")))) (App Opapp ((App Opapp ((Var (Short "app")) (Var (Short "f")))) (Var (Short "xs")))))))))) (Dletrec (0 0 0 0 0 0) (("find" "v3" Fun "v4" (Mat (Var (Short "v4")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Opapp ((Var (Short "v3")) (Var (Short "v2")))) (Con (SOME (Short "SOME")) ((Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "find")) (Var (Short "v3")))) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("filter" "v3" Fun "v4" (Mat (Var (Short "v4")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Opapp ((Var (Short "v3")) (Var (Short "v2")))) (Con (SOME (Short "::")) ((Var (Short "v2")) (App Opapp ((App Opapp ((Var (Short "filter")) (Var (Short "v3")))) (Var (Short "v1")))))) (App Opapp ((App Opapp ((Var (Short "filter")) (Var (Short "v3")))) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("partition_aux" "v3" Fun "v5" (Fun "v6" (Fun "v4" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Con NONE ((App Opapp ((Var (Short "rev")) (Var (Short "v6")))) (App Opapp ((Var (Short "rev")) (Var (Short "v4")))))) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Opapp ((Var (Short "v3")) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "partition_aux")) (Var (Short "v3")))) (Var (Short "v1")))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v6")))))) (Var (Short "v4")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "partition_aux")) (Var (Short "v3")))) (Var (Short "v1")))) (Var (Short "v6")))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v4")))))))))))))) (Dlet (0 0 0 0 0 0) "partition" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "partition_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "nil")) nil))) (Con (SOME (Short "nil")) nil)))))) (Dletrec (0 0 0 0 0 0) (("foldl" "v4" Fun "v3" (Fun "v5" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Var (Short "v3")) ((Pcon (SOME (Short "::")) ("v2" "v1")) App Opapp ((App Opapp ((App Opapp ((Var (Short "foldl")) (Var (Short "v4")))) (App Opapp ((App Opapp ((Var (Short "v4")) (Var (Short "v3")))) (Var (Short "v2")))))) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("foldli_aux" "v4" Fun "v3" (Fun "v5" (Fun "v6" (Mat (Var (Short "v6")) (((Pcon (SOME (Short "nil")) nil) Var (Short "v3")) ((Pcon (SOME (Short "::")) ("v2" "v1")) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldli_aux")) (Var (Short "v4")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "v4")) (Var (Short "v5")))) (Var (Short "v2")))) (Var (Short "v3")))))) (App OpnPlus ((Var (Short "v5")) (Lit 1))))) (Var (Short "v1"))))))))))) (Dlet (0 0 0 0 0 0) "foldli" (Fun "v2" (Fun "v1" (Fun "v3" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldli_aux")) (Var (Short "v2")))) (Var (Short "v1")))) (Lit 0))) (Var (Short "v3")))))))) (Dletrec (0 0 0 0 0 0) (("foldr" "v4" Fun "v3" (Fun "v5" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Var (Short "v3")) ((Pcon (SOME (Short "::")) ("v2" "v1")) App Opapp ((App Opapp ((Var (Short "v4")) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "foldr")) (Var (Short "v4")))) (Var (Short "v3")))) (Var (Short "v1")))))))))))) (Dletrec (0 0 0 0 0 0) (("foldri" "v5" Fun "v4" (Fun "v6" (Mat (Var (Short "v6")) (((Pcon (SOME (Short "nil")) nil) Var (Short "v4")) ((Pcon (SOME (Short "::")) ("v3" "v2")) App Opapp ((App Opapp ((App Opapp ((Var (Short "v5")) (Lit 0))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "foldri")) (Fun "v1" (App Opapp ((Var (Short "v5")) (App OpnPlus ((Var (Short "v1")) (Lit 1)))))))) (Var (Short "v4")))) (Var (Short "v2")))))))))))) (Dletrec (0 0 0 0 0 0) (("exists" "v3" Fun "v4" (Mat (Var (Short "v4")) (((Pcon (SOME (Short "nil")) nil) App OpbLt ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "::")) ("v2" "v1")) Log Or (App Opapp ((Var (Short "v3")) (Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "exists")) (Var (Short "v3")))) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("all" "v3" Fun "v4" (Mat (Var (Short "v4")) (((Pcon (SOME (Short "nil")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "::")) ("v2" "v1")) Log And (App Opapp ((Var (Short "v3")) (Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "all")) (Var (Short "v3")))) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("snoc" "v4" Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "::")) ((Var (Short "v4")) (Con (SOME (Short "nil")) nil))) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con (SOME (Short "::")) ((Var (Short "v2")) (App Opapp ((App Opapp ((Var (Short "snoc")) (Var (Short "v4")))) (Var (Short "v1"))))))))))) (Dletrec (0 0 0 0 0 0) (("genlist_aux" "v1" Fun "v3" (Fun "v2" (If (App Equality ((Var (Short "v3")) (Lit 0))) (Var (Short "v2")) (App Opapp ((App Opapp ((App Opapp ((Var (Short "genlist_aux")) (Var (Short "v1")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Con (SOME (Short "::")) ((App Opapp ((Var (Short "v1")) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Var (Short "v2"))))))))))) (Dlet (0 0 0 0 0 0) "genlist" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((Var (Short "genlist_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "nil")) nil)))))) (Dletrec (0 0 0 0 0 0) (("tabulate_aux" "v8" Fun "v7" (Fun "v6" (Fun "v5" (Let (SOME "v4") (App OpbGeq ((Var (Short "v8")) (Var (Short "v7")))) (If (Var (Short "v4")) (App Opapp ((Var (Short "rev")) (Var (Short "v5")))) (Let (SOME "v3") (App Opapp ((Var (Short "v6")) (Var (Short "v8")))) (Let (SOME "v2") (App OpnPlus ((Var (Short "v8")) (Lit 1))) (Let (SOME "v1") (Con (SOME (Short "::")) ((Var (Short "v3")) (Var (Short "v5")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "tabulate_aux")) (Var (Short "v2")))) (Var (Short "v7")))) (Var (Short "v6")))) (Var (Short "v1")))))))))))))) (Dlet (0 0 0 0 0 0) "tabulate" (Fun "v3" (Fun "v2" (Let (SOME "v1") (Con (SOME (Short "nil")) nil) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "tabulate_aux")) (Lit 0))) (Var (Short "v3")))) (Var (Short "v2")))) (Var (Short "v1")))))))) (Dletrec (0 0 0 0 0 0) (("collate" "v7" Fun "v8" (Fun "v9" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "nil")) nil) Mat (Var (Short "v9")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "Equal")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con (SOME (Short "Less")) nil))) ((Pcon (SOME (Short "::")) ("v6" "v5")) Mat (Var (Short "v9")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "Greater")) nil) ((Pcon (SOME (Short "::")) ("v4" "v3")) If (App Equality ((App Opapp ((App Opapp ((Var (Short "v7")) (Var (Short "v6")))) (Var (Short "v4")))) (Con (SOME (Short "Equal")) nil))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "collate")) (Var (Short "v7")))) (Var (Short "v5")))) (Var (Short "v3")))) (App Opapp ((App Opapp ((Var (Short "v7")) (Var (Short "v6")))) (Var (Short "v4"))))))))))))) (Dletrec (0 0 0 0 0 0) (("zip" "v9" Mat (Var (Short "v9")) (((Pcon NONE ("v8" "v7")) Mat (Var (Short "v8")) (((Pcon (SOME (Short "nil")) nil) Mat (Var (Short "v7")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con (SOME (Short "nil")) nil))) ((Pcon (SOME (Short "::")) ("v6" "v5")) Mat (Var (Short "v7")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v4" "v3")) Con (SOME (Short "::")) ((Con NONE ((Var (Short "v6")) (Var (Short "v4")))) (App Opapp ((Var (Short "zip")) (Con NONE ((Var (Short "v5")) (Var (Short "v3")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("member" "v4" Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) App OpbLt ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "::")) ("v2" "v1")) Log Or (App Equality ((Var (Short "v4")) (Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "member")) (Var (Short "v4")))) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("length_aux" "v3" Fun "v4" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Var (Short "v4")) ((Pcon (SOME (Short "::")) ("v2" "v1")) App Opapp ((App Opapp ((Var (Short "length_aux")) (Var (Short "v1")))) (App OpnPlus ((Var (Short "v4")) (Lit 1)))))))))) (Dletrec (0 0 0 0 0 0) (("sum" "v3" Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Lit 0) ((Pcon (SOME (Short "::")) ("v2" "v1")) App OpnPlus ((Var (Short "v2")) (App Opapp ((Var (Short "sum")) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("unzip" "v3" Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) Con NONE ((Con (SOME (Short "nil")) nil) (Con (SOME (Short "nil")) nil))) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con NONE ((Con (SOME (Short "::")) ((App Opapp ((Var (Short "fst")) (Var (Short "v2")))) (App Opapp ((Var (Short "fst")) (App Opapp ((Var (Short "unzip")) (Var (Short "v1")))))))) (Con (SOME (Short "::")) ((App Opapp ((Var (Short "snd")) (Var (Short "v2")))) (App Opapp ((Var (Short "snd")) (App Opapp ((Var (Short "unzip")) (Var (Short "v1")))))))))))))) (Dlet (0 0 0 0 0 0) "pad_right" (Fun "v1" (Fun "v2" (Fun "v3" (App ListAppend ((Var (Short "v3")) (App Opapp ((App Opapp ((Var (Short "genlist")) (App Opapp ((Var (Short "k")) (Var (Short "v1")))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (App Opapp ((Var (Short "length")) (Var (Short "v3")))))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))) (Dlet (0 0 0 0 0 0) "pad_left" (Fun "v1" (Fun "v2" (Fun "v3" (App ListAppend ((App Opapp ((App Opapp ((Var (Short "genlist")) (App Opapp ((Var (Short "k")) (Var (Short "v1")))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (App Opapp ((Var (Short "length")) (Var (Short "v3")))))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Var (Short "v3")))))))) (Dletrec (0 0 0 0 0 0) (("all_distinct" "v3" Mat (Var (Short "v3")) (((Pcon (SOME (Short "nil")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "::")) ("v2" "v1")) Log And (App Equality ((App Opapp ((App Opapp ((Var (Short "member")) (Var (Short "v2")))) (Var (Short "v1")))) (App OpbLt ((Lit 0) (Lit 0))))) (App Opapp ((Var (Short "all_distinct")) (Var (Short "v1"))))))))) (Dletrec (0 0 0 0 0 0) (("isPrefix" "v5" Fun "v6" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "::")) ("v4" "v3")) Mat (Var (Short "v6")) (((Pcon (SOME (Short "nil")) nil) App OpbLt ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "::")) ("v2" "v1")) Log And (App Equality ((Var (Short "v4")) (Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "isPrefix")) (Var (Short "v3")))) (Var (Short "v1")))))))))))) (Dletrec (0 0 0 0 0 0) (("front" "x1" Mat (Var (Short "x1")) (((Pcon (SOME (Short "nil")) nil) Raise (Con (SOME (Short "Bind")) nil)) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Equality ((Var (Short "v1")) (Con (SOME (Short "nil")) nil))) (Con (SOME (Short "nil")) nil) (Con (SOME (Short "::")) ((Var (Short "v2")) (App Opapp ((Var (Short "front")) (Var (Short "v1"))))))))))) (Dletrec (0 0 0 0 0 0) (("splitAtPki" "v6" Fun "v7" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "nil")) nil) App Opapp ((App Opapp ((Var (Short "v7")) (Con (SOME (Short "nil")) nil))) (Con (SOME (Short "nil")) nil))) ((Pcon (SOME (Short "::")) ("v5" "v4")) If (App Opapp ((App Opapp ((Var (Short "v6")) (Lit 0))) (Var (Short "v5")))) (App Opapp ((App Opapp ((Var (Short "v7")) (Con (SOME (Short "nil")) nil))) (Con (SOME (Short "::")) ((Var (Short "v5")) (Var (Short "v4")))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "splitAtPki")) (App Opapp ((App Opapp ((Var (Short "o")) (Var (Short "v6")))) (Fun "v1" (App OpnPlus ((Var (Short "v1")) (Lit 1)))))))) (Fun "v3" (Fun "v2" (App Opapp ((App Opapp ((Var (Short "v7")) (Con (SOME (Short "::")) ((Var (Short "v5")) (Var (Short "v3")))))) (Var (Short "v2")))))))) (Var (Short "v4"))))))))))) (Dletrec (0 0 0 0 0 0) (("update" "v8" Fun "v9" (Fun "v7" (Mat (Con NONE ((Var (Short "v9")) (Var (Short "v7")))) (((Pcon NONE ("v6" "v5")) If (App Equality ((Var (Short "v6")) (Lit 0))) (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con (SOME (Short "::")) ((Var (Short "v8")) (Var (Short "v1")))))) (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v4" "v3")) Con (SOME (Short "::")) ((Var (Short "v4")) (App Opapp ((App Opapp ((App Opapp ((Var (Short "update")) (Var (Short "v8")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v6")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Var (Short "v3"))))))))))))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("part" "v3" Fun "v6" (Fun "v4" (Fun "v5" (Mat (Var (Short "v6")) (((Pcon (SOME (Short "nil")) nil) Con NONE ((Var (Short "v4")) (Var (Short "v5")))) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Opapp ((Var (Short "v3")) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "part")) (Var (Short "v3")))) (Var (Short "v1")))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v4")))))) (Var (Short "v5")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "part")) (Var (Short "v3")))) (Var (Short "v1")))) (Var (Short "v4")))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v5"))))))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "partition" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "part")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "nil")) nil))) (Con (SOME (Short "nil")) nil))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("qsort" "v7" Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v6" "v5")) Let (SOME "v3") (App Opapp ((App Opapp ((Var (Short "partition")) (Fun "v4" (App Opapp ((App Opapp ((Var (Short "v7")) (Var (Short "v4")))) (Var (Short "v6"))))))) (Var (Short "v5")))) (Mat (Var (Short "v3")) (((Pcon NONE ("v2" "v1")) App ListAppend ((App ListAppend ((App Opapp ((App Opapp ((Var (Short "qsort")) (Var (Short "v7")))) (Var (Short "v2")))) (Con (SOME (Short "::")) ((Var (Short "v6")) (Con (SOME (Short "nil")) nil))))) (App Opapp ((App Opapp ((Var (Short "qsort")) (Var (Short "v7")))) (Var (Short "v1"))))))))))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("alookup" "v5" Fun "v6" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "::")) ("v4" "v3")) Mat (Var (Short "v4")) (((Pcon NONE ("v2" "v1")) If (App Equality ((Var (Short "v2")) (Var (Short "v6")))) (Con (SOME (Short "SOME")) ((Var (Short "v1")))) (App Opapp ((App Opapp ((Var (Short "alookup")) (Var (Short "v3")))) (Var (Short "v6"))))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "aupdate" (Fun "v3" (Fun "v4" (Mat (Var (Short "v4")) (((Pcon NONE ("v2" "v1")) Con (SOME (Short "::")) ((Con NONE ((Var (Short "v2")) (Var (Short "v1")))) (Var (Short "v3")))))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("aevery_aux" "v5" Fun "v6" (Fun "v7" (Mat (Var (Short "v7")) (((Pcon (SOME (Short "nil")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "::")) ("v4" "v3")) Mat (Var (Short "v4")) (((Pcon NONE ("v2" "v1")) If (App Opapp ((App Opapp ((Var (Long "List" (Short "member"))) (Var (Short "v2")))) (Var (Short "v5")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "aevery_aux")) (Var (Short "v5")))) (Var (Short "v6")))) (Var (Short "v3")))) (Log And (App Opapp ((Var (Short "v6")) (Con NONE ((Var (Short "v2")) (Var (Short "v1")))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "aevery_aux")) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v5")))))) (Var (Short "v6")))) (Var (Short "v3"))))))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "aevery" (Fun "v1" (App Opapp ((App Opapp ((Var (Short "aevery_aux")) (Con (SOME (Short "nil")) nil))) (Var (Short "v1"))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("amap" "v5" Fun "v6" (Mat (Var (Short "v6")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v4" "v3")) Mat (Var (Short "v4")) (((Pcon NONE ("v2" "v1")) Con (SOME (Short "::")) ((Con NONE ((Var (Short "v2")) (App Opapp ((Var (Short "v5")) (Var (Short "v1")))))) (App Opapp ((App Opapp ((Var (Short "amap")) (Var (Short "v5")))) (Var (Short "v3")))))))))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("adel" "v5" Fun "v6" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "::")) ("v4" "v3")) Mat (Var (Short "v4")) (((Pcon NONE ("v2" "v1")) If (App Equality ((Var (Short "v2")) (Var (Short "v6")))) (App Opapp ((App Opapp ((Var (Short "adel")) (Var (Short "v3")))) (Var (Short "v6")))) (Con (SOME (Short "::")) ((Con NONE ((Var (Short "v2")) (Var (Short "v1")))) (App Opapp ((App Opapp ((Var (Short "adel")) (Var (Short "v3")))) (Var (Short "v6"))))))))))))))) 
(Tmod "Vector" NONE ((Dtabbrev (0 0 0 0 0 0) ("'a") "vector" (Tapp ((Tvar "'a")) TC_vector)) (Dlet (0 0 0 0 0 0) "fromList" (Fun "v1" (App VfromList ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "length" (Fun "v1" (App Vlength ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "sub" (Fun "v1" (Fun "v2" (App Vsub ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "tabulate" (Fun "v2" (Fun "v1" (App VfromList ((App Opapp ((App Opapp ((Var (Long "List" (Short "genlist"))) (Var (Short "v1")))) (Var (Short "v2"))))))))) (Dletrec (0 0 0 0 0 0) (("tolist_aux" "v2" Fun "v1" (If (App OpbLeq ((App Vlength ((Var (Short "v2")))) (Var (Short "v1")))) (Con (SOME (Short "nil")) nil) (Con (SOME (Short "::")) ((App Vsub ((Var (Short "v2")) (Var (Short "v1")))) (App Opapp ((App Opapp ((Var (Short "tolist_aux")) (Var (Short "v2")))) (App OpnPlus ((Var (Short "v1")) (Lit 1))))))))))) (Dlet (0 0 0 0 0 0) "toList" (Fun "v1" (App Opapp ((App Opapp ((Var (Short "tolist_aux")) (Var (Short "v1")))) (Lit 0))))) (Dlet (0 0 0 0 0 0) "update" (Fun "v2" (Fun "v1" (Fun "v3" (App VfromList ((App Opapp ((App Opapp ((App Opapp ((Var (Long "List" (Short "update"))) (Var (Short "v3")))) (Var (Short "v1")))) (App Opapp ((Var (Short "toList")) (Var (Short "v2")))))))))))) (Dlet (0 0 0 0 0 0) "concat" (Fun "v1" (App VfromList ((App Opapp ((Var (Long "List" (Short "concat"))) (App Opapp ((App Opapp ((Var (Long "List" (Short "map"))) (Var (Short "toList")))) (Var (Short "v1")))))))))) (Dlet (0 0 0 0 0 0) "map" (Fun "v2" (Fun "v1" (App VfromList ((App Opapp ((App Opapp ((Var (Long "List" (Short "map"))) (Var (Short "v1")))) (App Opapp ((Var (Short "toList")) (Var (Short "v2"))))))))))) (Dlet (0 0 0 0 0 0) "mapi" (Fun "v2" (Fun "v1" (App VfromList ((App Opapp ((App Opapp ((App Opapp ((Var (Long "List" (Short "mapi_aux"))) (Var (Short "v1")))) (Lit 0))) (App Opapp ((Var (Short "toList")) (Var (Short "v2"))))))))))) (Dletrec (0 0 0 0 0 0) (("foldli_aux_1" "v2" Fun "v1" (Fun "v5" (Fun "v3" (Fun "v4" (If (App Equality ((Var (Short "v4")) (Lit 0))) (Var (Short "v1")) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldli_aux_1")) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "v2")) (Var (Short "v3")))) (App Vsub ((Var (Short "v5")) (Var (Short "v3")))))) (Var (Short "v1")))))) (Var (Short "v5")))) (App OpnPlus ((Var (Short "v3")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))))))) (Dlet (0 0 0 0 0 0) "foldli" (Fun "v2" (Fun "v1" (Fun "v3" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldli_aux_1")) (Var (Short "v2")))) (Var (Short "v1")))) (Var (Short "v3")))) (Lit 0))) (App Vlength ((Var (Short "v3")))))))))) (Dletrec (0 0 0 0 0 0) (("foldl_aux" "v2" Fun "v1" (Fun "v5" (Fun "v3" (Fun "v4" (If (App Equality ((Var (Short "v4")) (Lit 0))) (Var (Short "v1")) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldl_aux")) (Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "v2")) (Var (Short "v1")))) (App Vsub ((Var (Short "v5")) (Var (Short "v3")))))))) (Var (Short "v5")))) (App OpnPlus ((Var (Short "v3")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))))))) (Dlet (0 0 0 0 0 0) "foldl" (Fun "v2" (Fun "v1" (Fun "v3" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldl_aux")) (Var (Short "v2")))) (Var (Short "v1")))) (Var (Short "v3")))) (Lit 0))) (App Vlength ((Var (Short "v3")))))))))) (Dletrec (0 0 0 0 0 0) (("foldri_aux" "v2" Fun "v1" (Fun "v4" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (Var (Short "v1")) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldri_aux")) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "v2")) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App Vsub ((Var (Short "v4")) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))) (Var (Short "v1")))))) (Var (Short "v4")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))) (Dlet (0 0 0 0 0 0) "foldri" (Fun "v2" (Fun "v1" (Fun "v3" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldri_aux")) (Var (Short "v2")))) (Var (Short "v1")))) (Var (Short "v3")))) (App Vlength ((Var (Short "v3")))))))))) (Dletrec (0 0 0 0 0 0) (("foldr_aux" "v2" Fun "v1" (Fun "v4" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (Var (Short "v1")) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldr_aux")) (Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "v2")) (App Vsub ((Var (Short "v4")) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))) (Var (Short "v1")))))) (Var (Short "v4")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))) (Dlet (0 0 0 0 0 0) "foldr" (Fun "v2" (Fun "v1" (Fun "v3" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldr_aux")) (Var (Short "v2")))) (Var (Short "v1")))) (Var (Short "v3")))) (App Vlength ((Var (Short "v3")))))))))) (Dletrec (0 0 0 0 0 0) (("findi_aux" "v1" Fun "v4" (Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (Con (SOME (Short "NONE")) nil) (If (App Opapp ((App Opapp ((Var (Short "v1")) (Var (Short "v2")))) (App Vsub ((Var (Short "v4")) (Var (Short "v2")))))) (Con (SOME (Short "SOME")) ((Con NONE ((Var (Short "v2")) (App Vsub ((Var (Short "v4")) (Var (Short "v2")))))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "findi_aux")) (Var (Short "v1")))) (Var (Short "v4")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))))))) (Dlet (0 0 0 0 0 0) "findi" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "findi_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 0))) (App Vlength ((Var (Short "v2"))))))))) (Dletrec (0 0 0 0 0 0) (("find_aux" "v1" Fun "v4" (Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (Con (SOME (Short "NONE")) nil) (If (App Opapp ((Var (Short "v1")) (App Vsub ((Var (Short "v4")) (Var (Short "v2")))))) (Con (SOME (Short "SOME")) ((App Vsub ((Var (Short "v4")) (Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "find_aux")) (Var (Short "v1")))) (Var (Short "v4")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))))))) (Dlet (0 0 0 0 0 0) "find" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "find_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 0))) (App Vlength ((Var (Short "v2"))))))))) (Dletrec (0 0 0 0 0 0) (("exists_aux" "v1" Fun "v4" (Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (App OpbLt ((Lit 0) (Lit 0))) (If (App Opapp ((Var (Short "v1")) (App Vsub ((Var (Short "v4")) (Var (Short "v2")))))) (App OpbLeq ((Lit 0) (Lit 0))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "exists_aux")) (Var (Short "v1")))) (Var (Short "v4")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))))))) (Dlet (0 0 0 0 0 0) "exists" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "exists_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 0))) (App Vlength ((Var (Short "v2"))))))))) (Dletrec (0 0 0 0 0 0) (("all_aux" "v1" Fun "v4" (Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (App OpbLeq ((Lit 0) (Lit 0))) (If (App Opapp ((Var (Short "v1")) (App Vsub ((Var (Short "v4")) (Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "all_aux")) (Var (Short "v1")))) (Var (Short "v4")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App OpbLt ((Lit 0) (Lit 0)))))))))) (Dlet (0 0 0 0 0 0) "all" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "all_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 0))) (App Vlength ((Var (Short "v2"))))))))) (Dletrec (0 0 0 0 0 0) (("collate_aux" "v1" Fun "v5" (Fun "v6" (Fun "v2" (Fun "v3" (Fun "v4" (If (App Equality ((Var (Short "v4")) (Lit 0))) (Var (Short "v3")) (If (App Equality ((App Opapp ((App Opapp ((Var (Short "v1")) (App Vsub ((Var (Short "v5")) (Var (Short "v2")))))) (App Vsub ((Var (Short "v6")) (Var (Short "v2")))))) (Con (SOME (Short "Equal")) nil))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux")) (Var (Short "v1")))) (Var (Short "v5")))) (Var (Short "v6")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Var (Short "v3")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App Opapp ((App Opapp ((Var (Short "v1")) (App Vsub ((Var (Short "v5")) (Var (Short "v2")))))) (App Vsub ((Var (Short "v6")) (Var (Short "v2"))))))))))))))) (Dlet (0 0 0 0 0 0) "collate" (Fun "v1" (Fun "v2" (Fun "v3" (If (App OpbLt ((App Vlength ((Var (Short "v2")))) (App Vlength ((Var (Short "v3")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v3")))) (Lit 0))) (Con (SOME (Short "Less")) nil))) (App Vlength ((Var (Short "v2")))))) (If (App OpbLt ((App Vlength ((Var (Short "v3")))) (App Vlength ((Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v3")))) (Lit 0))) (Con (SOME (Short "Greater")) nil))) (App Vlength ((Var (Short "v3")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v3")))) (Lit 0))) (Con (SOME (Short "Equal")) nil))) (App Vlength ((Var (Short "v3")))))))))))))) 
(Tmod "String" NONE ((Dtabbrev (0 0 0 0 0 0) nil "string" (Tapp nil TC_string)) (Dlet (0 0 0 0 0 0) "sub" (Fun "v1" (Fun "v2" (App Strsub ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "implode" (Fun "v1" (App Implode ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "size" (Fun "v1" (App Strlen ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "concat" (Fun "v1" (App Strcat ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "substring" (Fun "v1" (Fun "v2" (Fun "v3" (App CopyStrStr ((Var (Short "v1")) (Var (Short "v2")) (Var (Short "v3")))))))) (Dlet (0 0 0 0 0 0) "strcat" (Fun "v1" (Fun "v2" (App Strcat ((Con (SOME (Short "::")) ((Var (Short "v1")) (Con (SOME (Short "::")) ((Var (Short "v2")) (Con (SOME (Short "nil")) nil)))))))))) (Dlet (0 0 0 0 0 0) "^" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((Var (Short "strcat")) (Var (Short "v1")))) (Var (Short "v2"))))))) (Dletrec (0 0 0 0 0 0) (("explode_aux" "v3" Fun "v1" (Fun "v2" (If (App Equality ((Var (Short "v2")) (Lit 0))) (Con (SOME (Short "nil")) nil) (Con (SOME (Short "::")) ((App Strsub ((Var (Short "v3")) (Var (Short "v1")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "explode_aux")) (Var (Short "v3")))) (App OpnPlus ((Var (Short "v1")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))))))) (Dlet (0 0 0 0 0 0) "explode" (Fun "v1" (App Opapp ((App Opapp ((App Opapp ((Var (Short "explode_aux")) (Var (Short "v1")))) (Lit 0))) (App Strlen ((Var (Short "v1")))))))) (Dlet (0 0 0 0 0 0) "extract" (Fun "v4" (Fun "v2" (Fun "v3" (If (App OpbLeq ((App Strlen ((Var (Short "v4")))) (Var (Short "v2")))) (App Implode ((Con (SOME (Short "nil")) nil))) (Mat (Var (Short "v3")) (((Pcon (SOME (Short "NONE")) nil) App CopyStrStr ((Var (Short "v4")) (Var (Short "v2")) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v4")))) (Var (Short "v2")))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) ((Pcon (SOME (Short "SOME")) ("v1")) App CopyStrStr ((Var (Short "v4")) (Var (Short "v2")) (App Opapp ((App Opapp ((Var (Short "min")) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v4")))) (Var (Short "v2")))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Var (Short "v1"))))))))))))) (Dletrec (0 0 0 0 0 0) (("concatwith_aux" "v3" Fun "v4" (Fun "v5" (Mat (Var (Short "v4")) (((Pcon (SOME (Short "nil")) nil) App Implode ((Con (SOME (Short "nil")) nil))) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (Var (Short "v5")) (App Opapp ((App Opapp ((Var (Short "strcat")) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "concatwith_aux")) (Var (Short "v3")))) (Var (Short "v1")))) (App OpbLt ((Lit 0) (Lit 0))))))) (App Opapp ((App Opapp ((Var (Short "strcat")) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "concatwith_aux")) (Var (Short "v3")))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v1")))))) (App OpbLeq ((Lit 0) (Lit 0)))))))))))))) (Dlet (0 0 0 0 0 0) "concatWith" (Fun "v2" (Fun "v1" (App Opapp ((App Opapp ((App Opapp ((Var (Short "concatwith_aux")) (Var (Short "v2")))) (Var (Short "v1")))) (App OpbLeq ((Lit 0) (Lit 0)))))))) (Dlet (0 0 0 0 0 0) "str" (Fun "v1" (App Implode ((Con (SOME (Short "::")) ((Var (Short "v1")) (Con (SOME (Short "nil")) nil))))))) (Dletrec (0 0 0 0 0 0) (("translate_aux" "v1" Fun "v4" (Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (Con (SOME (Short "nil")) nil) (Con (SOME (Short "::")) ((App Opapp ((Var (Short "v1")) (App Strsub ((Var (Short "v4")) (Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "translate_aux")) (Var (Short "v1")))) (Var (Short "v4")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))))) (Dlet (0 0 0 0 0 0) "translate" (Fun "v1" (Fun "v2" (App Implode ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "translate_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 0))) (App Strlen ((Var (Short "v2"))))))))))) (Dletrec (0 0 0 0 0 0) (("splitl_aux" "v1" Fun "v3" (Fun "v2" (If (Log And (App OpbLt ((Var (Short "v2")) (App Strlen ((Var (Short "v3")))))) (App Opapp ((Var (Short "v1")) (App Strsub ((Var (Short "v3")) (Var (Short "v2"))))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "splitl_aux")) (Var (Short "v1")))) (Var (Short "v3")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Con NONE ((App Opapp ((App Opapp ((App Opapp ((Var (Short "extract")) (Var (Short "v3")))) (Lit 0))) (Con (SOME (Short "SOME")) ((Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "extract")) (Var (Short "v3")))) (Var (Short "v2")))) (Con (SOME (Short "NONE")) nil)))))))))) (Dlet (0 0 0 0 0 0) "splitl" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((Var (Short "splitl_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 0)))))) (Dletrec (0 0 0 0 0 0) (("tokens_aux" "v3" Fun "v4" (Fun "v5" (Fun "v6" (Fun "v7" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "nil")) nil) If (App Equality ((Var (Short "v7")) (Lit 0))) (Con (SOME (Short "nil")) nil) (If (App Opapp ((Var (Short "v3")) (App Strsub ((Var (Short "v4")) (Var (Short "v6")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "tokens_aux")) (Var (Short "v3")))) (Var (Short "v4")))) (Con (SOME (Short "nil")) nil))) (App OpnPlus ((Var (Short "v6")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "tokens_aux")) (Var (Short "v3")))) (Var (Short "v4")))) (Con (SOME (Short "::")) ((App Strsub ((Var (Short "v4")) (Var (Short "v6")))) (Con (SOME (Short "nil")) nil))))) (App OpnPlus ((Var (Short "v6")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))) ((Pcon (SOME (Short "::")) ("v2" "v1")) If (App Equality ((Var (Short "v7")) (Lit 0))) (Con (SOME (Short "::")) ((App Implode ((App Opapp ((Var (Long "List" (Short "rev"))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v1")))))))) (Con (SOME (Short "nil")) nil))) (If (App Opapp ((Var (Short "v3")) (App Strsub ((Var (Short "v4")) (Var (Short "v6")))))) (Con (SOME (Short "::")) ((App Implode ((App Opapp ((Var (Long "List" (Short "rev"))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v1")))))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "tokens_aux")) (Var (Short "v3")))) (Var (Short "v4")))) (Con (SOME (Short "nil")) nil))) (App OpnPlus ((Var (Short "v6")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "tokens_aux")) (Var (Short "v3")))) (Var (Short "v4")))) (Con (SOME (Short "::")) ((App Strsub ((Var (Short "v4")) (Var (Short "v6")))) (Con (SOME (Short "::")) ((Var (Short "v2")) (Var (Short "v1")))))))) (App OpnPlus ((Var (Short "v6")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))))))) (Dlet (0 0 0 0 0 0) "tokens" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "tokens_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "nil")) nil))) (Lit 0))) (App Strlen ((Var (Short "v2"))))))))) (Dletrec (0 0 0 0 0 0) (("fields_aux" "v1" Fun "v4" (Fun "v5" (Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (Con (SOME (Short "::")) ((App Implode ((App Opapp ((Var (Long "List" (Short "rev"))) (Var (Short "v5")))))) (Con (SOME (Short "nil")) nil))) (If (App Opapp ((Var (Short "v1")) (App Strsub ((Var (Short "v4")) (Var (Short "v2")))))) (Con (SOME (Short "::")) ((App Implode ((App Opapp ((Var (Long "List" (Short "rev"))) (Var (Short "v5")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "fields_aux")) (Var (Short "v1")))) (Var (Short "v4")))) (Con (SOME (Short "nil")) nil))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "fields_aux")) (Var (Short "v1")))) (Var (Short "v4")))) (Con (SOME (Short "::")) ((App Strsub ((Var (Short "v4")) (Var (Short "v2")))) (Var (Short "v5")))))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))))) (Dlet (0 0 0 0 0 0) "fields" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "fields_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "nil")) nil))) (Lit 0))) (App Strlen ((Var (Short "v2"))))))))) (Dletrec (0 0 0 0 0 0) (("isstringthere_aux" "v2" Fun "v4" (Fun "v3" (Fun "v5" (Fun "v1" (If (App Equality ((Var (Short "v1")) (Lit 0))) (App OpbLeq ((Lit 0) (Lit 0))) (If (App Equality ((App Strsub ((Var (Short "v2")) (Var (Short "v3")))) (App Strsub ((Var (Short "v4")) (Var (Short "v5")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "isstringthere_aux")) (Var (Short "v2")))) (Var (Short "v4")))) (App OpnPlus ((Var (Short "v3")) (Lit 1))))) (App OpnPlus ((Var (Short "v5")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v1")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App OpbLt ((Lit 0) (Lit 0))))))))))) (Dlet (0 0 0 0 0 0) "isPrefix" (Fun "v1" (Fun "v2" (If (App OpbLeq ((App Strlen ((Var (Short "v1")))) (App Strlen ((Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "isstringthere_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 0))) (Lit 0))) (App Strlen ((Var (Short "v1")))))) (App OpbLt ((Lit 0) (Lit 0))))))) (Dlet (0 0 0 0 0 0) "isSuffix" (Fun "v1" (Fun "v2" (If (App OpbLeq ((App Strlen ((Var (Short "v1")))) (App Strlen ((Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "isstringthere_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Lit 0))) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v2")))) (App Strlen ((Var (Short "v1")))))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App Strlen ((Var (Short "v1")))))) (App OpbLt ((Lit 0) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("issubstring_aux" "v4" Fun "v5" (Fun "v1" (Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v3")) (Lit 0))) (App OpbLt ((Lit 0) (Lit 0))) (If (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "isstringthere_aux")) (Var (Short "v4")))) (Var (Short "v5")))) (Lit 0))) (Var (Short "v2")))) (Var (Short "v1")))) (App OpbLeq ((Lit 0) (Lit 0))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "issubstring_aux")) (Var (Short "v4")))) (Var (Short "v5")))) (Var (Short "v1")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))))))) (Dlet (0 0 0 0 0 0) "isSubstring" (Fun "v1" (Fun "v2" (If (App OpbLeq ((App Strlen ((Var (Short "v1")))) (App Strlen ((Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "issubstring_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (App Strlen ((Var (Short "v1")))))) (Lit 0))) (App OpnPlus ((Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v2")))) (App Strlen ((Var (Short "v1")))))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Lit 1))))) (App OpbLt ((Lit 0) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("compare_aux" "v3" Fun "v4" (Fun "v2" (Fun "v5" (Fun "v1" (If (App Equality ((Var (Short "v1")) (Lit 0))) (Var (Short "v2")) (If (App ChopbLt ((App Strsub ((Var (Short "v4")) (Var (Short "v5")))) (App Strsub ((Var (Short "v3")) (Var (Short "v5")))))) (Con (SOME (Short "Greater")) nil) (If (App ChopbLt ((App Strsub ((Var (Short "v3")) (Var (Short "v5")))) (App Strsub ((Var (Short "v4")) (Var (Short "v5")))))) (Con (SOME (Short "Less")) nil) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "compare_aux")) (Var (Short "v3")))) (Var (Short "v4")))) (Var (Short "v2")))) (App OpnPlus ((Var (Short "v5")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v1")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))))))))) (Dlet (0 0 0 0 0 0) "compare" (Fun "v1" (Fun "v2" (If (App OpbLt ((App Strlen ((Var (Short "v1")))) (App Strlen ((Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "compare_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "Less")) nil))) (Lit 0))) (App Strlen ((Var (Short "v1")))))) (If (App OpbLt ((App Strlen ((Var (Short "v2")))) (App Strlen ((Var (Short "v1")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "compare_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "Greater")) nil))) (Lit 0))) (App Strlen ((Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "compare_aux")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "Equal")) nil))) (Lit 0))) (App Strlen ((Var (Short "v2"))))))))))) (Dlet (0 0 0 0 0 0) "<" (Fun "v1" (Fun "v2" (App Equality ((App Opapp ((App Opapp ((Var (Short "compare")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "Less")) nil)))))) (Dlet (0 0 0 0 0 0) "<=" (Fun "v1" (Fun "v2" (App Equality ((App Equality ((App Opapp ((App Opapp ((Var (Short "compare")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "Greater")) nil))) (App OpbLt ((Lit 0) (Lit 0)))))))) (Dlet (0 0 0 0 0 0) ">=" (Fun "v1" (Fun "v2" (App Equality ((App Equality ((App Opapp ((App Opapp ((Var (Short "compare")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "Less")) nil))) (App OpbLt ((Lit 0) (Lit 0)))))))) (Dlet (0 0 0 0 0 0) ">" (Fun "v1" (Fun "v2" (App Equality ((App Opapp ((App Opapp ((Var (Short "compare")) (Var (Short "v1")))) (Var (Short "v2")))) (Con (SOME (Short "Greater")) nil)))))) (Dletrec (0 0 0 0 0 0) (("collate_aux_1" "v1" Fun "v5" (Fun "v6" (Fun "v3" (Fun "v2" (Fun "v4" (If (App Equality ((Var (Short "v4")) (Lit 0))) (Var (Short "v3")) (If (App Equality ((App Opapp ((App Opapp ((Var (Short "v1")) (App Strsub ((Var (Short "v5")) (Var (Short "v2")))))) (App Strsub ((Var (Short "v6")) (Var (Short "v2")))))) (Con (SOME (Short "Equal")) nil))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux_1")) (Var (Short "v1")))) (Var (Short "v5")))) (Var (Short "v6")))) (Var (Short "v3")))) (App OpnPlus ((Var (Short "v2")) (Lit 1))))) (Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App Opapp ((App Opapp ((Var (Short "v1")) (App Strsub ((Var (Short "v5")) (Var (Short "v2")))))) (App Strsub ((Var (Short "v6")) (Var (Short "v2"))))))))))))))) (Dlet (0 0 0 0 0 0) "collate" (Fun "v1" (Fun "v2" (Fun "v3" (If (App OpbLt ((App Strlen ((Var (Short "v2")))) (App Strlen ((Var (Short "v3")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux_1")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v3")))) (Con (SOME (Short "Less")) nil))) (Lit 0))) (App Strlen ((Var (Short "v2")))))) (If (App OpbLt ((App Strlen ((Var (Short "v3")))) (App Strlen ((Var (Short "v2")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux_1")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v3")))) (Con (SOME (Short "Greater")) nil))) (Lit 0))) (App Strlen ((Var (Short "v3")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux_1")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v3")))) (Con (SOME (Short "Equal")) nil))) (Lit 0))) (App Strlen ((Var (Short "v3")))))))))))))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) nil "int" (Tapp nil TC_int))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) nil "unit" (Tapp nil TC_tup))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) nil "string" (Tapp nil TC_string))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) ("'a") "ref" (Tapp ((Tvar "'a")) TC_ref))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) ("'a") "vector" (Tapp ((Tvar "'a")) TC_vector))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) ("'a") "array" (Tapp ((Tvar "'a")) TC_array))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) nil "exn" (Tapp nil TC_exn))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) nil "word" (Tapp nil TC_word64))) 
(Tdec (Dtabbrev (0 0 0 0 0 0) nil "char" (Tapp nil TC_char))) 
(Tdec (Dlet (0 0 0 0 0 0) "+" (Fun "v1" (Fun "v2" (App OpnPlus ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "-" (Fun "v1" (Fun "v2" (App OpnMinus ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "*" (Fun "v1" (Fun "v2" (App OpnTimes ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "div" (Fun "v1" (Fun "v2" (App OpnDivide ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "mod" (Fun "v1" (Fun "v2" (App OpnModulo ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "<" (Fun "v1" (Fun "v2" (App OpbLt ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) ">" (Fun "v1" (Fun "v2" (App OpbGt ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "<=" (Fun "v1" (Fun "v2" (App OpbLeq ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) ">=" (Fun "v1" (Fun "v2" (App OpbGeq ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "~" (Fun "v1" (App OpnMinus ((Lit 0) (Var (Short "v1"))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "@" (Fun "v1" (Fun "v2" (App ListAppend ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "=" (Fun "v1" (Fun "v2" (App Equality ((Var (Short "v1")) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "not" (Fun "v1" (App Equality ((Var (Short "v1")) (App OpbLt ((Lit 0) (Lit 0)))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "<>" (Fun "v1" (Fun "v2" (App Equality ((App Equality ((Var (Short "v1")) (Var (Short "v2")))) (App OpbLt ((Lit 0) (Lit 0))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "^" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((Var (Long "String" (Short "strcat"))) (Var (Short "v1")))) (Var (Short "v2")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) ":=" (Fun "x" (Fun "y" (App Opassign ((Var (Short "x")) (Var (Short "y")))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "!" (Fun "x" (App Opderef ((Var (Short "x"))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "ref" (Fun "x" (App Opref ((Var (Short "x"))))))) 
(Tmod "Int" NONE ((Dtabbrev (0 0 0 0 0 0) nil "int" (Tapp nil TC_int)) (Dlet (0 0 0 0 0 0) "+" (Fun "v1" (Fun "v2" (App OpnPlus ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "-" (Fun "v1" (Fun "v2" (App OpnMinus ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "*" (Fun "v1" (Fun "v2" (App OpnTimes ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "div" (Fun "v1" (Fun "v2" (App OpnDivide ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "mod" (Fun "v1" (Fun "v2" (App OpnModulo ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "<" (Fun "v1" (Fun "v2" (App OpbLt ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) ">" (Fun "v1" (Fun "v2" (App OpbGt ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "<=" (Fun "v1" (Fun "v2" (App OpbLeq ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) ">=" (Fun "v1" (Fun "v2" (App OpbGeq ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "~" (Fun "v1" (App OpnMinus ((Lit 0) (Var (Short "v1")))))) (Dletrec (0 0 0 0 0 0) (("zero_pad" "v2" Fun "v1" (If (App Equality ((Var (Short "v2")) (Lit 0))) (Var (Short "v1")) (App Opapp ((App Opapp ((Var (Short "zero_pad")) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Con (SOME (Short "::")) ((Lit (char "0")) (Var (Short "v1")))))))))) (Dlet (0 0 0 0 0 0) "tochar" (Fun "v1" (If (App OpbLt ((Var (Short "v1")) (Lit 10))) (App Chr ((App OpnPlus ((App Ord ((Lit (char "0")))) (Var (Short "v1")))))) (App Chr ((Let (SOME "k") (App OpnMinus ((App OpnPlus ((App Ord ((Lit (char "A")))) (Var (Short "v1")))) (Lit 10))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))) (Dletrec (0 0 0 0 0 0) (("simple_tochars" "v3" Fun "v2" (Fun "v1" (If (App OpbLt ((Var (Short "v2")) (Lit 10))) (App Opapp ((App Opapp ((Var (Short "zero_pad")) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Con (SOME (Short "::")) ((App Opapp ((Var (Short "tochar")) (Var (Short "v2")))) (Var (Short "v1")))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "simple_tochars")) (Let (SOME "k") (App OpnMinus ((Var (Short "v3")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App OpnDivide ((Var (Short "v2")) (Lit 10))))) (Con (SOME (Short "::")) ((App Opapp ((Var (Short "tochar")) (App OpnModulo ((Var (Short "v2")) (Lit 10))))) (Var (Short "v1"))))))))))) (Dletrec (0 0 0 0 0 0) (("tochars" "v2" Fun "v3" (Fun "v1" (If (App Equality ((Var (Short "v3")) (Lit 0))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "simple_tochars")) (Lit 0))) (Var (Short "v2")))) (Var (Short "v1")))) (If (App OpbLt ((Var (Short "v3")) (Lit 100000000))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "simple_tochars")) (Lit 0))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "simple_tochars")) (Lit 8))) (Var (Short "v2")))) (Var (Short "v1")))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "tochars")) (App OpnModulo ((Var (Short "v3")) (Lit 100000000))))) (App OpnDivide ((Var (Short "v3")) (Lit 100000000))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "simple_tochars")) (Lit 8))) (Var (Short "v2")))) (Var (Short "v1")))))))))))) (Dlet (0 0 0 0 0 0) "toString" (Fun "v1" (If (Log And (App OpbLeq ((Lit 0) (Var (Short "v1")))) (App OpbLt ((Var (Short "v1")) (Lit 10)))) (App Opapp ((Var (Long "String" (Short "str"))) (App Opapp ((Var (Short "tochar")) (Let (SOME "k") (Var (Short "v1")) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (App OpnMinus ((Lit 0) (Var (Short "k")))) (Var (Short "k")))))))) (App Implode ((App ListAppend ((If (App OpbLt ((Var (Short "v1")) (Lit 0))) (Con (SOME (Short "::")) ((Lit (char "~")) (Con (SOME (Short "nil")) nil))) (Con (SOME (Short "nil")) nil)) (App Opapp ((App Opapp ((App Opapp ((Var (Short "tochars")) (App OpnModulo ((Let (SOME "k") (Var (Short "v1")) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (App OpnMinus ((Lit 0) (Var (Short "k")))) (Var (Short "k")))) (Lit 100000000))))) (App OpnDivide ((Let (SOME "k") (Var (Short "v1")) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (App OpnMinus ((Lit 0) (Var (Short "k")))) (Var (Short "k")))) (Lit 100000000))))) (Con (SOME (Short "nil")) nil)))))))))) (Dlet (0 0 0 0 0 0) "fromchar_unsafe" (Fun "v1" (Let (SOME "k") (App OpnMinus ((App Ord ((Var (Short "v1")))) (App Ord ((Lit (char "0")))))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Dletrec (0 0 0 0 0 0) (("fromchars_range_unsafe" "v1" Fun "v2" (Fun "v3" (If (App Equality ((Var (Short "v2")) (Lit 0))) (Lit 0) (App OpnPlus ((App OpnTimes ((App Opapp ((App Opapp ((App Opapp ((Var (Short "fromchars_range_unsafe")) (Var (Short "v1")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Var (Short "v3")))) (Lit 10))) (App Opapp ((Var (Short "fromchar_unsafe")) (App Strsub ((Var (Short "v3")) (App OpnPlus ((Var (Short "v1")) (Let (SOME "k") (App OpnMinus ((Var (Short "v2")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))))))))))))) (Dletrec (0 0 0 0 0 0) (("fromchars_unsafe" "v4" Fun "v5" (If (App Equality ((Var (Short "v4")) (Lit 0))) (Lit 0) (If (App OpbLeq ((App OpnPlus ((Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Lit 1))) (Lit 8))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "fromchars_range_unsafe")) (Lit 0))) (App OpnPlus ((Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Lit 1))))) (Var (Short "v5")))) (Let (SOME "v3") (Let (SOME "k") (App OpnMinus ((App OpnPlus ((Let (SOME "k") (App OpnMinus ((Var (Short "v4")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Lit 1))) (Lit 8))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Let (SOME "v2") (App OpnTimes ((App Opapp ((App Opapp ((Var (Short "fromchars_unsafe")) (Var (Short "v3")))) (Var (Short "v5")))) (Lit 100000000))) (Let (SOME "v1") (App Opapp ((App Opapp ((App Opapp ((Var (Short "fromchars_range_unsafe")) (Var (Short "v3")))) (Lit 8))) (Var (Short "v5")))) (App OpnPlus ((Var (Short "v2")) (Var (Short "v1")))))))))))) (Dlet (0 0 0 0 0 0) "fromstring_unsafe" (Fun "v1" (If (App Equality ((App Strlen ((Var (Short "v1")))) (Lit 0))) (Lit 0) (If (App Equality ((App Strsub ((Var (Short "v1")) (Lit 0))) (Lit (char "~")))) (App OpnMinus ((Lit 0) (App Opapp ((App Opapp ((Var (Short "fromchars_unsafe")) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v1")))) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App CopyStrStr ((Var (Short "v1")) (Lit 1) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v1")))) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))) (App Opapp ((App Opapp ((Var (Short "fromchars_unsafe")) (App Strlen ((Var (Short "v1")))))) (Var (Short "v1")))))))) (Dlet (0 0 0 0 0 0) "fromchar" (Fun "v1" (If (App Equality ((Var (Short "v1")) (Lit (char "0")))) (Con (SOME (Short "SOME")) ((Lit 0))) (If (App Equality ((Var (Short "v1")) (Lit (char "1")))) (Con (SOME (Short "SOME")) ((Lit 1))) (If (App Equality ((Var (Short "v1")) (Lit (char "2")))) (Con (SOME (Short "SOME")) ((Lit 2))) (If (App Equality ((Var (Short "v1")) (Lit (char "3")))) (Con (SOME (Short "SOME")) ((Lit 3))) (If (App Equality ((Var (Short "v1")) (Lit (char "4")))) (Con (SOME (Short "SOME")) ((Lit 4))) (If (App Equality ((Var (Short "v1")) (Lit (char "5")))) (Con (SOME (Short "SOME")) ((Lit 5))) (If (App Equality ((Var (Short "v1")) (Lit (char "6")))) (Con (SOME (Short "SOME")) ((Lit 6))) (If (App Equality ((Var (Short "v1")) (Lit (char "7")))) (Con (SOME (Short "SOME")) ((Lit 7))) (If (App Equality ((Var (Short "v1")) (Lit (char "8")))) (Con (SOME (Short "SOME")) ((Lit 8))) (If (App Equality ((Var (Short "v1")) (Lit (char "9")))) (Con (SOME (Short "SOME")) ((Lit 9))) (Con (SOME (Short "NONE")) nil))))))))))))) (Dletrec (0 0 0 0 0 0) (("fromchars_range" "v6" Fun "v7" (Fun "v8" (If (App Equality ((Var (Short "v7")) (Lit 0))) (Con (SOME (Short "SOME")) ((Lit 0))) (Let (SOME "v4") (App Opapp ((App Opapp ((Var (Long "Option" (Short "map"))) (Fun "v5" (App OpnTimes ((Lit 10) (Var (Short "v5"))))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "fromchars_range")) (Var (Short "v6")))) (Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (Var (Short "v8")))))) (Let (SOME "v3") (App Opapp ((Var (Short "fromchar")) (App Strsub ((Var (Short "v8")) (App OpnPlus ((Var (Short "v6")) (Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))) (App Opapp ((App Opapp ((App Opapp ((Var (Long "Option" (Short "map2"))) (Fun "v2" (Fun "v1" (App OpnPlus ((Var (Short "v2")) (Var (Short "v1")))))))) (Var (Short "v4")))) (Var (Short "v3"))))))))))) (Dletrec (0 0 0 0 0 0) (("fromchars" "v7" Fun "v8" (If (App Equality ((Var (Short "v7")) (Lit 0))) (Con (SOME (Short "SOME")) ((Lit 0))) (If (App OpbLeq ((App OpnPlus ((Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Lit 1))) (Lit 8))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "fromchars_range")) (Lit 0))) (App OpnPlus ((Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Lit 1))))) (Var (Short "v8")))) (Let (SOME "v6") (Let (SOME "k") (App OpnMinus ((App OpnPlus ((Let (SOME "k") (App OpnMinus ((Var (Short "v7")) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Lit 1))) (Lit 8))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))) (Let (SOME "v4") (App Opapp ((App Opapp ((Var (Long "Option" (Short "map"))) (Fun "v5" (App OpnTimes ((Lit 100000000) (Var (Short "v5"))))))) (App Opapp ((App Opapp ((Var (Short "fromchars")) (Var (Short "v6")))) (Var (Short "v8")))))) (Let (SOME "v3") (App Opapp ((App Opapp ((App Opapp ((Var (Short "fromchars_range")) (Var (Short "v6")))) (Lit 8))) (Var (Short "v8")))) (App Opapp ((App Opapp ((App Opapp ((Var (Long "Option" (Short "map2"))) (Fun "v2" (Fun "v1" (App OpnPlus ((Var (Short "v2")) (Var (Short "v1")))))))) (Var (Short "v4")))) (Var (Short "v3")))))))))))) (Dlet (0 0 0 0 0 0) "fromString" (Fun "v5" (If (App Equality ((App Strlen ((Var (Short "v5")))) (Lit 0))) (Con (SOME (Short "SOME")) ((Lit 0))) (If (Log Or (App Equality ((App Strsub ((Var (Short "v5")) (Lit 0))) (Lit (char "~")))) (App Equality ((App Strsub ((Var (Short "v5")) (Lit 0))) (Lit (char "-"))))) (App Opapp ((App Opapp ((Var (Long "Option" (Short "map"))) (App Opapp ((App Opapp ((Var (Short "o")) (Fun "v1" (App OpnMinus ((Lit 0) (Var (Short "v1"))))))) (Fun "v2" (Var (Short "v2"))))))) (App Opapp ((App Opapp ((Var (Short "fromchars")) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v5")))) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App CopyStrStr ((Var (Short "v5")) (Lit 1) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v5")))) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))) (If (App Equality ((App Strsub ((Var (Short "v5")) (Lit 0))) (Lit (char "+")))) (App Opapp ((App Opapp ((Var (Long "Option" (Short "map"))) (Fun "v3" (Var (Short "v3"))))) (App Opapp ((App Opapp ((Var (Short "fromchars")) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v5")))) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))) (App CopyStrStr ((Var (Short "v5")) (Lit 1) (Let (SOME "k") (App OpnMinus ((App Strlen ((Var (Short "v5")))) (Lit 1))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k")))))))))) (App Opapp ((App Opapp ((Var (Long "Option" (Short "map"))) (Fun "v4" (Var (Short "v4"))))) (App Opapp ((App Opapp ((Var (Short "fromchars")) (App Strlen ((Var (Short "v5")))))) (Var (Short "v5"))))))))))) (Dletrec (0 0 0 0 0 0) (("gcd" "v1" Fun "v2" (If (App Equality ((Var (Short "v1")) (Lit 0))) (Var (Short "v2")) (App Opapp ((App Opapp ((Var (Short "gcd")) (App OpnModulo ((Var (Short "v2")) (Var (Short "v1")))))) (Var (Short "v1")))))))))) 
(Tmod "Num" NONE ((Dlet (0 0 0 0 0 0) "+" (Fun "v1" (Fun "v2" (App OpnPlus ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "-" (Fun "v1" (Fun "v2" (Let (SOME "k") (App OpnMinus ((Var (Short "v1")) (Var (Short "v2")))) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (Lit 0) (Var (Short "k"))))))) (Dlet (0 0 0 0 0 0) "*" (Fun "v1" (Fun "v2" (App OpnTimes ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "div" (Fun "v1" (Fun "v2" (App OpnDivide ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "mod" (Fun "v1" (Fun "v2" (App OpnModulo ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "<" (Fun "v1" (Fun "v2" (App OpbLt ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) ">" (Fun "v1" (Fun "v2" (App OpbGt ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "<=" (Fun "v1" (Fun "v2" (App OpbLeq ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) ">=" (Fun "v1" (Fun "v2" (App OpbGeq ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "toString" (Fun "v1" (App Implode ((App Opapp ((App Opapp ((App Opapp ((Var (Long "Int" (Short "tochars"))) (App OpnModulo ((Var (Short "v1")) (Lit 100000000))))) (App OpnDivide ((Var (Short "v1")) (Lit 100000000))))) (Con (SOME (Short "nil")) nil))))))) (Dlet (0 0 0 0 0 0) "num_tostring" (Fun "v1" (App Opapp ((App Opapp ((App Opapp ((Var (Long "Int" (Short "tochars"))) (App OpnModulo ((Var (Short "v1")) (Lit 100000000))))) (App OpnDivide ((Var (Short "v1")) (Lit 100000000))))) (Con (SOME (Short "nil")) nil))))) (Dlet (0 0 0 0 0 0) "fromString_unsafe" (Fun "v1" (App Opapp ((App Opapp ((Var (Long "Int" (Short "fromchars_unsafe"))) (App Strlen ((Var (Short "v1")))))) (Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "fromString" (Fun "v1" (App Opapp ((App Opapp ((Var (Long "Int" (Short "fromchars"))) (App Strlen ((Var (Short "v1")))))) (Var (Short "v1")))))))) 
(Tmod "Rat" NONE ((Dlet (0 0 0 0 0 0) "fromInt" (Fun "v1" (Con NONE ((Var (Short "v1")) (Lit 1))))) (Dlet (0 0 0 0 0 0) "<=" (Fun "v5" (Fun "v6" (Mat (Var (Short "v5")) (((Pcon NONE ("v4" "v3")) Mat (Var (Short "v6")) (((Pcon NONE ("v2" "v1")) App OpbLeq ((App OpnTimes ((Var (Short "v4")) (Var (Short "v1")))) (App OpnTimes ((Var (Short "v2")) (Var (Short "v3"))))))))))))) (Dlet (0 0 0 0 0 0) ">=" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((Var (Short "<=")) (Var (Short "v2")))) (Var (Short "v1"))))))) (Dlet (0 0 0 0 0 0) "<" (Fun "v5" (Fun "v6" (Mat (Var (Short "v5")) (((Pcon NONE ("v4" "v3")) Mat (Var (Short "v6")) (((Pcon NONE ("v2" "v1")) App OpbLt ((App OpnTimes ((Var (Short "v4")) (Var (Short "v1")))) (App OpnTimes ((Var (Short "v2")) (Var (Short "v3"))))))))))))) (Dlet (0 0 0 0 0 0) ">" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((Var (Short "<")) (Var (Short "v2")))) (Var (Short "v1"))))))) (Dlet (0 0 0 0 0 0) "min" (Fun "v1" (Fun "v2" (If (App Opapp ((App Opapp ((Var (Short "<")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v1")) (Var (Short "v2")))))) (Dlet (0 0 0 0 0 0) "max" (Fun "v1" (Fun "v2" (If (App Opapp ((App Opapp ((Var (Short ">")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v1")) (Var (Short "v2")))))) (Dlet (0 0 0 0 0 0) "div_gcd" (Fun "v2" (Fun "v3" (Let (SOME "v1") (App Opapp ((App Opapp ((Var (Long "Int" (Short "gcd"))) (Let (SOME "k") (Var (Short "v2")) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (App OpnMinus ((Lit 0) (Var (Short "k")))) (Var (Short "k")))))) (Var (Short "v3")))) (If (Log Or (App Equality ((Var (Short "v1")) (Lit 0))) (App Equality ((Var (Short "v1")) (Lit 1)))) (Con NONE ((Var (Short "v2")) (Var (Short "v3")))) (Con NONE ((App OpnDivide ((Var (Short "v2")) (Var (Short "v1")))) (App OpnDivide ((Var (Short "v3")) (Var (Short "v1"))))))))))) (Dlet (0 0 0 0 0 0) "+" (Fun "v5" (Fun "v6" (Mat (Var (Short "v5")) (((Pcon NONE ("v4" "v3")) Mat (Var (Short "v6")) (((Pcon NONE ("v2" "v1")) App Opapp ((App Opapp ((Var (Short "div_gcd")) (App OpnPlus ((App OpnTimes ((Var (Short "v4")) (Var (Short "v1")))) (App OpnTimes ((Var (Short "v2")) (Var (Short "v3")))))))) (App OpnTimes ((Var (Short "v3")) (Var (Short "v1"))))))))))))) (Dlet (0 0 0 0 0 0) "-" (Fun "v5" (Fun "v6" (Mat (Var (Short "v5")) (((Pcon NONE ("v4" "v3")) Mat (Var (Short "v6")) (((Pcon NONE ("v2" "v1")) App Opapp ((App Opapp ((Var (Short "div_gcd")) (App OpnMinus ((App OpnTimes ((Var (Short "v4")) (Var (Short "v1")))) (App OpnTimes ((Var (Short "v2")) (Var (Short "v3")))))))) (App OpnTimes ((Var (Short "v3")) (Var (Short "v1"))))))))))))) (Dlet (0 0 0 0 0 0) "~" (Fun "v1" (App Opapp ((App Opapp ((Var (Short "-")) (App Opapp ((Var (Short "fromInt")) (Lit 0))))) (Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "*" (Fun "v5" (Fun "v6" (Mat (Var (Short "v5")) (((Pcon NONE ("v4" "v3")) Mat (Var (Short "v6")) (((Pcon NONE ("v2" "v1")) App Opapp ((App Opapp ((Var (Short "div_gcd")) (App OpnTimes ((Var (Short "v4")) (Var (Short "v2")))))) (App OpnTimes ((Var (Short "v3")) (Var (Short "v1"))))))))))))) (Dlet (0 0 0 0 0 0) "inv" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon NONE ("v2" "v1")) Con NONE ((If (App OpbLt ((Var (Short "v2")) (Lit 0))) (App OpnMinus ((Lit 0) (Var (Short "v1")))) (Var (Short "v1"))) (Let (SOME "k") (Var (Short "v2")) (If (App OpbLt ((Var (Short "k")) (Lit 0))) (App OpnMinus ((Lit 0) (Var (Short "k")))) (Var (Short "k")))))))))) (Dlet (0 0 0 0 0 0) "/" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((Var (Short "*")) (Var (Short "v1")))) (App Opapp ((Var (Short "inv")) (Var (Short "v2"))))))))) (Dlet (0 0 0 0 0 0) "toString" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon NONE ("v2" "v1")) If (App Equality ((Var (Short "v1")) (Lit 1))) (App Opapp ((Var (Long "Int" (Short "toString"))) (Var (Short "v2")))) (App Strcat ((Con (SOME (Short "::")) ((App Opapp ((Var (Long "Int" (Short "toString"))) (Var (Short "v2")))) (Con (SOME (Short "::")) ((App Implode ((Con (SOME (Short "::")) ((Lit (char "/")) (Con (SOME (Short "nil")) nil))))) (Con (SOME (Short "::")) ((App Opapp ((Var (Long "Num" (Short "toString"))) (Var (Short "v1")))) (Con (SOME (Short "nil")) nil)))))))))))))))) 
(Tmod "Char" NONE ((Dtabbrev (0 0 0 0 0 0) nil "char" (Tapp nil TC_char)) (Dlet (0 0 0 0 0 0) "ord" (Fun "v1" (App Ord ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "chr" (Fun "v1" (App Chr ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "<" (Fun "v1" (Fun "v2" (App ChopbLt ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) ">" (Fun "v1" (Fun "v2" (App ChopbGt ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "<=" (Fun "v1" (Fun "v2" (App ChopbLeq ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) ">=" (Fun "v1" (Fun "v2" (App ChopbGeq ((Var (Short "v1")) (Var (Short "v2"))))))) (Dlet (0 0 0 0 0 0) "isSpace" (Fun "v1" (Log Or (App Equality ((App Ord ((Var (Short "v1")))) (Lit 32))) (Log And (App OpbLeq ((Lit 9) (App Ord ((Var (Short "v1")))))) (App OpbLeq ((App Ord ((Var (Short "v1")))) (Lit 13))))))))) 
(Tmod "Word64" NONE ((Dtabbrev (0 0 0 0 0 0) nil "word" (Tapp nil TC_word64)) (Dlet (0 0 0 0 0 0) "fromInt" (Fun "v1" (App W64fromInt ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "toInt" (Fun "v1" (App W64toInt ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "andb" (Fun "v1" (Fun "v2" (App Opw64Andw ((Var (Short "v1")) (Var (Short "v2"))))))))) 
(Tmod "Word8" NONE ((Dtabbrev (0 0 0 0 0 0) nil "word" (Tapp nil TC_word8)) (Dlet (0 0 0 0 0 0) "fromInt" (Fun "v1" (App W8fromInt ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "toInt" (Fun "v1" (App W8toInt ((Var (Short "v1")))))) (Dlet (0 0 0 0 0 0) "andb" (Fun "v1" (Fun "v2" (App Opw8Andw ((Var (Short "v1")) (Var (Short "v2"))))))))) 
(Tmod "Word8Array" NONE ((Dlet (0 0 0 0 0 0) "array" (Fun "x" (Fun "y" (App Aw8alloc ((Var (Short "x")) (Var (Short "y"))))))) (Dlet (0 0 0 0 0 0) "sub" (Fun "x" (Fun "y" (App Aw8sub ((Var (Short "x")) (Var (Short "y"))))))) (Dlet (0 0 0 0 0 0) "length" (Fun "x" (App Aw8length ((Var (Short "x")))))) (Dlet (0 0 0 0 0 0) "update" (Fun "x" (Fun "y" (Fun "z" (App Aw8update ((Var (Short "x")) (Var (Short "y")) (Var (Short "z")))))))) (Dlet (0 0 0 0 0 0) "copy" (Fun "src" (Fun "srcoff" (Fun "len" (Fun "dst" (Fun "dstoff" (App CopyAw8Aw8 ((Var (Short "src")) (Var (Short "srcoff")) (Var (Short "len")) (Var (Short "dst")) (Var (Short "dstoff")))))))))) (Dlet (0 0 0 0 0 0) "copyVec" (Fun "src" (Fun "srcoff" (Fun "len" (Fun "dst" (Fun "dstoff" (App CopyStrAw8 ((Var (Short "src")) (Var (Short "srcoff")) (Var (Short "len")) (Var (Short "dst")) (Var (Short "dstoff")))))))))) (Dlet (0 0 0 0 0 0) "substring" (Fun "src" (Fun "srcoff" (Fun "len" (App CopyAw8Str ((Var (Short "src")) (Var (Short "srcoff")) (Var (Short "len")))))))))) 
(Tmod "Array" NONE ((Dtabbrev (0 0 0 0 0 0) ("'a") "array" (Tapp ((Tvar "'a")) TC_array)) (Dlet (0 0 0 0 0 0) "array" (Fun "x" (Fun "y" (App Aalloc ((Var (Short "x")) (Var (Short "y"))))))) (Dlet (0 0 0 0 0 0) "arrayEmpty" (Fun "x" (App AallocEmpty ((Var (Short "x")))))) (Dlet (0 0 0 0 0 0) "sub" (Fun "x" (Fun "y" (App Asub ((Var (Short "x")) (Var (Short "y"))))))) (Dlet (0 0 0 0 0 0) "length" (Fun "x" (App Alength ((Var (Short "x")))))) (Dlet (0 0 0 0 0 0) "update" (Fun "x" (Fun "y" (Fun "z" (App Aupdate ((Var (Short "x")) (Var (Short "y")) (Var (Short "z")))))))) (Dletrec (0 0 0 0 0 0) (("fromList" "l" Letrec (("f" "arr" Fun "l" (Fun "i" (Mat (Var (Short "l")) (((Pcon (SOME (Short "nil")) nil) Var (Short "arr")) ((Pcon (SOME (Short "::")) ("h" "t")) Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Short "update")) (Var (Short "arr")))) (Var (Short "i")))) (Var (Short "h")))) (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "i")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "arr")))) (Var (Short "t")))) (Var (Short "a"))))))))))) (Mat (Var (Short "l")) (((Pcon (SOME (Short "nil")) nil) Let (SOME "b") (Con NONE nil) (App Opapp ((Var (Short "arrayEmpty")) (Var (Short "b"))))) ((Pcon (SOME (Short "::")) ("h" "t")) Let (SOME "c") (App Opapp ((Var (Long "List" (Short "length"))) (Var (Short "l")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "array")) (Var (Short "c")))) (Var (Short "h")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "d")))) (Var (Short "t")))) (Lit 1)))))))))) (Dletrec (0 0 0 0 0 0) (("tabulate" "n" Fun "f" (Letrec (("u" "arr" Fun "x" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "x")))) (Var (Short "n")))) (If (Var (Short "a")) (Var (Short "arr")) (Let (SOME "b") (App Opapp ((Var (Short "f")) (Var (Short "x")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Short "update")) (Var (Short "arr")))) (Var (Short "x")))) (Var (Short "b")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "x")))) (Lit 1))) (App Opapp ((App Opapp ((Var (Short "u")) (Var (Short "arr")))) (Var (Short "c"))))))))))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Lit 0))) (If (Var (Short "d")) (Let (SOME "e") (Con NONE nil) (App Opapp ((Var (Short "arrayEmpty")) (Var (Short "e"))))) (Let (SOME "g") (App Opapp ((Var (Short "f")) (Lit 0))) (Let (SOME "h") (App Opapp ((App Opapp ((Var (Short "array")) (Var (Short "n")))) (Var (Short "g")))) (App Opapp ((App Opapp ((Var (Short "u")) (Var (Short "h")))) (Lit 1))))))))))) (Dletrec (0 0 0 0 0 0) (("copy_aux" "src" Fun "dst" (Fun "di" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con NONE nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "src")))) (Var (Short "n")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Short "update")) (Var (Short "dst")))) (Var (Short "di")))) (Var (Short "b")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "di")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "copy_aux")) (Var (Short "src")))) (Var (Short "dst")))) (Var (Short "c")))) (Var (Short "max")))) (Var (Short "d")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("copy" "src" Fun "dst" (Fun "di" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "src")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "copy_aux")) (Var (Short "src")))) (Var (Short "dst")))) (Var (Short "di")))) (Var (Short "a")))) (Lit 0)))))))) (Dletrec (0 0 0 0 0 0) (("copyVec_aux" "src" Fun "dst" (Fun "di" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con NONE nil) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Long "Vector" (Short "sub"))) (Var (Short "src")))) (Var (Short "n")))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "di")))) (Var (Short "n")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Short "update")) (Var (Short "dst")))) (Var (Short "b")))) (Var (Short "c")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "copyVec_aux")) (Var (Short "src")))) (Var (Short "dst")))) (Var (Short "di")))) (Var (Short "max")))) (Var (Short "d")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("copyVec" "src" Fun "dst" (Fun "di" (Let (SOME "a") (App Opapp ((Var (Long "Vector" (Short "length"))) (Var (Short "src")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "copyVec_aux")) (Var (Short "src")))) (Var (Short "dst")))) (Var (Short "di")))) (Var (Short "a")))) (Lit 0)))))))) (Dletrec (0 0 0 0 0 0) (("app_aux" "f" Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con NONE nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let NONE (App Opapp ((Var (Short "f")) (Var (Short "b")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "app_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "c")))))))))))))) (Dletrec (0 0 0 0 0 0) (("app" "f" Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "app_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("appi_aux" "f" Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con NONE nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let NONE (App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "n")))) (Var (Short "b")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "app_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "c")))))))))))))) (Dletrec (0 0 0 0 0 0) (("appi" "f" Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "appi_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("modify_aux" "f" Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con NONE nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let (SOME "c") (App Opapp ((Var (Short "f")) (Var (Short "b")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Short "update")) (Var (Short "arr")))) (Var (Short "n")))) (Var (Short "c")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "modify_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "d"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("modify" "f" Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "modify_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("modifyi_aux" "f" Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con NONE nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "n")))) (Var (Short "b")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Short "update")) (Var (Short "arr")))) (Var (Short "n")))) (Var (Short "c")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "modifyi_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "d"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("modifyi" "f" Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "modifyi_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("foldli_aux" "f" Fun "init" (Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Var (Short "init")) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let (SOME "c") (App Opapp ((App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "n")))) (Var (Short "b")))) (Var (Short "init")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldli_aux")) (Var (Short "f")))) (Var (Short "c")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "d"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("foldli" "f" Fun "init" (Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldli_aux")) (Var (Short "f")))) (Var (Short "init")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0)))))))) (Dletrec (0 0 0 0 0 0) (("foldl_aux" "f" Fun "init" (Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Var (Short "init")) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "b")))) (Var (Short "init")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldl_aux")) (Var (Short "f")))) (Var (Short "c")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "d"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("foldl" "f" Fun "init" (Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldl_aux")) (Var (Short "f")))) (Var (Short "init")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0)))))))) (Dletrec (0 0 0 0 0 0) (("foldri_aux" "f" Fun "init" (Fun "arr" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Lit 0))) (If (Var (Short "a")) (Var (Short "init")) (Let (SOME "g") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "n")))) (Lit 1))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "n")))) (Lit 1))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "c")))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "n")))) (Lit 1))) (Let (SOME "e") (App Opapp ((App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "b")))) (Var (Short "d")))) (Var (Short "init")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldri_aux")) (Var (Short "f")))) (Var (Short "e")))) (Var (Short "arr")))) (Var (Short "g")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("foldri" "f" Fun "init" (Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldri_aux")) (Var (Short "f")))) (Var (Short "init")))) (Var (Short "arr")))) (Var (Short "a"))))))))) (Dletrec (0 0 0 0 0 0) (("foldr_aux" "f" Fun "init" (Fun "arr" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Lit 0))) (If (Var (Short "a")) (Var (Short "init")) (Let (SOME "e") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "n")))) (Lit 1))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "n")))) (Lit 1))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "b")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "c")))) (Var (Short "init")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldr_aux")) (Var (Short "f")))) (Var (Short "d")))) (Var (Short "arr")))) (Var (Short "e"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("foldr" "f" Fun "init" (Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "foldr_aux")) (Var (Short "f")))) (Var (Short "init")))) (Var (Short "arr")))) (Var (Short "a"))))))))) (Dletrec (0 0 0 0 0 0) (("find_aux" "f" Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con (SOME (Short "NONE")) nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let (SOME "c") (App Opapp ((Var (Short "f")) (Var (Short "b")))) (If (Var (Short "c")) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Con (SOME (Short "SOME")) ((Var (Short "d"))))) (Let (SOME "e") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "find_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "e"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("find" "f" Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "find_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("findi_aux" "f" Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con (SOME (Short "NONE")) nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "n")))) (Var (Short "b")))) (If (Var (Short "c")) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Con (SOME (Short "SOME")) ((Con NONE ((Var (Short "n")) (Var (Short "d"))))))) (Let (SOME "e") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "findi_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "e"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("findi" "f" Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "findi_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("exists_aux" "f" Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con (SOME (Short "false")) nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let (SOME "c") (App Opapp ((Var (Short "f")) (Var (Short "b")))) (If (Var (Short "c")) (Con (SOME (Short "true")) nil) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "exists_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "d"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("exists" "f" Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "exists_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("all_aux" "f" Fun "arr" (Fun "max" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Con (SOME (Short "true")) nil) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "arr")))) (Var (Short "n")))) (Let (SOME "c") (App Opapp ((Var (Short "f")) (Var (Short "b")))) (If (Var (Short "c")) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "all_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "max")))) (Var (Short "d"))))) (Con (SOME (Short "false")) nil))))))))))) (Dletrec (0 0 0 0 0 0) (("all" "f" Fun "arr" (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "arr")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "all_aux")) (Var (Short "f")))) (Var (Short "arr")))) (Var (Short "a")))) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("collate_aux" "f" Fun "a1" (Fun "a2" (Fun "max" (Fun "ord" (Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Var (Short "max")))) (If (Var (Short "a")) (Var (Short "ord")) (Let (SOME "e") (Con (SOME (Short "Equal")) nil) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "a2")))) (Var (Short "n")))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "a1")))) (Var (Short "n")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "b")))) (Var (Short "c")))) (Let (SOME "g") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "d")))) (Var (Short "e")))) (If (Var (Short "g")) (Let (SOME "h") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "n")))) (Lit 1))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux")) (Var (Short "f")))) (Var (Short "a1")))) (Var (Short "a2")))) (Var (Short "max")))) (Var (Short "ord")))) (Var (Short "h"))))) (Let (SOME "j") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "a2")))) (Var (Short "n")))) (Let (SOME "i") (App Opapp ((App Opapp ((Var (Short "sub")) (Var (Short "a1")))) (Var (Short "n")))) (App Opapp ((App Opapp ((Var (Short "f")) (Var (Short "i")))) (Var (Short "j"))))))))))))))))))))) (Dletrec (0 0 0 0 0 0) (("collate" "f" Fun "a1" (Fun "a2" (Let (SOME "b") (App Opapp ((Var (Short "length")) (Var (Short "a2")))) (Let (SOME "a") (App Opapp ((Var (Short "length")) (Var (Short "a1")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "<")) (Var (Short "a")))) (Var (Short "b")))) (If (Var (Short "c")) (Let (SOME "e") (Con (SOME (Short "Less")) nil) (Let (SOME "d") (App Opapp ((Var (Short "length")) (Var (Short "a1")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux")) (Var (Short "f")))) (Var (Short "a1")))) (Var (Short "a2")))) (Var (Short "d")))) (Var (Short "e")))) (Lit 0))))) (Let (SOME "h") (App Opapp ((Var (Short "length")) (Var (Short "a1")))) (Let (SOME "g") (App Opapp ((Var (Short "length")) (Var (Short "a2")))) (Let (SOME "i") (App Opapp ((App Opapp ((Var (Short "<")) (Var (Short "g")))) (Var (Short "h")))) (If (Var (Short "i")) (Let (SOME "k") (Con (SOME (Short "Greater")) nil) (Let (SOME "j") (App Opapp ((Var (Short "length")) (Var (Short "a2")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux")) (Var (Short "f")))) (Var (Short "a1")))) (Var (Short "a2")))) (Var (Short "j")))) (Var (Short "k")))) (Lit 0))))) (Let (SOME "m") (Con (SOME (Short "Equal")) nil) (Let (SOME "l") (App Opapp ((Var (Short "length")) (Var (Short "a2")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "collate_aux")) (Var (Short "f")))) (Var (Short "a1")))) (Var (Short "a2")))) (Var (Short "l")))) (Var (Short "m")))) (Lit 0))))))))))))))))))) 
(Tmod "Compare" NONE ((Dlet (0 0 0 0 0 0) "bool_compare" (Fun "v1" (Fun "v2" (If (Var (Short "v1")) (If (Var (Short "v2")) (Con (SOME (Short "Equal")) nil) (Con (SOME (Short "Greater")) nil)) (If (Var (Short "v2")) (Con (SOME (Short "Less")) nil) (Con (SOME (Short "Equal")) nil)))))) (Dlet (0 0 0 0 0 0) "num_compare" (Fun "v1" (Fun "v2" (If (App Equality ((Var (Short "v1")) (Var (Short "v2")))) (Con (SOME (Short "Equal")) nil) (If (App OpbLt ((Var (Short "v1")) (Var (Short "v2")))) (Con (SOME (Short "Less")) nil) (Con (SOME (Short "Greater")) nil)))))) (Dlet (0 0 0 0 0 0) "char_compare" (Fun "v1" (Fun "v2" (App Opapp ((App Opapp ((Var (Short "num_compare")) (App Ord ((Var (Short "v1")))))) (App Ord ((Var (Short "v2"))))))))) (Dletrec (0 0 0 0 0 0) (("list_compare" "v7" Fun "v8" (Fun "v9" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "nil")) nil) Mat (Var (Short "v9")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "Equal")) nil) ((Pcon (SOME (Short "::")) ("v2" "v1")) Con (SOME (Short "Less")) nil))) ((Pcon (SOME (Short "::")) ("v6" "v5")) Mat (Var (Short "v9")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "Greater")) nil) ((Pcon (SOME (Short "::")) ("v4" "v3")) Mat (App Opapp ((App Opapp ((Var (Short "v7")) (Var (Short "v6")))) (Var (Short "v4")))) (((Pcon (SOME (Short "Less")) nil) Con (SOME (Short "Less")) nil) ((Pcon (SOME (Short "Equal")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "list_compare")) (Var (Short "v7")))) (Var (Short "v5")))) (Var (Short "v3")))) ((Pcon (SOME (Short "Greater")) nil) Con (SOME (Short "Greater")) nil))))))))))) (Dlet (0 0 0 0 0 0) "option_compare" (Fun "v4" (Fun "v5" (Fun "v6" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "NONE")) nil) Mat (Var (Short "v6")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "Equal")) nil) ((Pcon (SOME (Short "SOME")) ("v1")) Con (SOME (Short "Less")) nil))) ((Pcon (SOME (Short "SOME")) ("v3")) Mat (Var (Short "v6")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "Greater")) nil) ((Pcon (SOME (Short "SOME")) ("v2")) App Opapp ((App Opapp ((Var (Short "v4")) (Var (Short "v3")))) (Var (Short "v2")))))))))))) (Dlet (0 0 0 0 0 0) "option_cmp2" (Fun "v4" (Fun "v5" (Fun "v6" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "NONE")) nil) Mat (Var (Short "v6")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "Equal")) nil) ((Pcon (SOME (Short "SOME")) ("v1")) Con (SOME (Short "Greater")) nil))) ((Pcon (SOME (Short "SOME")) ("v3")) Mat (Var (Short "v6")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "Less")) nil) ((Pcon (SOME (Short "SOME")) ("v2")) App Opapp ((App Opapp ((Var (Short "v4")) (Var (Short "v3")))) (Var (Short "v2")))))))))))) (Dlet (0 0 0 0 0 0) "pair_compare" (Fun "v1" (Fun "v2" (Fun "v3" (Fun "v4" (Mat (App Opapp ((App Opapp ((Var (Short "v1")) (App Opapp ((Var (Short "fst")) (Var (Short "v3")))))) (App Opapp ((Var (Short "fst")) (Var (Short "v4")))))) (((Pcon (SOME (Short "Less")) nil) Con (SOME (Short "Less")) nil) ((Pcon (SOME (Short "Equal")) nil) App Opapp ((App Opapp ((Var (Short "v2")) (App Opapp ((Var (Short "snd")) (Var (Short "v3")))))) (App Opapp ((Var (Short "snd")) (Var (Short "v4")))))) ((Pcon (SOME (Short "Greater")) nil) Con (SOME (Short "Greater")) nil)))))))) (Dlet (0 0 0 0 0 0) "string_compare" (Fun "v1" (App Opapp ((App Opapp ((Var (Short "list_compare")) (Var (Short "char_compare")))) (Var (Short "v1")))))))) 
(Tdec (Dtype (0 0 0 0 0 0) ((("'k" "'w") "balanced_map" ("Bin" (Tapp nil TC_int) (Tvar "'k") (Tvar "'w") (Tapp ((Tvar "'k") (Tvar "'w")) (TC_name (Short "balanced_map"))) (Tapp ((Tvar "'k") (Tvar "'w")) (TC_name (Short "balanced_map")))) ("Tip" ))))) 
(Tmod "Map" NONE ((Dlet (0 0 0 0 0 0) "size" (Fun "v6" (Mat (Var (Short "v6")) (((Pcon (SOME (Short "Tip")) nil) Lit 0) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Var (Short "v5")))))) (Dlet (0 0 0 0 0 0) "singleton" (Fun "v1" (Fun "v2" (Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v1")) (Var (Short "v2")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil)))))) (Dlet (0 0 0 0 0 0) "ratio" (Lit 2)) (Dlet (0 0 0 0 0 0) "delta" (Lit 3)) (Dlet (0 0 0 0 0 0) "balancel" (Fun "v41" (Fun "v42" (Fun "v43" (Fun "v44" (Mat (Var (Short "v43")) (((Pcon (SOME (Short "Tip")) nil) Mat (Var (Short "v44")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (Var (Short "v5")))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1")))))))) ((Pcon (SOME (Short "Bin")) ("v40" "v39" "v38" "v37" "v36")) Mat (Var (Short "v44")) (((Pcon (SOME (Short "Tip")) nil) Mat (Var (Short "v37")) (((Pcon (SOME (Short "Tip")) nil) Mat (Var (Short "v36")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((Lit 2) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Bin")) ((Var (Short "v40")) (Var (Short "v39")) (Var (Short "v38")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))) (Con (SOME (Short "Tip")) nil))) ((Pcon (SOME (Short "Bin")) ("v10" "v9" "v8" "v7" "v6")) Con (SOME (Short "Bin")) ((Lit 3) (Var (Short "v9")) (Var (Short "v8")) (Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v39")) (Var (Short "v38")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))) (Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))))))) ((Pcon (SOME (Short "Bin")) ("v20" "v19" "v18" "v17" "v16")) Mat (Var (Short "v36")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((Lit 3) (Var (Short "v39")) (Var (Short "v38")) (Con (SOME (Short "Bin")) ((Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")) (Var (Short "v17")) (Var (Short "v16")))) (Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))))) ((Pcon (SOME (Short "Bin")) ("v15" "v14" "v13" "v12" "v11")) If (App OpbLt ((Var (Short "v15")) (App OpnTimes ((Var (Short "ratio")) (Var (Short "v20")))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v39")) (Var (Short "v38")) (Con (SOME (Short "Bin")) ((Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")) (Var (Short "v17")) (Var (Short "v16")))) (Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (Var (Short "v15")))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Bin")) ((Var (Short "v15")) (Var (Short "v14")) (Var (Short "v13")) (Var (Short "v12")) (Var (Short "v11")))) (Con (SOME (Short "Tip")) nil))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v14")) (Var (Short "v13")) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v20")))) (App Opapp ((Var (Short "size")) (Var (Short "v12")))))) (Var (Short "v39")) (Var (Short "v38")) (Con (SOME (Short "Bin")) ((Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")) (Var (Short "v17")) (Var (Short "v16")))) (Var (Short "v12")))) (Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (App Opapp ((Var (Short "size")) (Var (Short "v11")))))) (Var (Short "v41")) (Var (Short "v42")) (Var (Short "v11")) (Con (SOME (Short "Tip")) nil)))))))))) ((Pcon (SOME (Short "Bin")) ("v35" "v34" "v33" "v32" "v31")) If (App OpbGt ((Var (Short "v40")) (App OpnTimes ((Var (Short "delta")) (Var (Short "v35")))))) (Mat (Var (Short "v37")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v30" "v29" "v28" "v27" "v26")) Mat (Var (Short "v36")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v25" "v24" "v23" "v22" "v21")) If (App OpbLt ((Var (Short "v25")) (App OpnTimes ((Var (Short "ratio")) (Var (Short "v30")))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v35")))) (Var (Short "v39")) (Var (Short "v38")) (Var (Short "v37")) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v35")))) (Var (Short "v25")))) (Var (Short "v41")) (Var (Short "v42")) (Var (Short "v36")) (Con (SOME (Short "Bin")) ((Var (Short "v35")) (Var (Short "v34")) (Var (Short "v33")) (Var (Short "v32")) (Var (Short "v31")))))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v35")))) (Var (Short "v24")) (Var (Short "v23")) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v30")))) (App Opapp ((Var (Short "size")) (Var (Short "v22")))))) (Var (Short "v39")) (Var (Short "v38")) (Var (Short "v37")) (Var (Short "v22")))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v35")))) (App Opapp ((Var (Short "size")) (Var (Short "v21")))))) (Var (Short "v41")) (Var (Short "v42")) (Var (Short "v21")) (Con (SOME (Short "Bin")) ((Var (Short "v35")) (Var (Short "v34")) (Var (Short "v33")) (Var (Short "v32")) (Var (Short "v31"))))))))))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v35")))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Bin")) ((Var (Short "v40")) (Var (Short "v39")) (Var (Short "v38")) (Var (Short "v37")) (Var (Short "v36")))) (Con (SOME (Short "Bin")) ((Var (Short "v35")) (Var (Short "v34")) (Var (Short "v33")) (Var (Short "v32")) (Var (Short "v31")))))))))))))))) (Dlet (0 0 0 0 0 0) "balancer" (Fun "v41" (Fun "v42" (Fun "v43" (Fun "v44" (Mat (Var (Short "v43")) (((Pcon (SOME (Short "Tip")) nil) Mat (Var (Short "v44")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))) ((Pcon (SOME (Short "Bin")) ("v20" "v19" "v18" "v17" "v16")) Mat (Var (Short "v17")) (((Pcon (SOME (Short "Tip")) nil) Mat (Var (Short "v16")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((Lit 2) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Bin")) ((Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Con (SOME (Short "Bin")) ((Lit 3) (Var (Short "v19")) (Var (Short "v18")) (Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1")))))))) ((Pcon (SOME (Short "Bin")) ("v15" "v14" "v13" "v12" "v11")) Mat (Var (Short "v16")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((Lit 3) (Var (Short "v14")) (Var (Short "v13")) (Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))) (Con (SOME (Short "Bin")) ((Lit 1) (Var (Short "v19")) (Var (Short "v18")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Tip")) nil))))) ((Pcon (SOME (Short "Bin")) ("v10" "v9" "v8" "v7" "v6")) If (App OpbLt ((Var (Short "v15")) (App OpnTimes ((Var (Short "ratio")) (Var (Short "v10")))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (Var (Short "v20")))) (Var (Short "v19")) (Var (Short "v18")) (Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (Var (Short "v15")))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Bin")) ((Var (Short "v15")) (Var (Short "v14")) (Var (Short "v13")) (Var (Short "v12")) (Var (Short "v11")))))) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (Var (Short "v20")))) (Var (Short "v14")) (Var (Short "v13")) (Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (App Opapp ((Var (Short "size")) (Var (Short "v12")))))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Tip")) nil) (Var (Short "v12")))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v10")))) (App Opapp ((Var (Short "size")) (Var (Short "v11")))))) (Var (Short "v19")) (Var (Short "v18")) (Var (Short "v11")) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6"))))))))))))))) ((Pcon (SOME (Short "Bin")) ("v40" "v39" "v38" "v37" "v36")) Mat (Var (Short "v44")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Bin")) ((Var (Short "v40")) (Var (Short "v39")) (Var (Short "v38")) (Var (Short "v37")) (Var (Short "v36")))) (Con (SOME (Short "Tip")) nil))) ((Pcon (SOME (Short "Bin")) ("v35" "v34" "v33" "v32" "v31")) If (App OpbGt ((Var (Short "v35")) (App OpnTimes ((Var (Short "delta")) (Var (Short "v40")))))) (Mat (Var (Short "v32")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v30" "v29" "v28" "v27" "v26")) Mat (Var (Short "v31")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v25" "v24" "v23" "v22" "v21")) If (App OpbLt ((Var (Short "v30")) (App OpnTimes ((Var (Short "ratio")) (Var (Short "v25")))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v35")))) (Var (Short "v34")) (Var (Short "v33")) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v30")))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Bin")) ((Var (Short "v40")) (Var (Short "v39")) (Var (Short "v38")) (Var (Short "v37")) (Var (Short "v36")))) (Var (Short "v32")))) (Var (Short "v31")))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v35")))) (Var (Short "v29")) (Var (Short "v28")) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (App Opapp ((Var (Short "size")) (Var (Short "v27")))))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Bin")) ((Var (Short "v40")) (Var (Short "v39")) (Var (Short "v38")) (Var (Short "v37")) (Var (Short "v36")))) (Var (Short "v27")))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v25")))) (App Opapp ((Var (Short "size")) (Var (Short "v26")))))) (Var (Short "v34")) (Var (Short "v33")) (Var (Short "v26")) (Var (Short "v31"))))))))))) (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((Lit 1) (Var (Short "v40")))) (Var (Short "v35")))) (Var (Short "v41")) (Var (Short "v42")) (Con (SOME (Short "Bin")) ((Var (Short "v40")) (Var (Short "v39")) (Var (Short "v38")) (Var (Short "v37")) (Var (Short "v36")))) (Con (SOME (Short "Bin")) ((Var (Short "v35")) (Var (Short "v34")) (Var (Short "v33")) (Var (Short "v32")) (Var (Short "v31")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("deletefindmax" "x" Mat (Var (Short "x")) (((Pcon (SOME (Short "Tip")) nil) Con NONE ((Raise (Con (SOME (Short "Bind")) nil)) (Con (SOME (Short "Tip")) nil))) ((Pcon (SOME (Short "Bin")) ("v13" "v12" "v11" "v10" "v9")) Mat (Var (Short "v9")) (((Pcon (SOME (Short "Tip")) nil) Con NONE ((Con NONE ((Var (Short "v12")) (Var (Short "v11")))) (Var (Short "v10")))) ((Pcon (SOME (Short "Bin")) ("v8" "v7" "v6" "v5" "v4")) Let (SOME "v3") (App Opapp ((Var (Short "deletefindmax")) (Con (SOME (Short "Bin")) ((Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")) (Var (Short "v5")) (Var (Short "v4")))))) (Mat (Var (Short "v3")) (((Pcon NONE ("v2" "v1")) Con NONE ((Var (Short "v2")) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancel")) (Var (Short "v12")))) (Var (Short "v11")))) (Var (Short "v10")))) (Var (Short "v1"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("deletefindmin" "x" Mat (Var (Short "x")) (((Pcon (SOME (Short "Tip")) nil) Con NONE ((Raise (Con (SOME (Short "Bind")) nil)) (Con (SOME (Short "Tip")) nil))) ((Pcon (SOME (Short "Bin")) ("v13" "v12" "v11" "v10" "v9")) Mat (Var (Short "v10")) (((Pcon (SOME (Short "Tip")) nil) Con NONE ((Con NONE ((Var (Short "v12")) (Var (Short "v11")))) (Var (Short "v9")))) ((Pcon (SOME (Short "Bin")) ("v8" "v7" "v6" "v5" "v4")) Let (SOME "v3") (App Opapp ((Var (Short "deletefindmin")) (Con (SOME (Short "Bin")) ((Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")) (Var (Short "v5")) (Var (Short "v4")))))) (Mat (Var (Short "v3")) (((Pcon NONE ("v2" "v1")) Con NONE ((Var (Short "v2")) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancer")) (Var (Short "v12")))) (Var (Short "v11")))) (Var (Short "v1")))) (Var (Short "v9"))))))))))))))) (Dlet (0 0 0 0 0 0) "glue" (Fun "v23" (Fun "v24" (Mat (Var (Short "v23")) (((Pcon (SOME (Short "Tip")) nil) Var (Short "v24")) ((Pcon (SOME (Short "Bin")) ("v22" "v21" "v20" "v19" "v18")) Mat (Var (Short "v24")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((Var (Short "v22")) (Var (Short "v21")) (Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")))) ((Pcon (SOME (Short "Bin")) ("v17" "v16" "v15" "v14" "v13")) If (App OpbGt ((App Opapp ((Var (Short "size")) (Con (SOME (Short "Bin")) ((Var (Short "v22")) (Var (Short "v21")) (Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")))))) (App Opapp ((Var (Short "size")) (Con (SOME (Short "Bin")) ((Var (Short "v17")) (Var (Short "v16")) (Var (Short "v15")) (Var (Short "v14")) (Var (Short "v13")))))))) (Let (SOME "v6") (App Opapp ((Var (Short "deletefindmax")) (Con (SOME (Short "Bin")) ((Var (Short "v22")) (Var (Short "v21")) (Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")))))) (Mat (Var (Short "v6")) (((Pcon NONE ("v5" "v4")) App Opapp ((Mat (Var (Short "v5")) (((Pcon NONE ("v3" "v2")) Fun "v1" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancer")) (Var (Short "v3")))) (Var (Short "v2")))) (Var (Short "v1")))) (Con (SOME (Short "Bin")) ((Var (Short "v17")) (Var (Short "v16")) (Var (Short "v15")) (Var (Short "v14")) (Var (Short "v13"))))))))) (Var (Short "v4"))))))) (Let (SOME "v12") (App Opapp ((Var (Short "deletefindmin")) (Con (SOME (Short "Bin")) ((Var (Short "v17")) (Var (Short "v16")) (Var (Short "v15")) (Var (Short "v14")) (Var (Short "v13")))))) (Mat (Var (Short "v12")) (((Pcon NONE ("v11" "v10")) App Opapp ((Mat (Var (Short "v11")) (((Pcon NONE ("v9" "v8")) Fun "v7" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancel")) (Var (Short "v9")))) (Var (Short "v8")))) (Con (SOME (Short "Bin")) ((Var (Short "v22")) (Var (Short "v21")) (Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")))))) (Var (Short "v7"))))))) (Var (Short "v10"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("trim_help_greater" "v6" Fun "v7" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) If (Log Or (App Equality ((App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v4")))) (Var (Short "v7")))) (Con (SOME (Short "Less")) nil))) (App Equality ((App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v4")))) (Var (Short "v7")))) (Con (SOME (Short "Equal")) nil)))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "trim_help_greater")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v1")))) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1"))))))))))) (Dletrec (0 0 0 0 0 0) (("trim_help_lesser" "v6" Fun "v7" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) If (Log Or (App Equality ((App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v4")))) (Var (Short "v7")))) (Con (SOME (Short "Greater")) nil))) (App Equality ((App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v4")))) (Var (Short "v7")))) (Con (SOME (Short "Equal")) nil)))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "trim_help_lesser")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v2")))) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1"))))))))))) (Dletrec (0 0 0 0 0 0) (("trim_help_middle" "v10" Fun "v8" (Fun "v11" (Fun "v9" (Mat (Con NONE ((Var (Short "v8")) (Var (Short "v9")))) (((Pcon NONE ("v7" "v6")) Mat (Var (Short "v6")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) If (Log Or (App Equality ((App Opapp ((App Opapp ((Var (Short "v10")) (Var (Short "v4")))) (Var (Short "v7")))) (Con (SOME (Short "Less")) nil))) (App Equality ((App Opapp ((App Opapp ((Var (Short "v10")) (Var (Short "v4")))) (Var (Short "v7")))) (Con (SOME (Short "Equal")) nil)))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "trim_help_middle")) (Var (Short "v10")))) (Var (Short "v7")))) (Var (Short "v11")))) (Var (Short "v1")))) (If (Log Or (App Equality ((App Opapp ((App Opapp ((Var (Short "v10")) (Var (Short "v4")))) (Var (Short "v11")))) (Con (SOME (Short "Greater")) nil))) (App Equality ((App Opapp ((App Opapp ((Var (Short "v10")) (Var (Short "v4")))) (Var (Short "v11")))) (Con (SOME (Short "Equal")) nil)))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "trim_help_middle")) (Var (Short "v10")))) (Var (Short "v7")))) (Var (Short "v11")))) (Var (Short "v2")))) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1"))))))))))))))) (Dlet (0 0 0 0 0 0) "trim" (Fun "v4" (Fun "v5" (Fun "v6" (Fun "v7" (Mat (Var (Short "v5")) (((Pcon (SOME (Short "NONE")) nil) Mat (Var (Short "v6")) (((Pcon (SOME (Short "NONE")) nil) Var (Short "v7")) ((Pcon (SOME (Short "SOME")) ("v1")) App Opapp ((App Opapp ((App Opapp ((Var (Short "trim_help_lesser")) (Var (Short "v4")))) (Var (Short "v1")))) (Var (Short "v7")))))) ((Pcon (SOME (Short "SOME")) ("v3")) Mat (Var (Short "v6")) (((Pcon (SOME (Short "NONE")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "trim_help_greater")) (Var (Short "v4")))) (Var (Short "v3")))) (Var (Short "v7")))) ((Pcon (SOME (Short "SOME")) ("v2")) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "trim_help_middle")) (Var (Short "v4")))) (Var (Short "v3")))) (Var (Short "v2")))) (Var (Short "v7"))))))))))))) (Dletrec (0 0 0 0 0 0) (("insertmin" "v6" Fun "v8" (Fun "v7" (Mat (Var (Short "v7")) (((Pcon (SOME (Short "Tip")) nil) App Opapp ((App Opapp ((Var (Short "singleton")) (Var (Short "v6")))) (Var (Short "v8")))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancel")) (Var (Short "v4")))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "insertmin")) (Var (Short "v6")))) (Var (Short "v8")))) (Var (Short "v2")))))) (Var (Short "v1")))))))))) (Dletrec (0 0 0 0 0 0) (("insertmax" "v6" Fun "v8" (Fun "v7" (Mat (Var (Short "v7")) (((Pcon (SOME (Short "Tip")) nil) App Opapp ((App Opapp ((Var (Short "singleton")) (Var (Short "v6")))) (Var (Short "v8")))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancer")) (Var (Short "v4")))) (Var (Short "v3")))) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "insertmax")) (Var (Short "v6")))) (Var (Short "v8")))) (Var (Short "v1")))))))))))) (Dlet (0 0 0 0 0 0) "bin" (Fun "v1" (Fun "v4" (Fun "v2" (Fun "v3" (Con (SOME (Short "Bin")) ((App OpnPlus ((App OpnPlus ((App Opapp ((Var (Short "size")) (Var (Short "v2")))) (App Opapp ((Var (Short "size")) (Var (Short "v3")))))) (Lit 1))) (Var (Short "v1")) (Var (Short "v4")) (Var (Short "v2")) (Var (Short "v3"))))))))) (Dletrec (0 0 0 0 0 0) (("link" "v11" Fun "v12" (Fun "v13" (Fun "v14" (Mat (Var (Short "v13")) (((Pcon (SOME (Short "Tip")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "insertmin")) (Var (Short "v11")))) (Var (Short "v12")))) (Var (Short "v14")))) ((Pcon (SOME (Short "Bin")) ("v10" "v9" "v8" "v7" "v6")) Mat (Var (Short "v14")) (((Pcon (SOME (Short "Tip")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "insertmax")) (Var (Short "v11")))) (Var (Short "v12")))) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) If (App OpbLt ((App OpnTimes ((Var (Short "delta")) (Var (Short "v10")))) (Var (Short "v5")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancel")) (Var (Short "v4")))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v11")))) (Var (Short "v12")))) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))))) (Var (Short "v2")))))) (Var (Short "v1")))) (If (App OpbLt ((App OpnTimes ((Var (Short "delta")) (Var (Short "v5")))) (Var (Short "v10")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancer")) (Var (Short "v9")))) (Var (Short "v8")))) (Var (Short "v7")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v11")))) (Var (Short "v12")))) (Var (Short "v6")))) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1")))))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "bin")) (Var (Short "v11")))) (Var (Short "v12")))) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))))) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1"))))))))))))))))) (Dletrec (0 0 0 0 0 0) (("filterlt_help" "v7" Fun "v6" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Mat (App Opapp ((App Opapp ((Var (Short "v7")) (Var (Short "v4")))) (Var (Short "v6")))) (((Pcon (SOME (Short "Less")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v4")))) (Var (Short "v3")))) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "filterlt_help")) (Var (Short "v7")))) (Var (Short "v6")))) (Var (Short "v1")))))) ((Pcon (SOME (Short "Equal")) nil) Var (Short "v2")) ((Pcon (SOME (Short "Greater")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "filterlt_help")) (Var (Short "v7")))) (Var (Short "v6")))) (Var (Short "v2")))))))))))) (Dlet (0 0 0 0 0 0) "filterlt" (Fun "v2" (Fun "v3" (Fun "v4" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "NONE")) nil) Var (Short "v4")) ((Pcon (SOME (Short "SOME")) ("v1")) App Opapp ((App Opapp ((App Opapp ((Var (Short "filterlt_help")) (Var (Short "v2")))) (Var (Short "v1")))) (Var (Short "v4")))))))))) (Dletrec (0 0 0 0 0 0) (("filtergt_help" "v7" Fun "v6" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Mat (App Opapp ((App Opapp ((Var (Short "v7")) (Var (Short "v6")))) (Var (Short "v4")))) (((Pcon (SOME (Short "Less")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v4")))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "filtergt_help")) (Var (Short "v7")))) (Var (Short "v6")))) (Var (Short "v2")))))) (Var (Short "v1")))) ((Pcon (SOME (Short "Equal")) nil) Var (Short "v1")) ((Pcon (SOME (Short "Greater")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "filtergt_help")) (Var (Short "v7")))) (Var (Short "v6")))) (Var (Short "v1")))))))))))) (Dlet (0 0 0 0 0 0) "filtergt" (Fun "v2" (Fun "v3" (Fun "v4" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "NONE")) nil) Var (Short "v4")) ((Pcon (SOME (Short "SOME")) ("v1")) App Opapp ((App Opapp ((App Opapp ((Var (Short "filtergt_help")) (Var (Short "v2")))) (Var (Short "v1")))) (Var (Short "v4")))))))))) (Dletrec (0 0 0 0 0 0) (("insertr" "v6" Fun "v7" (Fun "v9" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) App Opapp ((App Opapp ((Var (Short "singleton")) (Var (Short "v7")))) (Var (Short "v9")))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Mat (App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v7")))) (Var (Short "v4")))) (((Pcon (SOME (Short "Less")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancel")) (Var (Short "v4")))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "insertr")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v9")))) (Var (Short "v2")))))) (Var (Short "v1")))) ((Pcon (SOME (Short "Equal")) nil) Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1")))) ((Pcon (SOME (Short "Greater")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancer")) (Var (Short "v4")))) (Var (Short "v3")))) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "insertr")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v9")))) (Var (Short "v1"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("hedgeunion" "v21" Fun "v22" (Fun "v23" (Fun "v24" (Fun "v25" (Mat (Var (Short "v25")) (((Pcon (SOME (Short "Tip")) nil) Var (Short "v24")) ((Pcon (SOME (Short "Bin")) ("v20" "v19" "v18" "v17" "v16")) Mat (Var (Short "v24")) (((Pcon (SOME (Short "Tip")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v19")))) (Var (Short "v18")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "filtergt")) (Var (Short "v21")))) (Var (Short "v22")))) (Var (Short "v17")))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "filterlt")) (Var (Short "v21")))) (Var (Short "v23")))) (Var (Short "v16")))))) ((Pcon (SOME (Short "Bin")) ("v15" "v14" "v13" "v12" "v11")) Mat (Var (Short "v17")) (((Pcon (SOME (Short "Tip")) nil) Mat (Var (Short "v16")) (((Pcon (SOME (Short "Tip")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "insertr")) (Var (Short "v21")))) (Var (Short "v19")))) (Var (Short "v18")))) (Con (SOME (Short "Bin")) ((Var (Short "v15")) (Var (Short "v14")) (Var (Short "v13")) (Var (Short "v12")) (Var (Short "v11")))))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v14")))) (Var (Short "v13")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "hedgeunion")) (Var (Short "v21")))) (Var (Short "v22")))) (Con (SOME (Short "SOME")) ((Var (Short "v14")))))) (Var (Short "v12")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "trim")) (Var (Short "v21")))) (Var (Short "v22")))) (Con (SOME (Short "SOME")) ((Var (Short "v14")))))) (Con (SOME (Short "Bin")) ((Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1")))))))))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "hedgeunion")) (Var (Short "v21")))) (Con (SOME (Short "SOME")) ((Var (Short "v14")))))) (Var (Short "v23")))) (Var (Short "v11")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "trim")) (Var (Short "v21")))) (Con (SOME (Short "SOME")) ((Var (Short "v14")))))) (Var (Short "v23")))) (Con (SOME (Short "Bin")) ((Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")) (Con (SOME (Short "Tip")) nil) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1")))))))))))))) ((Pcon (SOME (Short "Bin")) ("v10" "v9" "v8" "v7" "v6")) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v14")))) (Var (Short "v13")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "hedgeunion")) (Var (Short "v21")))) (Var (Short "v22")))) (Con (SOME (Short "SOME")) ((Var (Short "v14")))))) (Var (Short "v12")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "trim")) (Var (Short "v21")))) (Var (Short "v22")))) (Con (SOME (Short "SOME")) ((Var (Short "v14")))))) (Con (SOME (Short "Bin")) ((Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))) (Var (Short "v16")))))))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "hedgeunion")) (Var (Short "v21")))) (Con (SOME (Short "SOME")) ((Var (Short "v14")))))) (Var (Short "v23")))) (Var (Short "v11")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "trim")) (Var (Short "v21")))) (Con (SOME (Short "SOME")) ((Var (Short "v14")))))) (Var (Short "v23")))) (Con (SOME (Short "Bin")) ((Var (Short "v20")) (Var (Short "v19")) (Var (Short "v18")) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))) (Var (Short "v16")))))))))))))))))))))) (Dletrec (0 0 0 0 0 0) (("splitlookup" "v18" Fun "v19" (Fun "v20" (Mat (Var (Short "v20")) (((Pcon (SOME (Short "Tip")) nil) Con NONE ((Con (SOME (Short "Tip")) nil) (Con NONE ((Con (SOME (Short "NONE")) nil) (Con (SOME (Short "Tip")) nil))))) ((Pcon (SOME (Short "Bin")) ("v17" "v16" "v15" "v14" "v13")) Mat (App Opapp ((App Opapp ((Var (Short "v18")) (Var (Short "v19")))) (Var (Short "v16")))) (((Pcon (SOME (Short "Less")) nil) Let (SOME "v6") (App Opapp ((App Opapp ((App Opapp ((Var (Short "splitlookup")) (Var (Short "v18")))) (Var (Short "v19")))) (Var (Short "v14")))) (Mat (Var (Short "v6")) (((Pcon NONE ("v5" "v4")) Mat (Var (Short "v4")) (((Pcon NONE ("v3" "v2")) Let (SOME "v1") (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v16")))) (Var (Short "v15")))) (Var (Short "v2")))) (Var (Short "v13")))) (Con NONE ((Var (Short "v5")) (Con NONE ((Var (Short "v3")) (Var (Short "v1")))))))))))) ((Pcon (SOME (Short "Equal")) nil) Con NONE ((Var (Short "v14")) (Con NONE ((Con (SOME (Short "SOME")) ((Var (Short "v15")))) (Var (Short "v13")))))) ((Pcon (SOME (Short "Greater")) nil) Let (SOME "v12") (App Opapp ((App Opapp ((App Opapp ((Var (Short "splitlookup")) (Var (Short "v18")))) (Var (Short "v19")))) (Var (Short "v13")))) (Mat (Var (Short "v12")) (((Pcon NONE ("v11" "v10")) Mat (Var (Short "v10")) (((Pcon NONE ("v9" "v8")) Let (SOME "v7") (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "link")) (Var (Short "v16")))) (Var (Short "v15")))) (Var (Short "v14")))) (Var (Short "v11")))) (Con NONE ((Var (Short "v7")) (Con NONE ((Var (Short "v9")) (Var (Short "v8")))))))))))))))))))) (Dletrec (0 0 0 0 0 0) (("submap'" "v18" Fun "v19" (Fun "v20" (Fun "v21" (Mat (Con NONE ((Var (Short "v20")) (Var (Short "v21")))) (((Pcon NONE ("v17" "v16")) Mat (Var (Short "v17")) (((Pcon (SOME (Short "Tip")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "Bin")) ("v15" "v14" "v13" "v12" "v11")) Mat (Var (Short "v16")) (((Pcon (SOME (Short "Tip")) nil) App OpbLt ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "Bin")) ("v10" "v9" "v8" "v7" "v6")) Mat (App Opapp ((App Opapp ((App Opapp ((Var (Short "splitlookup")) (Var (Short "v18")))) (Var (Short "v14")))) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))))) (((Pcon NONE ("v5" "v4")) Mat (Var (Short "v4")) (((Pcon NONE ("v3" "v2")) Mat (Var (Short "v3")) (((Pcon (SOME (Short "NONE")) nil) App OpbLt ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "SOME")) ("v1")) Log And (Log And (App Opapp ((App Opapp ((Var (Short "v19")) (Var (Short "v13")))) (Var (Short "v1")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "submap'")) (Var (Short "v18")))) (Var (Short "v19")))) (Var (Short "v12")))) (Var (Short "v5"))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "submap'")) (Var (Short "v18")))) (Var (Short "v19")))) (Var (Short "v11")))) (Var (Short "v2")))))))))))))))))))))) (Dlet (0 0 0 0 0 0) "null" (Fun "v6" (Mat (Var (Short "v6")) (((Pcon (SOME (Short "Tip")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) App OpbLt ((Lit 0) (Lit 0))))))) (Dletrec (0 0 0 0 0 0) (("lookup" "v6" Fun "v7" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "NONE")) nil) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Mat (App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v7")))) (Var (Short "v4")))) (((Pcon (SOME (Short "Less")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "lookup")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v2")))) ((Pcon (SOME (Short "Equal")) nil) Con (SOME (Short "SOME")) ((Var (Short "v3")))) ((Pcon (SOME (Short "Greater")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "lookup")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v1")))))))))))) (Dletrec (0 0 0 0 0 0) (("member" "v6" Fun "v7" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) App OpbLt ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Mat (App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v7")))) (Var (Short "v4")))) (((Pcon (SOME (Short "Less")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "member")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v2")))) ((Pcon (SOME (Short "Equal")) nil) App OpbLeq ((Lit 0) (Lit 0))) ((Pcon (SOME (Short "Greater")) nil) App Opapp ((App Opapp ((App Opapp ((Var (Short "member")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v1")))))))))))) (Dlet (0 0 0 0 0 0) "empty" (Con (SOME (Short "Tip")) nil)) (Dletrec (0 0 0 0 0 0) (("insert" "v6" Fun "v7" (Fun "v9" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) App Opapp ((App Opapp ((Var (Short "singleton")) (Var (Short "v7")))) (Var (Short "v9")))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Mat (App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v7")))) (Var (Short "v4")))) (((Pcon (SOME (Short "Less")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancel")) (Var (Short "v4")))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "insert")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v9")))) (Var (Short "v2")))))) (Var (Short "v1")))) ((Pcon (SOME (Short "Equal")) nil) Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v7")) (Var (Short "v9")) (Var (Short "v2")) (Var (Short "v1")))) ((Pcon (SOME (Short "Greater")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancer")) (Var (Short "v4")))) (Var (Short "v3")))) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "insert")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v9")))) (Var (Short "v1"))))))))))))))) (Dletrec (0 0 0 0 0 0) (("delete" "v6" Fun "v7" (Fun "v8" (Mat (Var (Short "v8")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Mat (App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v7")))) (Var (Short "v4")))) (((Pcon (SOME (Short "Less")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancer")) (Var (Short "v4")))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "delete")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v2")))))) (Var (Short "v1")))) ((Pcon (SOME (Short "Equal")) nil) App Opapp ((App Opapp ((Var (Short "glue")) (Var (Short "v2")))) (Var (Short "v1")))) ((Pcon (SOME (Short "Greater")) nil) App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "balancel")) (Var (Short "v4")))) (Var (Short "v3")))) (Var (Short "v2")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "delete")) (Var (Short "v6")))) (Var (Short "v7")))) (Var (Short "v1")))))))))))))) (Dlet (0 0 0 0 0 0) "union" (Fun "v11" (Fun "v12" (Fun "v13" (Mat (Var (Short "v12")) (((Pcon (SOME (Short "Tip")) nil) Var (Short "v13")) ((Pcon (SOME (Short "Bin")) ("v10" "v9" "v8" "v7" "v6")) Mat (Var (Short "v13")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "hedgeunion")) (Var (Short "v11")))) (Con (SOME (Short "NONE")) nil))) (Con (SOME (Short "NONE")) nil))) (Con (SOME (Short "Bin")) ((Var (Short "v10")) (Var (Short "v9")) (Var (Short "v8")) (Var (Short "v7")) (Var (Short "v6")))))) (Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (Var (Short "v3")) (Var (Short "v2")) (Var (Short "v1")))))))))))))) (Dletrec (0 0 0 0 0 0) (("foldrWithKey" "v6" Fun "v8" (Fun "v7" (Mat (Var (Short "v7")) (((Pcon (SOME (Short "Tip")) nil) Var (Short "v8")) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) App Opapp ((App Opapp ((App Opapp ((Var (Short "foldrWithKey")) (Var (Short "v6")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "v6")) (Var (Short "v4")))) (Var (Short "v3")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "foldrWithKey")) (Var (Short "v6")))) (Var (Short "v8")))) (Var (Short "v1")))))))) (Var (Short "v2")))))))))) (Dlet (0 0 0 0 0 0) "toAscList" (Fun "v4" (App Opapp ((App Opapp ((App Opapp ((Var (Short "foldrWithKey")) (Fun "v3" (Fun "v2" (Fun "v1" (Con (SOME (Short "::")) ((Con NONE ((Var (Short "v3")) (Var (Short "v2")))) (Var (Short "v1"))))))))) (Con (SOME (Short "nil")) nil))) (Var (Short "v4")))))) (Dlet (0 0 0 0 0 0) "compare" (Fun "v1" (Fun "v2" (Fun "v3" (Fun "v4" (App Opapp ((App Opapp ((App Opapp ((Var (Long "Compare" (Short "list_compare"))) (App Opapp ((App Opapp ((Var (Long "Compare" (Short "pair_compare"))) (Var (Short "v1")))) (Var (Short "v2")))))) (App Opapp ((Var (Short "toAscList")) (Var (Short "v3")))))) (App Opapp ((Var (Short "toAscList")) (Var (Short "v4"))))))))))) (Dletrec (0 0 0 0 0 0) (("map" "v7" Fun "v6" (Mat (Var (Short "v6")) (((Pcon (SOME (Short "Tip")) nil) Con (SOME (Short "Tip")) nil) ((Pcon (SOME (Short "Bin")) ("v5" "v4" "v3" "v2" "v1")) Con (SOME (Short "Bin")) ((Var (Short "v5")) (Var (Short "v4")) (App Opapp ((Var (Short "v7")) (Var (Short "v3")))) (App Opapp ((App Opapp ((Var (Short "map")) (Var (Short "v7")))) (Var (Short "v2")))) (App Opapp ((App Opapp ((Var (Short "map")) (Var (Short "v7")))) (Var (Short "v1"))))))))))) (Dlet (0 0 0 0 0 0) "isSubmapOfBy" (Fun "v1" (Fun "v2" (Fun "v3" (Fun "v4" (Log And (App OpbLeq ((App Opapp ((Var (Short "size")) (Var (Short "v3")))) (App Opapp ((Var (Short "size")) (Var (Short "v4")))))) (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "submap'")) (Var (Short "v1")))) (Var (Short "v2")))) (Var (Short "v3")))) (Var (Short "v4")))))))))) (Dlet (0 0 0 0 0 0) "isSubmapOf" (Fun "v3" (Fun "v4" (Fun "v5" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "isSubmapOfBy")) (Var (Short "v3")))) (Fun "v2" (Fun "v1" (App Equality ((Var (Short "v2")) (Var (Short "v1")))))))) (Var (Short "v4")))) (Var (Short "v5")))))))) (Dlet (0 0 0 0 0 0) "fromList" (Fun "v5" (Fun "v6" (App Opapp ((App Opapp ((App Opapp ((Var (Long "List" (Short "foldr"))) (Fun "v4" (Mat (Var (Short "v4")) (((Pcon NONE ("v3" "v2")) Fun "v1" (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "insert")) (Var (Short "v5")))) (Var (Short "v3")))) (Var (Short "v2")))) (Var (Short "v1")))))))))) (Var (Short "empty")))) (Var (Short "v6"))))))))) 
(Tmod "CommandLine" NONE ((Dletrec (0 0 0 0 0 0) (("read16bit" "a" Let (SOME "w0") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "a")))) (Lit 0))) (Let (SOME "w1") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "a")))) (Lit 1))) (Let (SOME "c") (App Opapp ((Var (Long "Word8" (Short "toInt"))) (Var (Short "w1")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "*")) (Var (Short "c")))) (Lit 256))) (Let (SOME "b") (App Opapp ((Var (Long "Word8" (Short "toInt"))) (Var (Short "w0")))) (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "b")))) (Var (Short "d"))))))))))) (Dletrec (0 0 0 0 0 0) (("write16bit" "a" Fun "i" (Let (SOME "b") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Var (Short "i")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "update"))) (Var (Short "a")))) (Lit 0))) (Var (Short "b")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "div")) (Var (Short "i")))) (Lit 256))) (Let (SOME "d") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Var (Short "c")))) (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "update"))) (Var (Short "a")))) (Lit 1))) (Var (Short "d"))))))))))) (Dletrec (0 0 0 0 0 0) (("cloop" "a" Fun "n" (Fun "acc" (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Lit 0))) (If (Var (Short "b")) (Var (Short "acc")) (Let (SOME "n") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "n")))) (Lit 1))) (Let (SOME "u") (App Opapp ((App Opapp ((Var (Short "write16bit")) (Var (Short "a")))) (Var (Short "n")))) (Let (SOME "u") (App (FFI . "get_arg_length") ((Lit "") (Var (Short "a")))) (Let (SOME "l") (App Opapp ((Var (Short "read16bit")) (Var (Short "a")))) (Let (SOME "d") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "max")) (Lit 2))) (Var (Short "l")))) (Let (SOME "tmp") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "array"))) (Var (Short "c")))) (Var (Short "d")))) (Let (SOME "u") (App Opapp ((App Opapp ((Var (Short "write16bit")) (Var (Short "tmp")))) (Var (Short "n")))) (Let (SOME "u") (App (FFI . "get_arg") ((Lit "") (Var (Short "tmp")))) (Let (SOME "arg") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "substring"))) (Var (Short "tmp")))) (Lit 0))) (Var (Short "l")))) (Let (SOME "e") (Con (SOME (Short "::")) ((Var (Short "arg")) (Var (Short "acc")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "cloop")) (Var (Short "a")))) (Var (Short "n")))) (Var (Short "e"))))))))))))))))))))) (Dletrec (0 0 0 0 0 0) (("cline" "u" Let (SOME "b") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "a") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "array"))) (Lit 2))) (Var (Short "b")))) (Let (SOME "u") (App (FFI . "get_arg_count") ((Lit "") (Var (Short "a")))) (Let (SOME "n") (App Opapp ((Var (Short "read16bit")) (Var (Short "a")))) (Let (SOME "c") (Con (SOME (Short "nil")) nil) (App Opapp ((App Opapp ((App Opapp ((Var (Short "cloop")) (Var (Short "a")))) (Var (Short "n")))) (Var (Short "c"))))))))))) (Dletrec (0 0 0 0 0 0) (("name" "u" Let (SOME "a") (Con NONE nil) (Let (SOME "b") (App Opapp ((Var (Short "cline")) (Var (Short "a")))) (App Opapp ((Var (Long "List" (Short "hd"))) (Var (Short "b")))))))) (Dletrec (0 0 0 0 0 0) (("arguments" "u" Let (SOME "a") (Con NONE nil) (Let (SOME "b") (App Opapp ((Var (Short "cline")) (Var (Short "a")))) (App Opapp ((Var (Long "List" (Short "tl"))) (Var (Short "b")))))))))) 
(Tmod "Marshalling" NONE ((Dletrec (0 0 0 0 0 0) (("n2w2" "n" Fun "bytes" (Fun "off" (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "div")) (Var (Short "n")))) (Lit 256))) (Let (SOME "c") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Var (Short "b")))) (Let (SOME "a") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "update"))) (Var (Short "bytes")))) (Var (Short "off")))) (Var (Short "c")))) (Let (SOME "e") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Var (Short "n")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "off")))) (Lit 1))) (Let (SOME "a") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "update"))) (Var (Short "bytes")))) (Var (Short "d")))) (Var (Short "e")))) (Con NONE nil))))))))))) (Dletrec (0 0 0 0 0 0) (("w22n" "bytes" Fun "off" (Let (SOME "b1") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "bytes")))) (Var (Short "off")))) (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "off")))) (Lit 1))) (Let (SOME "b0") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "bytes")))) (Var (Short "a")))) (Let (SOME "d") (App Opapp ((Var (Long "Word8" (Short "toInt"))) (Var (Short "b0")))) (Let (SOME "b") (App Opapp ((Var (Long "Word8" (Short "toInt"))) (Var (Short "b1")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "*")) (Var (Short "b")))) (Lit 256))) (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "c")))) (Var (Short "d"))))))))))))))) 
(Tmod "TextIO" NONE ((Dexn (0 0 0 0 0 0) "BadFileName" nil) (Dexn (0 0 0 0 0 0) "InvalidFD" nil) (Dexn (0 0 0 0 0 0) "EndOfFile" nil) (Dlet (0 0 0 0 0 0) "iobuff" (App Aw8alloc ((Lit 2052) (Lit (word8 0))))) (Dlet (0 0 0 0 0 0) "stdIn" (Lit "\\00\\00\\00\\00\\00\\00\\00\\00")) (Dlet (0 0 0 0 0 0) "stdOut" (Lit "\\00\\00\\00\\00\\00\\00\\00\\01")) (Dlet (0 0 0 0 0 0) "stdErr" (Lit "\\00\\00\\00\\00\\00\\00\\00\\02")) (Dletrec (0 0 0 0 0 0) (("writei" "fd" Fun "n" (Fun "i" (Let (SOME "a") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Marshalling" (Short "n2w2"))) (Var (Short "n")))) (Var (Short "iobuff")))) (Lit 0))) (Let (SOME "a") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Marshalling" (Short "n2w2"))) (Var (Short "i")))) (Var (Short "iobuff")))) (Lit 2))) (Let (SOME "a") (App (FFI . "write") ((Var (Short "fd")) (Var (Short "iobuff")))) (Let (SOME "c") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 1))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "iobuff")))) (Lit 0))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "b")))) (Var (Short "c")))) (If (Var (Short "d")) (Let (SOME "e") (Con (SOME (Short "InvalidFD")) nil) (Raise (Var (Short "e")))) (Let (SOME "nw") (App Opapp ((App Opapp ((Var (Long "Marshalling" (Short "w22n"))) (Var (Short "iobuff")))) (Lit 1))) (Let (SOME "f") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "nw")))) (Lit 0))) (If (Var (Short "f")) (App Opapp ((App Opapp ((App Opapp ((Var (Short "writei")) (Var (Short "fd")))) (Var (Short "n")))) (Var (Short "i")))) (Var (Short "nw")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("write" "fd" Fun "n" (Fun "i" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Lit 0))) (If (Var (Short "a")) (Con NONE nil) (Let (SOME "nw") (App Opapp ((App Opapp ((App Opapp ((Var (Short "writei")) (Var (Short "fd")))) (Var (Short "n")))) (Var (Short "i")))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "<")) (Var (Short "nw")))) (Var (Short "n")))) (If (Var (Short "b")) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "i")))) (Var (Short "nw")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "n")))) (Var (Short "nw")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "write")) (Var (Short "fd")))) (Var (Short "c")))) (Var (Short "d")))))) (Con NONE nil)))))))))) (Dletrec (0 0 0 0 0 0) (("output1" "fd" Fun "c" (Let (SOME "a") (App Opapp ((Var (Long "Char" (Short "ord"))) (Var (Short "c")))) (Let (SOME "b") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Var (Short "a")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "update"))) (Var (Short "iobuff")))) (Lit 4))) (Var (Short "b")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Short "write")) (Var (Short "fd")))) (Lit 1))) (Lit 0))) (Con NONE nil)))))))) (Dletrec (0 0 0 0 0 0) (("output" "fd" Fun "s" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "s")))) (Lit ""))) (If (Var (Short "a")) (Con NONE nil) (Let (SOME "z") (App Opapp ((Var (Long "String" (Short "size"))) (Var (Short "s")))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "<=")) (Var (Short "z")))) (Lit 2048))) (Let (SOME "n") (If (Var (Short "b")) (Var (Short "z")) (Lit 2048)) (Let (SOME "fl") (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "copyVec"))) (Var (Short "s")))) (Lit 0))) (Var (Short "n")))) (Var (Short "iobuff")))) (Lit 4))) (Let (SOME "a") (App Opapp ((App Opapp ((App Opapp ((Var (Short "write")) (Var (Short "fd")))) (Var (Short "n")))) (Lit 0))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "z")))) (Var (Short "n")))) (Let (SOME "d") (App Opapp ((App Opapp ((App Opapp ((Var (Long "String" (Short "substring"))) (Var (Short "s")))) (Var (Short "n")))) (Var (Short "c")))) (App Opapp ((App Opapp ((Var (Short "output")) (Var (Short "fd")))) (Var (Short "d")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("print" "s" App Opapp ((App Opapp ((Var (Short "output")) (Var (Short "stdOut")))) (Var (Short "s")))))) (Dletrec (0 0 0 0 0 0) (("print_err" "s" App Opapp ((App Opapp ((Var (Short "output")) (Var (Short "stdErr")))) (Var (Short "s")))))) (Dletrec (0 0 0 0 0 0) (("print_list" "ls" Mat (Var (Short "ls")) (((Pcon (SOME (Short "nil")) nil) Con NONE nil) ((Pcon (SOME (Short "::")) ("x" "xs")) Let NONE (App Opapp ((Var (Short "print")) (Var (Short "x")))) (App Opapp ((Var (Short "print_list")) (Var (Short "xs"))))))))) (Dletrec (0 0 0 0 0 0) (("openIn" "fname" Let (SOME "a") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "array"))) (Lit 9))) (Var (Short "a")))) (Let (SOME "c") (App Opapp ((Var (Long "Char" (Short "chr"))) (Lit 0))) (Let (SOME "d") (App Opapp ((Var (Long "String" (Short "str"))) (Var (Short "c")))) (Let (SOME "e") (App Opapp ((App Opapp ((Var (Short "^")) (Var (Short "fname")))) (Var (Short "d")))) (Let (SOME "a") (App (FFI . "open_in") ((Var (Short "e")) (Var (Short "b")))) (Let (SOME "g") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "f") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "b")))) (Lit 0))) (Let (SOME "h") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "f")))) (Var (Short "g")))) (If (Var (Short "h")) (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "substring"))) (Var (Short "b")))) (Lit 1))) (Lit 8))) (Let (SOME "i") (Con (SOME (Short "BadFileName")) nil) (Raise (Var (Short "i")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("openOut" "fname" Let (SOME "a") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "array"))) (Lit 9))) (Var (Short "a")))) (Let (SOME "c") (App Opapp ((Var (Long "Char" (Short "chr"))) (Lit 0))) (Let (SOME "d") (App Opapp ((Var (Long "String" (Short "str"))) (Var (Short "c")))) (Let (SOME "e") (App Opapp ((App Opapp ((Var (Short "^")) (Var (Short "fname")))) (Var (Short "d")))) (Let (SOME "a") (App (FFI . "open_out") ((Var (Short "e")) (Var (Short "b")))) (Let (SOME "g") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "f") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "b")))) (Lit 0))) (Let (SOME "h") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "f")))) (Var (Short "g")))) (If (Var (Short "h")) (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "substring"))) (Var (Short "b")))) (Lit 1))) (Lit 8))) (Let (SOME "i") (Con (SOME (Short "BadFileName")) nil) (Raise (Var (Short "i")))))))))))))))) (Dletrec (0 0 0 0 0 0) (("close" "fd" Let (SOME "a") (App (FFI . "close") ((Var (Short "fd")) (Var (Short "iobuff")))) (Let (SOME "c") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "iobuff")))) (Lit 0))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "b")))) (Var (Short "c")))) (If (Var (Short "d")) (Con NONE nil) (Let (SOME "e") (Con (SOME (Short "InvalidFD")) nil) (Raise (Var (Short "e"))))))))))) (Dletrec (0 0 0 0 0 0) (("read" "fd" Fun "n" (Let (SOME "a") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Marshalling" (Short "n2w2"))) (Var (Short "n")))) (Var (Short "iobuff")))) (Lit 0))) (Let NONE (App (FFI . "read") ((Var (Short "fd")) (Var (Short "iobuff")))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "iobuff")))) (Lit 0))) (Let (SOME "c") (App Opapp ((Var (Long "Word8" (Short "toInt"))) (Var (Short "b")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "<>")) (Var (Short "c")))) (Lit 1))) (If (Var (Short "d")) (App Opapp ((App Opapp ((Var (Long "Marshalling" (Short "w22n"))) (Var (Short "iobuff")))) (Lit 1))) (Let (SOME "e") (Con (SOME (Short "InvalidFD")) nil) (Raise (Var (Short "e"))))))))))))) (Dletrec (0 0 0 0 0 0) (("read_byte" "fd" Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "read")) (Var (Short "fd")))) (Lit 1))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "a")))) (Lit 0))) (If (Var (Short "b")) (Let (SOME "c") (Con (SOME (Short "EndOfFile")) nil) (Raise (Var (Short "c")))) (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "sub"))) (Var (Short "iobuff")))) (Lit 4)))))))) (Dletrec (0 0 0 0 0 0) (("input1" "fd" Handle (Let (SOME "a") (App Opapp ((Var (Short "read_byte")) (Var (Short "fd")))) (Let (SOME "b") (App Opapp ((Var (Long "Word8" (Short "toInt"))) (Var (Short "a")))) (Let (SOME "c") (App Opapp ((Var (Long "Char" (Short "chr"))) (Var (Short "b")))) (Con (SOME (Short "SOME")) ((Var (Short "c"))))))) (((Pcon (SOME (Short "EndOfFile")) nil) Con (SOME (Short "NONE")) nil))))) (Dletrec (0 0 0 0 0 0) (("input" "fd" Fun "buff" (Fun "off" (Fun "len" (Letrec (("input0" "off" Fun "len" (Fun "count" (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "min")) (Var (Short "len")))) (Lit 2048))) (Let (SOME "nread") (App Opapp ((App Opapp ((Var (Short "read")) (Var (Short "fd")))) (Var (Short "a")))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "nread")))) (Lit 0))) (If (Var (Short "b")) (Var (Short "count")) (Let NONE (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "copy"))) (Var (Short "iobuff")))) (Lit 4))) (Var (Short "nread")))) (Var (Short "buff")))) (Var (Short "off")))) (Let (SOME "e") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "count")))) (Var (Short "nread")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "len")))) (Var (Short "nread")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "off")))) (Var (Short "nread")))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "input0")) (Var (Short "c")))) (Var (Short "d")))) (Var (Short "e"))))))))))))))) (App Opapp ((App Opapp ((App Opapp ((Var (Short "input0")) (Var (Short "off")))) (Var (Short "len")))) (Lit 0))))))))) (Dletrec (0 0 0 0 0 0) (("extend_array" "arr" Let (SOME "len") (App Opapp ((Var (Long "Word8Array" (Short "length"))) (Var (Short "arr")))) (Let (SOME "b") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "*")) (Lit 2))) (Var (Short "len")))) (Let (SOME "arr'") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "array"))) (Var (Short "a")))) (Var (Short "b")))) (Let NONE (App Opapp ((App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "copy"))) (Var (Short "arr")))) (Lit 0))) (Var (Short "len")))) (Var (Short "arr'")))) (Lit 0))) (Var (Short "arr'"))))))))) (Dletrec (0 0 0 0 0 0) (("inputLine" "fd" Let (SOME "a") (App Opapp ((Var (Long "Char" (Short "ord"))) (Lit (char "\\0A")))) (Let (SOME "nl") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Var (Short "a")))) (Letrec (("inputLine_aux" "arr" Fun "i" (Let (SOME "b") (App Opapp ((Var (Long "Word8Array" (Short "length"))) (Var (Short "arr")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "<")) (Var (Short "i")))) (Var (Short "b")))) (If (Var (Short "c")) (Handle (Let (SOME "c") (App Opapp ((Var (Short "read_byte")) (Var (Short "fd")))) (Let (SOME "u") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "update"))) (Var (Short "arr")))) (Var (Short "i")))) (Var (Short "c")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "c")))) (Var (Short "nl")))) (If (Var (Short "d")) (Let (SOME "e") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "i")))) (Lit 1))) (Let (SOME "f") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "substring"))) (Var (Short "arr")))) (Lit 0))) (Var (Short "e")))) (Con (SOME (Short "SOME")) ((Var (Short "f")))))) (Let (SOME "g") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "i")))) (Lit 1))) (App Opapp ((App Opapp ((Var (Short "inputLine_aux")) (Var (Short "arr")))) (Var (Short "g"))))))))) (((Pcon (SOME (Short "EndOfFile")) nil) Let (SOME "h") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "i")))) (Lit 0))) (If (Var (Short "h")) (Con (SOME (Short "NONE")) nil) (Let NONE (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "update"))) (Var (Short "arr")))) (Var (Short "i")))) (Var (Short "nl")))) (Let (SOME "j") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "i")))) (Lit 1))) (Let (SOME "k") (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "substring"))) (Var (Short "arr")))) (Lit 0))) (Var (Short "j")))) (Con (SOME (Short "SOME")) ((Var (Short "k"))))))))))) (Let (SOME "l") (App Opapp ((Var (Short "extend_array")) (Var (Short "arr")))) (App Opapp ((App Opapp ((Var (Short "inputLine_aux")) (Var (Short "l")))) (Var (Short "i")))))))))) (Let (SOME "m") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "n") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "array"))) (Lit 127))) (Var (Short "m")))) (App Opapp ((App Opapp ((Var (Short "inputLine_aux")) (Var (Short "n")))) (Lit 0)))))))))) (Dletrec (0 0 0 0 0 0) (("inputLines" "fd" Let (SOME "a") (App Opapp ((Var (Short "inputLine")) (Var (Short "fd")))) (Mat (Var (Short "a")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "nil")) nil) ((Pcon (SOME (Short "SOME")) ("l")) Let (SOME "b") (App Opapp ((Var (Short "inputLines")) (Var (Short "fd")))) (Con (SOME (Short "::")) ((Var (Short "l")) (Var (Short "b")))))))))) (Dletrec (0 0 0 0 0 0) (("inputLinesFrom" "fname" Handle (Let (SOME "fd") (App Opapp ((Var (Short "openIn")) (Var (Short "fname")))) (Let (SOME "lines") (App Opapp ((Var (Short "inputLines")) (Var (Short "fd")))) (Let NONE (App Opapp ((Var (Short "close")) (Var (Short "fd")))) (Con (SOME (Short "SOME")) ((Var (Short "lines"))))))) (((Pcon (SOME (Short "BadFileName")) nil) Con (SOME (Short "NONE")) nil))))) (Dletrec (0 0 0 0 0 0) (("inputAll" "fd" Letrec (("inputAll_aux" "arr" Fun "i" (Let (SOME "len") (App Opapp ((Var (Long "Word8Array" (Short "length"))) (Var (Short "arr")))) (Let (SOME "a") (App Opapp ((App Opapp ((Var (Short "<")) (Var (Short "i")))) (Var (Short "len")))) (If (Var (Short "a")) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "-")) (Var (Short "len")))) (Var (Short "i")))) (Let (SOME "n") (App Opapp ((App Opapp ((App Opapp ((App Opapp ((Var (Short "input")) (Var (Short "fd")))) (Var (Short "arr")))) (Var (Short "i")))) (Var (Short "b")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "=")) (Var (Short "n")))) (Lit 0))) (If (Var (Short "c")) (App Opapp ((App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "substring"))) (Var (Short "arr")))) (Lit 0))) (Var (Short "i")))) (Let (SOME "d") (App Opapp ((App Opapp ((Var (Short "+")) (Var (Short "i")))) (Var (Short "n")))) (App Opapp ((App Opapp ((Var (Short "inputAll_aux")) (Var (Short "arr")))) (Var (Short "d"))))))))) (Let (SOME "e") (App Opapp ((Var (Short "extend_array")) (Var (Short "arr")))) (App Opapp ((App Opapp ((Var (Short "inputAll_aux")) (Var (Short "e")))) (Var (Short "i")))))))))) (Let (SOME "f") (App Opapp ((Var (Long "Word8" (Short "fromInt"))) (Lit 0))) (Let (SOME "g") (App Opapp ((App Opapp ((Var (Long "Word8Array" (Short "array"))) (Lit 127))) (Var (Short "f")))) (App Opapp ((App Opapp ((Var (Short "inputAll_aux")) (Var (Short "g")))) (Lit 0)))))))))) 
(Tdec (Dtype (0 0 0 0 0 0) ((("'a") "misc_app_list" ("Nil" ) ("Append" (Tapp ((Tvar "'a")) (TC_name (Short "misc_app_list"))) (Tapp ((Tvar "'a")) (TC_name (Short "misc_app_list")))) ("List" (Tapp ((Tvar "'a")) (TC_name (Short "list")))))))) 
(Tmod "PrettyPrinter" NONE ((Dlet (0 0 0 0 0 0) "fromString" (Fun "v1" (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "\"") (Con (SOME (Short "::")) ((Var (Short "v1")) (Con (SOME (Short "::")) ((Lit "\"") (Con (SOME (Short "nil")) nil))))))))))) (Dlet (0 0 0 0 0 0) "fromChar" (Fun "v1" (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "#\"") (Con (SOME (Short "::")) ((App Opapp ((Var (Long "String" (Short "str"))) (Var (Short "v1")))) (Con (SOME (Short "::")) ((Lit "\"") (Con (SOME (Short "nil")) nil))))))))))) (Dlet (0 0 0 0 0 0) "fromBool" (Fun "v1" (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((If (Var (Short "v1")) (Lit "true") (Lit "false")) (Con (SOME (Short "nil")) nil))))))) (Dlet (0 0 0 0 0 0) "fromInt" (Fun "v1" (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((App Opapp ((Var (Long "Int" (Short "toString"))) (Var (Short "v1")))) (Con (SOME (Short "nil")) nil))))))) (Dlet (0 0 0 0 0 0) "fromNum" (Fun "v1" (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((App Opapp ((Var (Long "Num" (Short "toString"))) (Var (Short "v1")))) (Con (SOME (Short "nil")) nil))))))) (Dlet (0 0 0 0 0 0) "fromWord8" (Fun "v1" (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "0wx") (Con (SOME (Short "::")) ((App Opapp ((Var (Long "Num" (Short "toString"))) (App W8toInt ((Var (Short "v1")))))) (Con (SOME (Short "nil")) nil))))))))) (Dlet (0 0 0 0 0 0) "fromWord64" (Fun "v1" (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Con NONE ((Lit "0wx") (App Opapp ((Var (Long "Num" (Short "toString"))) (App W64toInt ((Var (Short "v1")))))))) (Con (SOME (Short "nil")) nil))))))) (Dlet (0 0 0 0 0 0) "fromRat" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon NONE ("v2" "v1")) If (App Equality ((Var (Short "v1")) (Lit 1))) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((App Opapp ((Var (Long "Int" (Short "toString"))) (Var (Short "v2")))) (Con (SOME (Short "nil")) nil))))) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((App Opapp ((Var (Long "Int" (Short "toString"))) (Var (Short "v2")))) (Con (SOME (Short "::")) ((Lit "/") (Con (SOME (Short "::")) ((App Opapp ((Var (Long "Num" (Short "toString"))) (Var (Short "v1")))) (Con (SOME (Short "nil")) nil)))))))))))))) (Dlet (0 0 0 0 0 0) "fromOption" (Fun "v2" (Fun "v3" (Mat (Var (Short "v3")) (((Pcon (SOME (Short "NONE")) nil) Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "NONE") (Con (SOME (Short "nil")) nil))))) ((Pcon (SOME (Short "SOME")) ("v1")) Con (SOME (Short "Append")) ((Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "SOME ") (Con (SOME (Short "nil")) nil))))) (App Opapp ((Var (Short "v2")) (Var (Short "v1"))))))))))) (Dlet (0 0 0 0 0 0) "fromList" (Fun "v5" (Fun "v6" (Mat (Var (Short "v6")) (((Pcon (SOME (Short "nil")) nil) Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "[]") (Con (SOME (Short "nil")) nil))))) ((Pcon (SOME (Short "::")) ("v4" "v3")) Con (SOME (Short "Append")) ((Con (SOME (Short "Append")) ((Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "[") (Con (SOME (Short "nil")) nil))))) (App Opapp ((App Opapp ((App Opapp ((Var (Long "List" (Short "foldl"))) (Fun "v2" (Fun "v1" (Con (SOME (Short "Append")) ((Con (SOME (Short "Append")) ((Var (Short "v2")) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit ", ") (Con (SOME (Short "nil")) nil))))))) (App Opapp ((Var (Short "v5")) (Var (Short "v1")))))))))) (App Opapp ((Var (Short "v5")) (Var (Short "v4")))))) (Var (Short "v3")))))) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "]") (Con (SOME (Short "nil")) nil)))))))))))) (Dlet (0 0 0 0 0 0) "fromArray" (Fun "v5" (Fun "v4" (Con (SOME (Short "Append")) ((App Opapp ((App Opapp ((App Opapp ((Var (Long "List" (Short "foldli"))) (Fun "v3" (Fun "v2" (Fun "v1" (If (App Equality ((Var (Short "v3")) (Lit 0))) (App Opapp ((Var (Short "v5")) (Var (Short "v1")))) (Con (SOME (Short "Append")) ((Con (SOME (Short "Append")) ((Var (Short "v2")) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit ", ") (Con (SOME (Short "nil")) nil))))))) (App Opapp ((Var (Short "v5")) (Var (Short "v1")))))))))))) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "fromList[") (Con (SOME (Short "nil")) nil))))))) (Var (Short "v4")))) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "]") (Con (SOME (Short "nil")) nil)))))))))) (Dlet (0 0 0 0 0 0) "fromVector" (Fun "v4" (Fun "v5" (Con (SOME (Short "Append")) ((App Opapp ((App Opapp ((App Opapp ((Var (Long "List" (Short "foldli"))) (Fun "v3" (Fun "v2" (Fun "v1" (If (App Equality ((Var (Short "v3")) (Lit 0))) (App Opapp ((Var (Short "v4")) (Var (Short "v1")))) (Con (SOME (Short "Append")) ((Con (SOME (Short "Append")) ((Var (Short "v2")) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit ", ") (Con (SOME (Short "nil")) nil))))))) (App Opapp ((Var (Short "v4")) (Var (Short "v1")))))))))))) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "fromList[") (Con (SOME (Short "nil")) nil))))))) (Var (Short "v5")))) (Con (SOME (Short "List")) ((Con (SOME (Short "::")) ((Lit "]") (Con (SOME (Short "nil")) nil)))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) "print" (Var (Long "TextIO" (Short "print"))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("print_app_list" "ls" Mat (Var (Short "ls")) (((Pcon (SOME (Short "Nil")) nil) Con NONE nil) ((Pcon (SOME (Short "List")) ("ls")) App Opapp ((Var (Long "TextIO" (Short "print_list"))) (Var (Short "ls")))) ((Pcon (SOME (Short "Append")) ("l1" "l2")) Let NONE (App Opapp ((Var (Short "print_app_list")) (Var (Short "l1")))) (App Opapp ((Var (Short "print_app_list")) (Var (Short "l2")))))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("print_int" "i" Let (SOME "a") (App Opapp ((Var (Long "Int" (Short "toString"))) (Var (Short "i")))) (App Opapp ((Var (Long "TextIO" (Short "print"))) (Var (Short "a")))))))) 
(Tmod "FirstFunc" NONE ((Dletrec (0 0 0 0 0 0) (("firstFunc" "u" App Opapp ((Var (Long "TextIO" (Short "print"))) (Lit "Hello from firstFunc!\\0A"))))))) 
(Tmod "SecondFunc" NONE ((Dlet (0 0 0 0 0 0) "pureFunc" (Fun "v1" (If (App Equality ((Var (Short "v1")) (Lit 1))) (Lit "firstFunc") (If (App Equality ((Var (Short "v1")) (Lit 2))) (If (App Equality ((Lit 2) (Lit 1))) (Lit "firstFunc") (Lit "secondFunc")) (If (App Equality ((Var (Short "v1")) (Lit 1))) (Lit "firstFunc") (If (App Equality ((Var (Short "v1")) (Lit 2))) (Lit "secondFunc") (Lit "undefined"))))))) (Dletrec (0 0 0 0 0 0) (("secondFunc" "u" Let (SOME "a") (App Opapp ((Var (Short "pureFunc")) (Lit 2))) (Let (SOME "b") (App Opapp ((App Opapp ((Var (Short "^")) (Lit "Hello from "))) (Var (Short "a")))) (Let (SOME "c") (App Opapp ((App Opapp ((Var (Short "^")) (Var (Short "b")))) (Lit "!\\0A"))) (App Opapp ((Var (Long "TextIO" (Short "print"))) (Var (Short "c"))))))))))) 
(Tdec (Dletrec (0 0 0 0 0 0) (("supervisor" nil Mat (Var (Short nil)) ((Pany Let (SOME "a") (Con NONE nil) (Let NONE (App Opapp ((Var (Long "FirstFunc" (Short "firstFunc"))) (Var (Short "a")))) (Let (SOME "b") (Con NONE nil) (App Opapp ((Var (Long "SecondFunc" (Short "secondFunc"))) (Var (Short "b")))))))))))) 
(Tdec (Dlet (0 0 0 0 0 0) (Pcon NONE nil) (App Opapp ((Var (Short "supervisor")) (Con NONE nil)))))
)
xrchz commented 6 years ago

Regarding @mn200's point 2: yes it has been verified! See fromSexpTheory.

This is starting to look like a problem in the totally unverified CF ANF machinery and nothing to do with the totally verified sexps.

xrchz commented 6 years ago

What exactly fails? Is it actually type checking failing?

michaelsproul commented 6 years ago

Parsing fails, the error is just ERROR: parse error (not sure how to get more info)

xrchz commented 6 years ago

Could you provide more information on how you invoke CakeML (I guess just cake --sexp=true < foo for some file foo?), the output of cake --version, and how the contents of the file foo were produced? I presume your previous message contains exactly those contents?

myreen commented 6 years ago

Also, is the generated s-expression generated using the verified printer function or the unverified SML version?

mn200 commented 6 years ago

Cool that the AST to sexp stuff has been verified; I probably should have known/remembered this. I agree that ANFy things look to blame.