Created
April 9, 2017 19:17
-
-
Save olafurpg/44ee2d0a8c5b8330702cf00d23d0978a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Source( | |
Seq( | |
Pkg( | |
Term.Select( | |
Term.Select(Term.Select(Term.Name("com"), Term.Name("github")), Term.Name("johnynek")), | |
Term.Name("paiges")), | |
Seq( | |
Import( | |
Seq( | |
Importer( | |
Term.Select(Term.Name("java"), Term.Name("io")), | |
Seq(Importee.Name(Name.Indeterminate("PrintWriter")))))), | |
Import( | |
Seq( | |
Importer( | |
Term.Select(Term.Name("java"), Term.Name("lang")), | |
Seq(Importee.Name(Name.Indeterminate("StringBuilder")))))), | |
Import( | |
Seq( | |
Importer( | |
Term.Select(Term.Name("scala"), Term.Name("annotation")), | |
Seq(Importee.Name(Name.Indeterminate("tailrec")))))), | |
Import( | |
Seq( | |
Importer( | |
Term.Select( | |
Term.Select(Term.Name("scala"), Term.Name("util")), Term.Name("matching")), | |
Seq(Importee.Name(Name.Indeterminate("Regex")))))), | |
Defn.Class( | |
Seq(Mod.Sealed(), Mod.Abstract()), Type.Name("Doc"), Nil, | |
Ctor.Primary(Nil, Ctor.Ref.Name("this"), Nil), | |
Template( | |
Nil, Seq(Ctor.Ref.Name("Product"), Ctor.Ref.Name("Serializable")), | |
Term.Param(Nil, Name.Anonymous(), None, None), | |
Some( | |
Seq( | |
Import( | |
Seq( | |
Importer( | |
Term.Name("Doc"), | |
Seq( | |
Importee.Name(Name.Indeterminate("Empty")), | |
Importee.Name(Name.Indeterminate("Text")), | |
Importee.Name(Name.Indeterminate("Line")), | |
Importee.Name(Name.Indeterminate("Nest")), | |
Importee.Name(Name.Indeterminate("Concat")), | |
Importee.Name(Name.Indeterminate("Union")))))), | |
Defn.Def( | |
Nil, Term.Name("+"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("Concat"), Seq(Term.This(Name.Anonymous()), Term.Name("that")))), | |
Defn.Def( | |
Nil, Term.Name("+:"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("str"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Select(Term.Name("Doc"), Term.Name("text")), Seq(Term.Name("str"))), | |
Term.Name("+"), Nil, Seq(Term.This(Name.Anonymous())))), | |
Defn.Def( | |
Nil, Term.Name(":+"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("str"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), | |
Term.ApplyInfix( | |
Term.This(Name.Anonymous()), Term.Name("+"), Nil, | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("Doc"), Term.Name("text")), Seq(Term.Name("str")))))), | |
Defn.Def( | |
Nil, Term.Name("*"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("n"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("Doc")), Term.Apply(Term.Name("repeat"), Seq(Term.Name("n")))), | |
Defn.Def( | |
Nil, Term.Name("/"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.This(Name.Anonymous()), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Select(Term.Name("Doc"), Term.Name("line")), Term.Name("that")))))), | |
Defn.Def( | |
Nil, Term.Name("line"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Doc")), | |
Term.ApplyInfix( | |
Term.This(Name.Anonymous()), Term.Name("/"), Nil, Seq(Term.Name("that")))), | |
Defn.Def( | |
Nil, Term.Name("/:"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("str"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("Doc"), Term.Name("text")), Seq(Term.Name("str"))), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Select(Term.Name("Doc"), Term.Name("line")), | |
Term.This(Name.Anonymous())))))), | |
Defn.Def( | |
Nil, Term.Name(":/"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("str"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), | |
Term.ApplyInfix( | |
Term.This(Name.Anonymous()), Term.Name("/"), Nil, | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("Doc"), Term.Name("text")), Seq(Term.Name("str")))))), | |
Defn.Def( | |
Nil, Term.Name("line"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("str"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), | |
Term.ApplyInfix( | |
Term.This(Name.Anonymous()), Term.Name(":/"), Nil, Seq(Term.Name("str")))), | |
Defn.Def( | |
Nil, Term.Name("space"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.This(Name.Anonymous()), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Select(Term.Name("Doc"), Term.Name("space")), Term.Name("that")))))), | |
Defn.Def( | |
Nil, Term.Name("space"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Select(Term.This(Name.Anonymous()), Term.Name("space")), | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("Doc"), Term.Name("text")), | |
Seq(Term.Name("that")))))), | |
Defn.Def( | |
Nil, Term.Name("spaceOrLine"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.This(Name.Anonymous()), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Select(Term.Name("Doc"), Term.Name("spaceOrLine")), | |
Term.Name("that")))))), | |
Defn.Def( | |
Nil, Term.Name("spaceOrLine"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("spaceOrLine"), | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("Doc"), Term.Name("text")), | |
Seq(Term.Name("that")))))), | |
Defn.Def( | |
Nil, Term.Name("bracketBy"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("left"), Some(Type.Name("Doc")), None), | |
Term.Param(Nil, Term.Name("right"), Some(Type.Name("Doc")), None), | |
Term.Param(Nil, Term.Name("indent"), Some(Type.Name("Int")), Some(Lit(2))))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Name("left"), | |
Term.Select( | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Apply( | |
Term.Select( | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Select(Term.Name("Doc"), Term.Name("line")), | |
Term.This(Name.Anonymous()))), | |
Term.Name("nest")), | |
Seq(Term.Name("indent"))), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Select(Term.Name("Doc"), Term.Name("empty")), | |
Term.Name("right"))))), | |
Term.Name("grouped"))))), | |
Defn.Def( | |
Nil, Term.Name("grouped"), Nil, Nil, Some(Type.Name("Doc")), | |
Term.Match( | |
Term.Name("flattenOption"), | |
Seq( | |
Case( | |
Pat.Extract(Term.Name("Some"), Nil, Seq(Pat.Var.Term(Term.Name("flat")))), | |
None, | |
Term.Apply( | |
Term.Name("Union"), | |
Seq(Term.Name("flat"), Term.Function(Nil, Term.This(Name.Anonymous()))))), | |
Case(Term.Name("None"), None, Term.This(Name.Anonymous()))))), | |
Defn.Def( | |
Nil, Term.Name("isEmpty"), Nil, Nil, Some(Type.Name("Boolean")), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("loop"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("doc"), Some(Type.Name("Doc")), None), | |
Term.Param( | |
Nil, Term.Name("stack"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("Doc")))), None))), | |
Some(Type.Name("Boolean")), | |
Term.Match( | |
Term.Name("doc"), | |
Seq( | |
Case( | |
Term.Name("Empty"), None, | |
Term.Match( | |
Term.Name("stack"), | |
Seq( | |
Case( | |
Pat.ExtractInfix( | |
Pat.Var.Term(Term.Name("d1")), Term.Name("::"), | |
Seq(Pat.Var.Term(Term.Name("tail")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), Seq(Term.Name("d1"), Term.Name("tail")))), | |
Case(Term.Name("Nil"), None, Lit(true))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Concat"), Nil, Seq(Pat.Wildcard(), Term.Name("Line"))), | |
None, Lit(false)), | |
Case( | |
Pat.Extract( | |
Term.Name("Concat"), Nil, | |
Seq( | |
Pat.Var.Term(Term.Name("a")), | |
Pat.Extract( | |
Term.Name("Text"), Nil, Seq(Pat.Var.Term(Term.Name("s")))))), | |
None, | |
Term.ApplyInfix( | |
Term.Select(Term.Name("s"), Term.Name("isEmpty")), Term.Name("&&"), | |
Nil, | |
Seq( | |
Term.Apply( | |
Term.Name("loop"), Seq(Term.Name("a"), Term.Name("stack")))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Concat"), Nil, | |
Seq(Pat.Var.Term(Term.Name("a")), Pat.Var.Term(Term.Name("b")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("a"), | |
Term.ApplyInfix( | |
Term.Name("b"), Term.Name("::"), Nil, | |
Seq(Term.Name("stack")))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Nest"), Nil, | |
Seq(Pat.Var.Term(Term.Name("i")), Pat.Var.Term(Term.Name("d")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), Seq(Term.Name("d"), Term.Name("stack")))), | |
Case( | |
Pat.Extract( | |
Term.Name("Text"), Nil, Seq(Pat.Var.Term(Term.Name("s")))), | |
None, | |
Term.ApplyInfix( | |
Term.Select(Term.Name("s"), Term.Name("isEmpty")), Term.Name("&&"), | |
Nil, | |
Seq( | |
Term.Apply( | |
Term.Name("loop"), | |
Seq(Term.Name("Empty"), Term.Name("stack")))))), | |
Case(Term.Name("Line"), None, Lit(false)), | |
Case( | |
Pat.Extract( | |
Term.Name("Union"), Nil, | |
Seq(Pat.Var.Term(Term.Name("flattened")), Pat.Wildcard())), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq(Term.Name("flattened"), Term.Name("stack"))))))), | |
Term.Apply( | |
Term.Name("loop"), Seq(Term.This(Name.Anonymous()), Term.Name("Nil")))))), | |
Defn.Def( | |
Nil, Term.Name("isSubDocOf"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Boolean")), | |
Term.Apply( | |
Term.Select(Term.Name("DocTree"), Term.Name("isSubDoc")), | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("DocTree"), Term.Name("toDocTree")), | |
Seq(Term.This(Name.Anonymous()))), | |
Term.Apply( | |
Term.Select(Term.Name("DocTree"), Term.Name("toDocTree")), | |
Seq(Term.Name("that")))))), | |
Defn.Def( | |
Nil, Term.Name("render"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("width"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("String")), | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("bldr"))), None, | |
Term.New( | |
Template( | |
Nil, Seq(Ctor.Ref.Name("StringBuilder")), | |
Term.Param(Nil, Name.Anonymous(), None, None), None))), | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("it"))), None, | |
Term.Apply( | |
Term.Select(Term.Name("Chunk"), Term.Name("best")), | |
Seq(Term.Name("width"), Term.This(Name.Anonymous())))), | |
Term.While( | |
Term.Select(Term.Name("it"), Term.Name("hasNext")), | |
Term.Block( | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("bldr"), Term.Name("append")), | |
Seq(Term.Select(Term.Name("it"), Term.Name("next"))))))), | |
Term.Select(Term.Name("bldr"), Term.Name("toString"))))), | |
Defn.Def( | |
Nil, Term.Name("renderStream"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("width"), Some(Type.Name("Int")), None))), | |
Some(Type.Apply(Type.Name("Stream"), Seq(Type.Name("String")))), | |
Term.If( | |
Term.ApplyInfix(Term.Name("width"), Term.Name("<="), Nil, Seq(Lit(0))), | |
Term.Name("renderTallStream"), | |
Term.Select( | |
Term.Apply( | |
Term.Select(Term.Name("Chunk"), Term.Name("best")), | |
Seq(Term.Name("width"), Term.This(Name.Anonymous()))), | |
Term.Name("toStream")))), | |
Defn.Def( | |
Nil, Term.Name("renderTallStream"), Nil, Nil, | |
Some(Type.Apply(Type.Name("Stream"), Seq(Type.Name("String")))), | |
Term.Apply( | |
Term.Name("renderFixedDirection"), | |
Seq(Term.Arg.Named(Term.Name("tall"), Lit(true))))), | |
Defn.Def( | |
Nil, Term.Name("renderWideStream"), Nil, Nil, | |
Some(Type.Apply(Type.Name("Stream"), Seq(Type.Name("String")))), | |
Term.Apply( | |
Term.Name("renderFixedDirection"), | |
Seq(Term.Arg.Named(Term.Name("tall"), Lit(false))))), | |
Defn.Def( | |
Seq(Mod.Private(Name.Anonymous())), Term.Name("renderFixedDirection"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("tall"), Some(Type.Name("Boolean")), None))), | |
Some(Type.Apply(Type.Name("Stream"), Seq(Type.Name("String")))), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("loop"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("pos"), Some(Type.Name("Int")), None), | |
Term.Param( | |
Nil, Term.Name("lst"), | |
Some( | |
Type.Apply( | |
Type.Name("List"), | |
Seq(Type.Tuple(Seq(Type.Name("Int"), Type.Name("Doc")))))), | |
None))), | |
Some(Type.Apply(Type.Name("Stream"), Seq(Type.Name("String")))), | |
Term.Match( | |
Term.Name("lst"), | |
Seq( | |
Case( | |
Term.Name("Nil"), None, | |
Term.Select(Term.Name("Stream"), Term.Name("empty"))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple(Seq(Pat.Var.Term(Term.Name("i")), Term.Name("Empty"))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply(Term.Name("loop"), Seq(Term.Name("pos"), Term.Name("z")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Extract( | |
Term.Name("Concat"), Nil, | |
Seq( | |
Pat.Var.Term(Term.Name("a")), | |
Pat.Var.Term(Term.Name("b")))))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("pos"), | |
Term.ApplyInfix( | |
Term.Tuple(Seq(Term.Name("i"), Term.Name("a"))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Tuple(Seq(Term.Name("i"), Term.Name("b"))), | |
Term.Name("::"), Nil, Seq(Term.Name("z")))))))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Extract( | |
Term.Name("Nest"), Nil, | |
Seq( | |
Pat.Var.Term(Term.Name("j")), | |
Pat.Var.Term(Term.Name("d")))))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("pos"), | |
Term.ApplyInfix( | |
Term.Tuple( | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("i"), Term.Name("+"), Nil, Seq(Term.Name("j"))), | |
Term.Name("d"))), | |
Term.Name("::"), Nil, Seq(Term.Name("z")))))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Extract( | |
Term.Name("Text"), Nil, Seq(Pat.Var.Term(Term.Name("s")))))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.ApplyInfix( | |
Term.Name("s"), Term.Name("#::"), Nil, | |
Seq( | |
Term.Apply( | |
Term.Name("cheat"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("pos"), Term.Name("+"), Nil, | |
Seq(Term.Select(Term.Name("s"), Term.Name("length")))), | |
Term.Name("z")))))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple(Seq(Pat.Var.Term(Term.Name("i")), Term.Name("Line"))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Select(Term.Name("Chunk"), Term.Name("lineToStr")), | |
Seq(Term.Name("i"))), | |
Term.Name("#::"), Nil, | |
Seq( | |
Term.Apply( | |
Term.Name("cheat"), Seq(Term.Name("i"), Term.Name("z")))))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Bind( | |
Pat.Var.Term(Term.Name("u")), | |
Pat.Extract( | |
Term.Name("Union"), Nil, | |
Seq(Pat.Var.Term(Term.Name("a")), Pat.Wildcard()))))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("next"))), None, | |
Term.If( | |
Term.Name("tall"), | |
Term.Select(Term.Name("u"), Term.Name("bDoc")), | |
Term.Name("a"))), | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("pos"), | |
Term.ApplyInfix( | |
Term.Tuple(Seq(Term.Name("i"), Term.Name("next"))), | |
Term.Name("::"), Nil, Seq(Term.Name("z"))))))))))), | |
Defn.Def( | |
Nil, Term.Name("cheat"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("pos"), Some(Type.Name("Int")), None), | |
Term.Param( | |
Nil, Term.Name("lst"), | |
Some( | |
Type.Apply( | |
Type.Name("List"), | |
Seq(Type.Tuple(Seq(Type.Name("Int"), Type.Name("Doc")))))), | |
None))), | |
None, | |
Term.Apply(Term.Name("loop"), Seq(Term.Name("pos"), Term.Name("lst")))), | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Lit(0), | |
Term.ApplyInfix( | |
Term.Tuple(Seq(Lit(0), Term.This(Name.Anonymous()))), Term.Name("::"), | |
Nil, Seq(Term.Name("Nil")))))))), | |
Defn.Def( | |
Nil, Term.Name("repeat"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("count"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("Doc")), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Nil, Term.Name("loop"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("d"), Some(Type.Name("Doc")), None), | |
Term.Param(Nil, Term.Name("cnt"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("Doc")), | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("n"))), None, | |
Term.ApplyInfix(Term.Name("cnt"), Term.Name(">>"), Nil, Seq(Lit(1)))), | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("dn2"))), None, | |
Term.If( | |
Term.ApplyInfix(Term.Name("n"), Term.Name(">"), Nil, Seq(Lit(0))), | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("dn"))), None, | |
Term.Apply( | |
Term.Name("loop"), Seq(Term.Name("d"), Term.Name("n")))), | |
Term.Apply( | |
Term.Name("Concat"), Seq(Term.Name("dn"), Term.Name("dn"))))), | |
Term.Block(Seq(Term.Name("Empty"))))), | |
Term.If( | |
Term.ApplyInfix( | |
Term.ApplyInfix(Term.Name("cnt"), Term.Name("&"), Nil, Seq(Lit(1))), | |
Term.Name("=="), Nil, Seq(Lit(1))), | |
Term.Apply( | |
Term.Name("Concat"), Seq(Term.Name("dn2"), Term.Name("d"))), | |
Term.Name("dn2"))))), | |
Term.If( | |
Term.ApplyInfix(Term.Name("count"), Term.Name("<="), Nil, Seq(Lit(0))), | |
Term.Name("Empty"), | |
Term.Apply( | |
Term.Name("loop"), | |
Seq(Term.This(Name.Anonymous()), Term.Name("count"))))))), | |
Defn.Def( | |
Nil, Term.Name("nest"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("amount"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("Doc")), | |
Term.Match( | |
Term.This(Name.Anonymous()), | |
Seq( | |
Case( | |
Pat.Extract( | |
Term.Name("Nest"), Nil, | |
Seq(Pat.Var.Term(Term.Name("i")), Pat.Var.Term(Term.Name("d")))), | |
None, | |
Term.Apply( | |
Term.Name("Nest"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("i"), Term.Name("+"), Nil, Seq(Term.Name("amount"))), | |
Term.Name("d")))), | |
Case( | |
Pat.Wildcard(), None, | |
Term.Apply( | |
Term.Name("Nest"), | |
Seq(Term.Name("amount"), Term.This(Name.Anonymous()))))))), | |
Defn.Def( | |
Nil, Term.Name("writeTo"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("width"), Some(Type.Name("Int")), None), | |
Term.Param(Nil, Term.Name("pw"), Some(Type.Name("PrintWriter")), None))), | |
Some(Type.Name("Unit")), | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("it"))), None, | |
Term.Apply( | |
Term.Select(Term.Name("Chunk"), Term.Name("best")), | |
Seq(Term.Name("width"), Term.This(Name.Anonymous())))), | |
Term.While( | |
Term.Select(Term.Name("it"), Term.Name("hasNext")), | |
Term.Block( | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("pw"), Term.Name("append")), | |
Seq(Term.Select(Term.Name("it"), Term.Name("next")))))))))), | |
Defn.Val( | |
Seq(Mod.Override(), Mod.Lazy()), Seq(Pat.Var.Term(Term.Name("hashCode"))), | |
Some(Type.Name("Int")), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("inline"))), Term.Name("hash"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("curr"), Some(Type.Name("Int")), None), | |
Term.Param(Nil, Term.Name("c"), Some(Type.Name("Char")), None))), | |
Some(Type.Name("Int")), | |
Term.ApplyInfix( | |
Term.ApplyInfix( | |
Term.Name("curr"), Term.Name("*"), Nil, Seq(Lit(1500450271))), | |
Term.Name("+"), Nil, | |
Seq(Term.Select(Term.Name("c"), Term.Name("toInt"))))), | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("shash"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("n"), Some(Type.Name("Int")), None), | |
Term.Param(Nil, Term.Name("s"), Some(Type.Name("String")), None), | |
Term.Param(Nil, Term.Name("i"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("Int")), | |
Term.If( | |
Term.ApplyInfix( | |
Term.Name("i"), Term.Name("<"), Nil, | |
Seq(Term.Select(Term.Name("s"), Term.Name("length")))), | |
Term.Apply( | |
Term.Name("shash"), | |
Seq( | |
Term.Apply( | |
Term.Name("hash"), | |
Seq( | |
Term.Name("n"), | |
Term.Apply( | |
Term.Select(Term.Name("s"), Term.Name("charAt")), | |
Seq(Term.Name("i"))))), | |
Term.Name("s"), | |
Term.ApplyInfix(Term.Name("i"), Term.Name("+"), Nil, Seq(Lit(1))))), | |
Term.Name("n"))), | |
Term.Apply( | |
Term.Apply( | |
Term.Select(Term.Name("renderWideStream"), Term.Name("foldLeft")), | |
Seq(Lit(0xdead60d5))), | |
Seq( | |
Term.PartialFunction( | |
Seq( | |
Case( | |
Pat.Tuple( | |
Seq(Pat.Var.Term(Term.Name("n")), Pat.Var.Term(Term.Name("s")))), | |
None, | |
Term.Apply( | |
Term.Name("shash"), | |
Seq(Term.Name("n"), Term.Name("s"), Lit(0))))))))))), | |
Defn.Def( | |
Seq(Mod.Override()), Term.Name("toString"), Nil, Nil, Some(Type.Name("String")), | |
Lit("Doc(...)")), | |
Defn.Def( | |
Nil, Term.Name("representation"), Nil, | |
Seq( | |
Seq( | |
Term.Param( | |
Nil, Term.Name("forceUnions"), Some(Type.Name("Boolean")), | |
Some(Lit(false))))), | |
Some(Type.Name("Doc")), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("loop"), Nil, | |
Seq( | |
Seq( | |
Term.Param( | |
Nil, Term.Name("stack"), | |
Some( | |
Type.Apply( | |
Type.Name("List"), | |
Seq( | |
Type.Apply( | |
Type.Name("Either"), | |
Seq(Type.Name("Doc"), Type.Name("String")))))), | |
None), | |
Term.Param(Nil, Term.Name("suffix"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Doc")), | |
Term.Match( | |
Term.Name("stack"), | |
Seq( | |
Case( | |
Pat.ExtractInfix( | |
Pat.Var.Term(Term.Name("head")), Term.Name("::"), | |
Seq(Pat.Var.Term(Term.Name("tail")))), | |
None, | |
Term.Match( | |
Term.Name("head"), | |
Seq( | |
Case( | |
Pat.Extract( | |
Term.Name("Right"), Nil, Seq(Pat.Var.Term(Term.Name("s")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("tail"), | |
Term.ApplyInfix( | |
Term.Name("s"), Term.Name("+:"), Nil, | |
Seq(Term.Name("suffix")))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Left"), Nil, Seq(Pat.Var.Term(Term.Name("d")))), | |
None, | |
Term.Match( | |
Term.Name("d"), | |
Seq( | |
Case( | |
Term.Name("Empty"), None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("tail"), | |
Term.ApplyInfix( | |
Lit("Empty"), Term.Name("+:"), Nil, | |
Seq(Term.Name("suffix")))))), | |
Case( | |
Term.Name("Line"), None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("tail"), | |
Term.ApplyInfix( | |
Lit("Line"), Term.Name("+:"), Nil, | |
Seq(Term.Name("suffix")))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Text"), Nil, | |
Seq(Pat.Var.Term(Term.Name("s")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("tail"), | |
Term.ApplyInfix( | |
Lit("Text("), Term.Name("+:"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("s"), Term.Name("+:"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Lit(")"), Term.Name("+:"), Nil, | |
Seq(Term.Name("suffix")))))))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Nest"), Nil, | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Var.Term(Term.Name("d")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply(Term.Name("Left"), Seq(Term.Name("d"))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply(Term.Name("Right"), Seq(Lit(", "))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Right"), | |
Seq( | |
Term.Select( | |
Term.Name("i"), | |
Term.Name("toString")))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Right"), | |
Seq(Lit("Nest("))), | |
Term.Name("::"), Nil, | |
Seq(Term.Name("tail"))))))))), | |
Term.ApplyInfix( | |
Lit(")"), Term.Name("+:"), Nil, | |
Seq(Term.Name("suffix")))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Concat"), Nil, | |
Seq( | |
Pat.Var.Term(Term.Name("x")), | |
Pat.Var.Term(Term.Name("y")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply(Term.Name("Left"), Seq(Term.Name("y"))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply(Term.Name("Right"), Seq(Lit(", "))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Left"), Seq(Term.Name("x"))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Right"), | |
Seq(Lit("Concat("))), | |
Term.Name("::"), Nil, | |
Seq(Term.Name("tail"))))))))), | |
Term.ApplyInfix( | |
Lit(")"), Term.Name("+:"), Nil, | |
Seq(Term.Name("suffix")))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Union"), Nil, | |
Seq( | |
Pat.Var.Term(Term.Name("x")), | |
Pat.Var.Term(Term.Name("y")))), | |
None, | |
Term.If( | |
Term.Name("forceUnions"), | |
Term.Block( | |
Seq( | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Left"), | |
Seq(Term.Apply(Term.Name("y"), Nil))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Right"), Seq(Lit(", "))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Left"), | |
Seq(Term.Name("x"))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Right"), | |
Seq(Lit("Union("))), | |
Term.Name("::"), Nil, | |
Seq(Term.Name("tail"))))))))), | |
Term.ApplyInfix( | |
Lit(")"), Term.Name("+:"), Nil, | |
Seq(Term.Name("suffix"))))))), | |
Term.Block( | |
Seq( | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Left"), Seq(Term.Name("x"))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Name("Right"), Seq(Lit("Union("))), | |
Term.Name("::"), Nil, | |
Seq(Term.Name("tail"))))), | |
Term.ApplyInfix( | |
Lit(", ...)"), Term.Name("+:"), Nil, | |
Seq(Term.Name("suffix"))))))))))))))), | |
Case(Term.Name("Nil"), None, Term.Name("suffix"))))), | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Apply(Term.Name("Left"), Seq(Term.This(Name.Anonymous()))), | |
Term.Name("::"), Nil, Seq(Term.Name("Nil"))), | |
Term.Select(Term.Name("Doc"), Term.Name("empty"))))))), | |
Defn.Def( | |
Nil, Term.Name("compare"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("that"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Int")), | |
Term.Apply( | |
Term.Select(Term.Name("DocTree"), Term.Name("compareTree")), | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("DocTree"), Term.Name("toDocTree")), | |
Seq(Term.This(Name.Anonymous()))), | |
Term.Apply( | |
Term.Select(Term.Name("DocTree"), Term.Name("toDocTree")), | |
Seq(Term.Name("that")))))), | |
Defn.Def( | |
Nil, Term.Name("flatten"), Nil, Nil, Some(Type.Name("Doc")), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Nil, Term.Name("finish"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("d"), Some(Type.Name("Doc")), None), | |
Term.Param( | |
Nil, Term.Name("front"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("Doc")))), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Apply( | |
Term.Select(Term.Name("front"), Term.Name("foldLeft")), | |
Seq(Term.Name("d"))), | |
Seq( | |
Term.Block( | |
Seq( | |
Term.Function( | |
Seq( | |
Term.Param(Nil, Term.Name("res"), None, None), | |
Term.Param(Nil, Term.Name("f"), None, None)), | |
Term.Block( | |
Seq( | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq(Term.Name("f"), Term.Name("res"))))))))))), | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("loop"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("h"), Some(Type.Name("Doc")), None), | |
Term.Param( | |
Nil, Term.Name("stack"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("Doc")))), None), | |
Term.Param( | |
Nil, Term.Name("front"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("Doc")))), None))), | |
Some(Type.Name("Doc")), | |
Term.Match( | |
Term.Name("h"), | |
Seq( | |
Case( | |
Pat.Alternative( | |
Term.Name("Empty"), | |
Pat.Extract(Term.Name("Text"), Nil, Seq(Pat.Wildcard()))), | |
None, | |
Term.Match( | |
Term.Name("stack"), | |
Seq( | |
Case( | |
Term.Name("Nil"), None, | |
Term.Apply( | |
Term.Name("finish"), | |
Seq(Term.Name("h"), Term.Name("front")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Var.Term(Term.Name("x")), Term.Name("::"), | |
Seq(Pat.Var.Term(Term.Name("xs")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("x"), Term.Name("xs"), | |
Term.ApplyInfix( | |
Term.Name("h"), Term.Name("::"), Nil, | |
Seq(Term.Name("front"))))))))), | |
Case( | |
Term.Name("Line"), None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Select(Term.Name("Doc"), Term.Name("space")), | |
Term.Name("stack"), Term.Name("front")))), | |
Case( | |
Pat.Extract( | |
Term.Name("Nest"), Nil, | |
Seq(Pat.Var.Term(Term.Name("i")), Pat.Var.Term(Term.Name("d")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq(Term.Name("d"), Term.Name("stack"), Term.Name("front")))), | |
Case( | |
Pat.Extract( | |
Term.Name("Union"), Nil, | |
Seq(Pat.Var.Term(Term.Name("a")), Pat.Wildcard())), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq(Term.Name("a"), Term.Name("stack"), Term.Name("front")))), | |
Case( | |
Pat.Extract( | |
Term.Name("Concat"), Nil, | |
Seq(Pat.Var.Term(Term.Name("a")), Pat.Var.Term(Term.Name("b")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("a"), | |
Term.ApplyInfix( | |
Term.Name("b"), Term.Name("::"), Nil, Seq(Term.Name("stack"))), | |
Term.Name("front"))))))), | |
Term.Apply( | |
Term.Name("loop"), | |
Seq(Term.This(Name.Anonymous()), Term.Name("Nil"), Term.Name("Nil")))))), | |
Defn.Def( | |
Nil, Term.Name("flattenOption"), Nil, Nil, | |
Some(Type.Apply(Type.Name("Option"), Seq(Type.Name("Doc")))), | |
Term.Block( | |
Seq( | |
Defn.Type( | |
Nil, Type.Name("DB"), Nil, | |
Type.Tuple(Seq(Type.Name("Doc"), Type.Name("Boolean")))), | |
Defn.Def( | |
Nil, Term.Name("finish"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("last"), Some(Type.Name("DB")), None), | |
Term.Param( | |
Nil, Term.Name("front"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("DB")))), None))), | |
Some(Type.Apply(Type.Name("Option"), Seq(Type.Name("Doc")))), | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, | |
Seq( | |
Pat.Tuple( | |
Seq(Pat.Var.Term(Term.Name("d")), Pat.Var.Term(Term.Name("c"))))), | |
None, | |
Term.Apply( | |
Term.Apply( | |
Term.Select(Term.Name("front"), Term.Name("foldLeft")), | |
Seq(Term.Name("last"))), | |
Seq( | |
Term.PartialFunction( | |
Seq( | |
Case( | |
Pat.Tuple( | |
Seq( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("d1")), | |
Pat.Var.Term(Term.Name("c1")))), | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("d0")), | |
Pat.Var.Term(Term.Name("c2")))))), | |
None, | |
Term.Tuple( | |
Seq( | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq(Term.Name("d0"), Term.Name("d1"))), | |
Term.ApplyInfix( | |
Term.Name("c1"), Term.Name("||"), Nil, | |
Seq(Term.Name("c2"))))))))))), | |
Term.If( | |
Term.Name("c"), Term.Apply(Term.Name("Some"), Seq(Term.Name("d"))), | |
Term.Name("None"))))), | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("loop"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("h"), Some(Type.Name("DB")), None), | |
Term.Param( | |
Nil, Term.Name("stack"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("DB")))), None), | |
Term.Param( | |
Nil, Term.Name("front"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("DB")))), None))), | |
Some(Type.Apply(Type.Name("Option"), Seq(Type.Name("Doc")))), | |
Term.Match( | |
Term.Select(Term.Name("h"), Term.Name("_1")), | |
Seq( | |
Case( | |
Pat.Alternative( | |
Term.Name("Empty"), | |
Pat.Extract(Term.Name("Text"), Nil, Seq(Pat.Wildcard()))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("noChange"))), None, | |
Term.Name("h")), | |
Term.Match( | |
Term.Name("stack"), | |
Seq( | |
Case( | |
Term.Name("Nil"), None, | |
Term.Apply( | |
Term.Name("finish"), | |
Seq(Term.Name("h"), Term.Name("front")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Var.Term(Term.Name("x")), Term.Name("::"), | |
Seq(Pat.Var.Term(Term.Name("xs")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("x"), Term.Name("xs"), | |
Term.ApplyInfix( | |
Term.Name("h"), Term.Name("::"), Nil, | |
Seq(Term.Name("front"))))))))))), | |
Case( | |
Term.Name("Line"), None, | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("next"))), None, | |
Term.Select(Term.Name("Doc"), Term.Name("empty"))), | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("change"))), None, | |
Term.Tuple(Seq(Term.Name("next"), Lit(true)))), | |
Term.Match( | |
Term.Name("stack"), | |
Seq( | |
Case( | |
Term.Name("Nil"), None, | |
Term.Apply( | |
Term.Name("finish"), | |
Seq(Term.Name("change"), Term.Name("front")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Var.Term(Term.Name("x")), Term.Name("::"), | |
Seq(Pat.Var.Term(Term.Name("xs")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("x"), Term.Name("xs"), | |
Term.ApplyInfix( | |
Term.Name("change"), Term.Name("::"), Nil, | |
Seq(Term.Name("front"))))))))))), | |
Case( | |
Pat.Extract( | |
Term.Name("Nest"), Nil, | |
Seq(Pat.Var.Term(Term.Name("i")), Pat.Var.Term(Term.Name("d")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Tuple( | |
Seq( | |
Term.Name("d"), | |
Term.Select(Term.Name("h"), Term.Name("_2")))), | |
Term.Name("stack"), Term.Name("front")))), | |
Case( | |
Pat.Extract( | |
Term.Name("Union"), Nil, | |
Seq(Pat.Var.Term(Term.Name("a")), Pat.Wildcard())), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Tuple(Seq(Term.Name("a"), Lit(true))), Term.Name("stack"), | |
Term.Name("front")))), | |
Case( | |
Pat.Extract( | |
Term.Name("Concat"), Nil, | |
Seq(Pat.Var.Term(Term.Name("a")), Pat.Var.Term(Term.Name("b")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Tuple( | |
Seq( | |
Term.Name("a"), | |
Term.Select(Term.Name("h"), Term.Name("_2")))), | |
Term.ApplyInfix( | |
Term.Tuple( | |
Seq( | |
Term.Name("b"), | |
Term.Select(Term.Name("h"), Term.Name("_2")))), | |
Term.Name("::"), Nil, Seq(Term.Name("stack"))), | |
Term.Name("front"))))))), | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Tuple(Seq(Term.This(Name.Anonymous()), Lit(false))), | |
Term.Name("Nil"), Term.Name("Nil")))))), | |
Defn.Def( | |
Nil, Term.Name("maxWidth"), Nil, Nil, Some(Type.Name("Int")), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("loop"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("pos"), Some(Type.Name("Int")), None), | |
Term.Param( | |
Nil, Term.Name("lst"), | |
Some( | |
Type.Apply( | |
Type.Name("List"), | |
Seq(Type.Tuple(Seq(Type.Name("Int"), Type.Name("Doc")))))), | |
None), | |
Term.Param(Nil, Term.Name("max"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("Int")), | |
Term.Match( | |
Term.Name("lst"), | |
Seq( | |
Case( | |
Term.Name("Nil"), None, | |
Term.Apply( | |
Term.Select(Term.Name("math"), Term.Name("max")), | |
Seq(Term.Name("max"), Term.Name("pos")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple(Seq(Pat.Var.Term(Term.Name("i")), Term.Name("Empty"))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq(Term.Name("pos"), Term.Name("z"), Term.Name("max")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Extract( | |
Term.Name("Concat"), Nil, | |
Seq( | |
Pat.Var.Term(Term.Name("a")), | |
Pat.Var.Term(Term.Name("b")))))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("pos"), | |
Term.ApplyInfix( | |
Term.Tuple(Seq(Term.Name("i"), Term.Name("a"))), | |
Term.Name("::"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Tuple(Seq(Term.Name("i"), Term.Name("b"))), | |
Term.Name("::"), Nil, Seq(Term.Name("z"))))), | |
Term.Name("max")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Extract( | |
Term.Name("Nest"), Nil, | |
Seq( | |
Pat.Var.Term(Term.Name("j")), | |
Pat.Var.Term(Term.Name("d")))))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("pos"), | |
Term.ApplyInfix( | |
Term.Tuple( | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("i"), Term.Name("+"), Nil, Seq(Term.Name("j"))), | |
Term.Name("d"))), | |
Term.Name("::"), Nil, Seq(Term.Name("z"))), | |
Term.Name("max")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Extract( | |
Term.Name("Text"), Nil, Seq(Pat.Var.Term(Term.Name("s")))))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("pos"), Term.Name("+"), Nil, | |
Seq(Term.Select(Term.Name("s"), Term.Name("length")))), | |
Term.Name("z"), Term.Name("max")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple(Seq(Pat.Var.Term(Term.Name("i")), Term.Name("Line"))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("i"), Term.Name("z"), | |
Term.Apply( | |
Term.Select(Term.Name("math"), Term.Name("max")), | |
Seq(Term.Name("max"), Term.Name("pos")))))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Tuple( | |
Seq( | |
Pat.Var.Term(Term.Name("i")), | |
Pat.Extract( | |
Term.Name("Union"), Nil, | |
Seq(Pat.Var.Term(Term.Name("a")), Pat.Wildcard())))), | |
Term.Name("::"), Seq(Pat.Var.Term(Term.Name("z")))), | |
None, | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Term.Name("pos"), | |
Term.ApplyInfix( | |
Term.Tuple(Seq(Term.Name("i"), Term.Name("a"))), | |
Term.Name("::"), Nil, Seq(Term.Name("z"))), | |
Term.Name("max"))))))), | |
Term.Apply( | |
Term.Name("loop"), | |
Seq( | |
Lit(0), | |
Term.ApplyInfix( | |
Term.Tuple(Seq(Lit(0), Term.This(Name.Anonymous()))), Term.Name("::"), | |
Nil, Seq(Term.Name("Nil"))), | |
Lit(0)))))), | |
Defn.Def( | |
Nil, Term.Name("deunioned"), Nil, Nil, | |
Some(Type.Apply(Type.Name("Stream"), Seq(Type.Name("Doc")))), | |
Term.Apply( | |
Term.Select(Term.Name("DocTree"), Term.Name("deunioned")), | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("DocTree"), Term.Name("toDocTree")), | |
Seq(Term.This(Name.Anonymous())))))))))), | |
Defn.Object( | |
Nil, Term.Name("Doc"), | |
Template( | |
Nil, Nil, Term.Param(Nil, Name.Anonymous(), None, None), | |
Some( | |
Seq( | |
Defn.Object( | |
Seq(Mod.Private(Name.Indeterminate("paiges")), Mod.Case()), Term.Name("Empty"), | |
Template( | |
Nil, Seq(Ctor.Ref.Name("Doc")), Term.Param(Nil, Name.Anonymous(), None, None), | |
None)), | |
Defn.Object( | |
Seq(Mod.Private(Name.Indeterminate("paiges")), Mod.Case()), Term.Name("Line"), | |
Template( | |
Nil, Seq(Ctor.Ref.Name("Doc")), Term.Param(Nil, Name.Anonymous(), None, None), | |
None)), | |
Defn.Class( | |
Seq(Mod.Private(Name.Indeterminate("paiges")), Mod.Case()), Type.Name("Text"), | |
Nil, | |
Ctor.Primary( | |
Nil, Ctor.Ref.Name("this"), | |
Seq(Seq(Term.Param(Nil, Term.Name("str"), Some(Type.Name("String")), None)))), | |
Template( | |
Nil, Seq(Ctor.Ref.Name("Doc")), Term.Param(Nil, Name.Anonymous(), None, None), | |
None)), | |
Defn.Class( | |
Seq(Mod.Private(Name.Indeterminate("paiges")), Mod.Case()), Type.Name("Concat"), | |
Nil, | |
Ctor.Primary( | |
Nil, Ctor.Ref.Name("this"), | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("a"), Some(Type.Name("Doc")), None), | |
Term.Param(Nil, Term.Name("b"), Some(Type.Name("Doc")), None)))), | |
Template( | |
Nil, Seq(Ctor.Ref.Name("Doc")), Term.Param(Nil, Name.Anonymous(), None, None), | |
None)), | |
Defn.Class( | |
Seq(Mod.Private(Name.Indeterminate("paiges")), Mod.Case()), Type.Name("Nest"), | |
Nil, | |
Ctor.Primary( | |
Nil, Ctor.Ref.Name("this"), | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("indent"), Some(Type.Name("Int")), None), | |
Term.Param(Nil, Term.Name("doc"), Some(Type.Name("Doc")), None)))), | |
Template( | |
Nil, Seq(Ctor.Ref.Name("Doc")), Term.Param(Nil, Name.Anonymous(), None, None), | |
None)), | |
Defn.Class( | |
Seq(Mod.Private(Name.Indeterminate("paiges")), Mod.Case()), Type.Name("Union"), | |
Nil, | |
Ctor.Primary( | |
Nil, Ctor.Ref.Name("this"), | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("a"), Some(Type.Name("Doc")), None), | |
Term.Param( | |
Nil, Term.Name("b"), Some(Type.Function(Nil, Type.Name("Doc"))), None)))), | |
Template( | |
Nil, Seq(Ctor.Ref.Name("Doc")), Term.Param(Nil, Name.Anonymous(), None, None), | |
Some( | |
Seq( | |
Defn.Val( | |
Seq(Mod.Lazy()), Seq(Pat.Var.Term(Term.Name("bDoc"))), | |
Some(Type.Name("Doc")), Term.Apply(Term.Name("b"), Nil)), | |
Defn.Def( | |
Seq(Mod.Override()), Term.Name("toString"), Nil, Nil, | |
Some(Type.Name("String")), | |
Term.Interpolate( | |
Term.Name("s"), Seq(Lit("Union("), Lit(", "), Lit(")")), | |
Seq(Term.Name("a"), Term.Name("bDoc")))))))), | |
Defn.Val( | |
Seq(Mod.Private(Term.This(Name.Anonymous()))), | |
Seq(Pat.Var.Term(Term.Name("maxSpaceTable"))), None, Lit(20)), | |
Defn.Val( | |
Seq(Mod.Private(Term.This(Name.Anonymous()))), | |
Seq(Pat.Var.Term(Term.Name("spaceArray"))), | |
Some(Type.Apply(Type.Name("Array"), Seq(Type.Name("Text")))), | |
Term.Select( | |
Term.Apply( | |
Term.Select( | |
Term.ApplyInfix( | |
Lit(1), Term.Name("to"), Nil, Seq(Term.Name("maxSpaceTable"))), | |
Term.Name("map")), | |
Seq( | |
Term.Block( | |
Seq( | |
Term.Function( | |
Seq(Term.Param(Nil, Term.Name("i"), None, None)), | |
Term.Block( | |
Seq( | |
Term.Apply( | |
Term.Name("Text"), | |
Seq( | |
Term.ApplyInfix( | |
Lit(" "), Term.Name("*"), Nil, | |
Seq(Term.Name("i")))))))))))), | |
Term.Name("toArray"))), | |
Defn.Def( | |
Nil, Term.Name("spaces"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("n"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("Doc")), | |
Term.If( | |
Term.ApplyInfix(Term.Name("n"), Term.Name("<"), Nil, Seq(Lit(1))), | |
Term.Name("Empty"), | |
Term.If( | |
Term.ApplyInfix( | |
Term.Name("n"), Term.Name("<="), Nil, Seq(Term.Name("maxSpaceTable"))), | |
Term.Apply( | |
Term.Name("spaceArray"), | |
Seq(Term.ApplyInfix(Term.Name("n"), Term.Name("-"), Nil, Seq(Lit(1))))), | |
Term.Apply( | |
Term.Name("Text"), | |
Seq( | |
Term.ApplyInfix(Lit(" "), Term.Name("*"), Nil, Seq(Term.Name("n")))))))), | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("space"))), Some(Type.Name("Doc")), | |
Term.Apply(Term.Name("spaceArray"), Seq(Lit(0)))), | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("comma"))), Some(Type.Name("Doc")), | |
Term.Apply(Term.Name("Text"), Seq(Lit(",")))), | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("line"))), Some(Type.Name("Doc")), | |
Term.Name("Line")), | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("spaceOrLine"))), Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("Union"), | |
Seq(Term.Name("space"), Term.Function(Nil, Term.Name("line"))))), | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("empty"))), Some(Type.Name("Doc")), | |
Term.Name("Empty")), | |
Defn.Val( | |
Seq(Mod.Implicit()), Seq(Pat.Var.Term(Term.Name("docOrdering"))), | |
Some(Type.Apply(Type.Name("Ordering"), Seq(Type.Name("Doc")))), | |
Term.New( | |
Template( | |
Nil, Seq(Term.ApplyType(Ctor.Ref.Name("Ordering"), Seq(Type.Name("Doc")))), | |
Term.Param(Nil, Name.Anonymous(), None, None), | |
Some( | |
Seq( | |
Defn.Def( | |
Nil, Term.Name("compare"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("x"), Some(Type.Name("Doc")), None), | |
Term.Param(Nil, Term.Name("y"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Int")), | |
Term.ApplyInfix( | |
Term.Name("x"), Term.Name("compare"), Nil, Seq(Term.Name("y"))))))))), | |
Defn.Def( | |
Nil, Term.Name("text"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("str"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Nil, Term.Name("tx"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("i"), Some(Type.Name("Int")), None), | |
Term.Param(Nil, Term.Name("j"), Some(Type.Name("Int")), None))), | |
Some(Type.Name("Doc")), | |
Term.If( | |
Term.ApplyInfix( | |
Term.Name("i"), Term.Name("=="), Nil, Seq(Term.Name("j"))), | |
Term.Name("Empty"), | |
Term.Apply( | |
Term.Name("Text"), | |
Seq( | |
Term.Apply( | |
Term.Select(Term.Name("str"), Term.Name("substring")), | |
Seq(Term.Name("i"), Term.Name("j"))))))), | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("parse"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("i"), Some(Type.Name("Int")), None), | |
Term.Param(Nil, Term.Name("limit"), Some(Type.Name("Int")), None), | |
Term.Param(Nil, Term.Name("doc"), Some(Type.Name("Doc")), None))), | |
Some(Type.Name("Doc")), | |
Term.If( | |
Term.ApplyInfix(Term.Name("i"), Term.Name("<"), Nil, Seq(Lit(0))), | |
Term.ApplyInfix( | |
Term.Apply(Term.Name("tx"), Seq(Lit(0), Term.Name("limit"))), | |
Term.Name("+"), Nil, Seq(Term.Name("doc"))), | |
Term.Match( | |
Term.Apply( | |
Term.Select(Term.Name("str"), Term.Name("charAt")), | |
Seq(Term.Name("i"))), | |
Seq( | |
Case( | |
Lit('\n'), None, | |
Term.Apply( | |
Term.Name("parse"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("i"), Term.Name("-"), Nil, Seq(Lit(1))), | |
Term.Name("i"), | |
Term.ApplyInfix( | |
Term.ApplyInfix( | |
Term.Name("Line"), Term.Name("+"), Nil, | |
Seq( | |
Term.Apply( | |
Term.Name("tx"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("i"), Term.Name("+"), Nil, Seq(Lit(1))), | |
Term.Name("limit"))))), | |
Term.Name("+"), Nil, Seq(Term.Name("doc")))))), | |
Case( | |
Pat.Wildcard(), None, | |
Term.Apply( | |
Term.Name("parse"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("i"), Term.Name("-"), Nil, Seq(Lit(1))), | |
Term.Name("limit"), Term.Name("doc")))))))), | |
Term.If( | |
Term.ApplyInfix(Term.Name("str"), Term.Name("=="), Nil, Seq(Lit(""))), | |
Term.Name("Empty"), | |
Term.If( | |
Term.ApplyInfix( | |
Term.Select(Term.Name("str"), Term.Name("length")), Term.Name("=="), | |
Nil, Seq(Lit(1))), | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("c"))), None, | |
Term.Apply( | |
Term.Select(Term.Name("str"), Term.Name("charAt")), Seq(Lit(0)))), | |
Term.If( | |
Term.ApplyInfix( | |
Term.ApplyInfix( | |
Lit(' '), Term.Name("<="), Nil, Seq(Term.Name("c"))), | |
Term.Name("&&"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("c"), Term.Name("<="), Nil, Seq(Lit('~'))))), | |
Term.Apply( | |
Term.Name("charTable"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Select(Term.Name("c"), Term.Name("toInt")), | |
Term.Name("-"), Nil, Seq(Lit(32))))), | |
Term.If( | |
Term.ApplyInfix( | |
Term.Name("c"), Term.Name("=="), Nil, Seq(Lit('\n'))), | |
Term.Name("Line"), | |
Term.Apply(Term.Name("Text"), Seq(Term.Name("str"))))))), | |
Term.If( | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Select(Term.Name("str"), Term.Name("indexOf")), | |
Seq(Lit('\n'))), | |
Term.Name("<"), Nil, Seq(Lit(0))), | |
Term.Apply(Term.Name("Text"), Seq(Term.Name("str"))), | |
Term.Apply( | |
Term.Name("parse"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Select(Term.Name("str"), Term.Name("length")), | |
Term.Name("-"), Nil, Seq(Lit(1))), | |
Term.Select(Term.Name("str"), Term.Name("length")), | |
Term.Name("Empty"))))))))), | |
Defn.Val( | |
Seq(Mod.Private(Term.This(Name.Anonymous()))), | |
Seq(Pat.Var.Term(Term.Name("charTable"))), | |
Some(Type.Apply(Type.Name("Array"), Seq(Type.Name("Doc")))), | |
Term.Select( | |
Term.Apply( | |
Term.Select( | |
Term.ApplyInfix(Lit(32), Term.Name("to"), Nil, Seq(Lit(126))), | |
Term.Name("map")), | |
Seq( | |
Term.Block( | |
Seq( | |
Term.Function( | |
Seq(Term.Param(Nil, Term.Name("i"), None, None)), | |
Term.Block( | |
Seq( | |
Term.Apply( | |
Term.Name("Text"), | |
Seq( | |
Term.Select( | |
Term.Select(Term.Name("i"), Term.Name("toChar")), | |
Term.Name("toString"))))))))))), | |
Term.Name("toArray"))), | |
Defn.Def( | |
Nil, Term.Name("str"), | |
Seq(Type.Param(Nil, Type.Name("T"), Nil, Type.Bounds(None, None), Nil, Nil)), | |
Seq(Seq(Term.Param(Nil, Term.Name("t"), Some(Type.Name("T")), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("text"), Seq(Term.Select(Term.Name("t"), Term.Name("toString"))))), | |
Defn.Val( | |
Seq(Mod.Private(Name.Anonymous())), | |
Seq(Pat.Var.Term(Term.Name("splitWhitespace"))), Some(Type.Name("Regex")), | |
Term.Select(Lit("\\s+"), Term.Name("r"))), | |
Defn.Def( | |
Nil, Term.Name("split"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("str"), Some(Type.Name("String")), None), | |
Term.Param( | |
Nil, Term.Name("pat"), Some(Type.Name("Regex")), | |
Some(Term.Select(Term.Name("Doc"), Term.Name("splitWhitespace")))), | |
Term.Param( | |
Nil, Term.Name("sep"), Some(Type.Name("Doc")), | |
Some(Term.Select(Term.Name("Doc"), Term.Name("spaceOrLine")))))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Apply( | |
Term.Name("foldDocs"), | |
Seq( | |
Term.Apply( | |
Term.Select( | |
Term.Apply( | |
Term.Select( | |
Term.Select(Term.Name("pat"), Term.Name("pattern")), | |
Term.Name("split")), | |
Seq(Term.Name("str"), Lit(-1))), | |
Term.Name("map")), | |
Seq(Term.Select(Term.Name("Doc"), Term.Name("text")))))), | |
Seq( | |
Term.Function( | |
Seq( | |
Term.Param(Nil, Term.Name("x"), None, None), | |
Term.Param(Nil, Term.Name("y"), None, None)), | |
Term.ApplyInfix( | |
Term.Name("x"), Term.Name("+"), Nil, | |
Seq( | |
Term.ApplyInfix( | |
Term.Name("sep"), Term.Name("+"), Nil, Seq(Term.Name("y"))))))))), | |
Defn.Def( | |
Nil, Term.Name("fill"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("sep"), Some(Type.Name("Doc")), None), | |
Term.Param( | |
Nil, Term.Name("ds"), | |
Some(Type.Apply(Type.Name("Iterable"), Seq(Type.Name("Doc")))), None))), | |
Some(Type.Name("Doc")), | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Seq(Mod.Annot(Ctor.Ref.Name("tailrec"))), Term.Name("fillRec"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("x"), Some(Type.Name("Doc")), None), | |
Term.Param( | |
Nil, Term.Name("lst"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("Doc")))), None), | |
Term.Param( | |
Nil, Term.Name("stack"), | |
Some( | |
Type.Apply( | |
Type.Name("List"), | |
Seq(Type.Function(Seq(Type.Name("Doc")), Type.Name("Doc"))))), | |
None))), | |
Some(Type.Name("Doc")), | |
Term.Match( | |
Term.Name("lst"), | |
Seq( | |
Case( | |
Term.Name("Nil"), None, | |
Term.Apply( | |
Term.Name("call"), Seq(Term.Name("x"), Term.Name("stack")))), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Var.Term(Term.Name("y")), Term.Name("::"), | |
Seq(Pat.Var.Term(Term.Name("tail")))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("xsep"))), None, | |
Term.ApplyInfix( | |
Term.Name("x"), Term.Name("+"), Nil, Seq(Term.Name("sep")))), | |
Term.Match( | |
Term.Tuple( | |
Seq( | |
Term.Select(Term.Name("xsep"), Term.Name("flattenOption")), | |
Term.Select(Term.Name("y"), Term.Name("flattenOption")))), | |
Seq( | |
Case( | |
Pat.Tuple( | |
Seq( | |
Pat.Extract( | |
Term.Name("Some"), Nil, | |
Seq(Pat.Var.Term(Term.Name("flatx")))), | |
Pat.Extract( | |
Term.Name("Some"), Nil, | |
Seq(Pat.Var.Term(Term.Name("flaty")))))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Nil, Term.Name("cont"), Nil, | |
Seq( | |
Seq( | |
Term.Param( | |
Nil, Term.Name("resty"), Some(Type.Name("Doc")), | |
None))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("first"))), | |
None, | |
Term.Apply( | |
Term.Select( | |
Term.Name("flatx"), Term.Name("space")), | |
Seq(Term.Name("resty")))), | |
Defn.Def( | |
Nil, Term.Name("second"), Nil, Nil, None, | |
Term.ApplyInfix( | |
Term.Name("xsep"), Term.Name("/"), Nil, | |
Seq( | |
Term.Apply( | |
Term.Name("cheatRec"), | |
Seq( | |
Term.Name("y"), Term.Name("tail")))))), | |
Term.Apply( | |
Term.Name("Union"), | |
Seq( | |
Term.Name("first"), | |
Term.Function(Nil, Term.Name("second"))))))), | |
Term.Apply( | |
Term.Name("fillRec"), | |
Seq( | |
Term.Name("flaty"), Term.Name("tail"), | |
Term.ApplyInfix( | |
Term.Eta(Term.Name("cont")), Term.Name("::"), Nil, | |
Seq(Term.Name("stack")))))))), | |
Case( | |
Pat.Tuple( | |
Seq( | |
Pat.Extract( | |
Term.Name("Some"), Nil, | |
Seq(Pat.Var.Term(Term.Name("flatx")))), | |
Term.Name("None"))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Nil, Term.Name("cont"), Nil, | |
Seq( | |
Seq( | |
Term.Param( | |
Nil, Term.Name("resty"), Some(Type.Name("Doc")), | |
None))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("first"))), | |
None, | |
Term.Apply( | |
Term.Select( | |
Term.Name("flatx"), Term.Name("space")), | |
Seq(Term.Name("resty")))), | |
Defn.Def( | |
Nil, Term.Name("second"), Nil, Nil, None, | |
Term.ApplyInfix( | |
Term.Name("xsep"), Term.Name("/"), Nil, | |
Seq(Term.Name("resty")))), | |
Term.Apply( | |
Term.Name("Union"), | |
Seq( | |
Term.Name("first"), | |
Term.Function(Nil, Term.Name("second"))))))), | |
Term.Apply( | |
Term.Name("fillRec"), | |
Seq( | |
Term.Name("y"), Term.Name("tail"), | |
Term.ApplyInfix( | |
Term.Eta(Term.Name("cont")), Term.Name("::"), Nil, | |
Seq(Term.Name("stack")))))))), | |
Case( | |
Pat.Tuple( | |
Seq( | |
Term.Name("None"), | |
Pat.Extract( | |
Term.Name("Some"), Nil, | |
Seq(Pat.Var.Term(Term.Name("flaty")))))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Def( | |
Nil, Term.Name("cont"), Nil, | |
Seq( | |
Seq( | |
Term.Param( | |
Nil, Term.Name("resty"), Some(Type.Name("Doc")), | |
None))), | |
None, | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("first"))), | |
None, | |
Term.Apply( | |
Term.Select( | |
Term.Name("xsep"), Term.Name("space")), | |
Seq(Term.Name("resty")))), | |
Defn.Def( | |
Nil, Term.Name("second"), Nil, Nil, None, | |
Term.ApplyInfix( | |
Term.Name("xsep"), Term.Name("/"), Nil, | |
Seq( | |
Term.Apply( | |
Term.Name("cheatRec"), | |
Seq( | |
Term.Name("y"), Term.Name("tail")))))), | |
Term.Apply( | |
Term.Name("Union"), | |
Seq( | |
Term.Name("first"), | |
Term.Function(Nil, Term.Name("second"))))))), | |
Term.Apply( | |
Term.Name("fillRec"), | |
Seq( | |
Term.Name("flaty"), Term.Name("tail"), | |
Term.ApplyInfix( | |
Term.Eta(Term.Name("cont")), Term.Name("::"), Nil, | |
Seq(Term.Name("stack")))))))), | |
Case( | |
Pat.Tuple(Seq(Term.Name("None"), Term.Name("None"))), None, | |
Term.Apply( | |
Term.Name("fillRec"), | |
Seq( | |
Term.Name("y"), Term.Name("tail"), | |
Term.ApplyInfix( | |
Term.Apply( | |
Term.Select( | |
Term.Name("xsep"), Term.Name("spaceOrLine")), | |
Seq( | |
Term.Ascribe( | |
Term.Placeholder(), Type.Name("Doc")))), | |
Term.Name("::"), Nil, | |
Seq(Term.Name("stack")))))))))))))), | |
Defn.Def( | |
Nil, Term.Name("cheatRec"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("x"), Some(Type.Name("Doc")), None), | |
Term.Param( | |
Nil, Term.Name("lst"), | |
Some(Type.Apply(Type.Name("List"), Seq(Type.Name("Doc")))), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("fillRec"), | |
Seq(Term.Name("x"), Term.Name("lst"), Term.Name("Nil")))), | |
Term.Match( | |
Term.Select(Term.Name("ds"), Term.Name("toList")), | |
Seq( | |
Case(Term.Name("Nil"), None, Term.Name("Empty")), | |
Case( | |
Pat.ExtractInfix( | |
Pat.Var.Term(Term.Name("h")), Term.Name("::"), | |
Seq(Pat.Var.Term(Term.Name("tail")))), | |
None, | |
Term.Apply( | |
Term.Name("fillRec"), | |
Seq(Term.Name("h"), Term.Name("tail"), Term.Name("Nil"))))))))), | |
Defn.Def( | |
Nil, Term.Name("foldDocs"), Nil, | |
Seq( | |
Seq( | |
Term.Param( | |
Nil, Term.Name("ds"), | |
Some(Type.Apply(Type.Name("Iterable"), Seq(Type.Name("Doc")))), None)), | |
Seq( | |
Term.Param( | |
Nil, Term.Name("fn"), | |
Some( | |
Type.Function(Seq(Type.Name("Doc"), Type.Name("Doc")), Type.Name("Doc"))), | |
None))), | |
Some(Type.Name("Doc")), | |
Term.If( | |
Term.Select(Term.Name("ds"), Term.Name("isEmpty")), | |
Term.Select(Term.Name("Doc"), Term.Name("empty")), | |
Term.Block( | |
Seq( | |
Defn.Val( | |
Nil, Seq(Pat.Var.Term(Term.Name("xs"))), None, | |
Term.Select(Term.Name("ds"), Term.Name("toArray"))), | |
Defn.Var( | |
Nil, Seq(Pat.Var.Term(Term.Name("d"))), None, | |
Some( | |
Term.Apply( | |
Term.Name("xs"), | |
Seq( | |
Term.ApplyInfix( | |
Term.Select(Term.Name("xs"), Term.Name("length")), Term.Name("-"), | |
Nil, Seq(Lit(1))))))), | |
Defn.Var( | |
Nil, Seq(Pat.Var.Term(Term.Name("i"))), None, | |
Some( | |
Term.ApplyInfix( | |
Term.Select(Term.Name("xs"), Term.Name("length")), Term.Name("-"), | |
Nil, Seq(Lit(2))))), | |
Term.While( | |
Term.ApplyInfix(Term.Name("i"), Term.Name(">="), Nil, Seq(Lit(0))), | |
Term.Block( | |
Seq( | |
Term.Assign( | |
Term.Name("d"), | |
Term.Apply( | |
Term.Name("fn"), | |
Seq( | |
Term.Apply(Term.Name("xs"), Seq(Term.Name("i"))), | |
Term.Name("d")))), | |
Term.ApplyInfix(Term.Name("i"), Term.Name("-="), Nil, Seq(Lit(1)))))), | |
Term.Name("d"))))), | |
Defn.Def( | |
Nil, Term.Name("paragraph"), Nil, | |
Seq(Seq(Term.Param(Nil, Term.Name("s"), Some(Type.Name("String")), None))), | |
Some(Type.Name("Doc")), Term.Apply(Term.Name("split"), Seq(Term.Name("s")))), | |
Defn.Def( | |
Nil, Term.Name("intercalate"), Nil, | |
Seq( | |
Seq( | |
Term.Param(Nil, Term.Name("sep"), Some(Type.Name("Doc")), None), | |
Term.Param( | |
Nil, Term.Name("ds"), | |
Some(Type.Apply(Type.Name("Iterable"), Seq(Type.Name("Doc")))), None))), | |
Some(Type.Name("Doc")), | |
Term.If( | |
Term.Select(Term.Name("sep"), Term.Name("isEmpty")), | |
Term.Apply( | |
Term.Apply(Term.Name("foldDocs"), Seq(Term.Name("ds"))), | |
Seq( | |
Term.Apply( | |
Term.Name("Concat"), Seq(Term.Placeholder(), Term.Placeholder())))), | |
Term.Apply( | |
Term.Apply(Term.Name("foldDocs"), Seq(Term.Name("ds"))), | |
Seq( | |
Term.Block( | |
Seq( | |
Term.Function( | |
Seq( | |
Term.Param(Nil, Term.Name("a"), None, None), | |
Term.Param(Nil, Term.Name("b"), None, None)), | |
Term.Block( | |
Seq( | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq( | |
Term.Name("a"), | |
Term.Apply( | |
Term.Name("Concat"), | |
Seq(Term.Name("sep"), Term.Name("b")))))))))))))), | |
Defn.Def( | |
Nil, Term.Name("spread"), Nil, | |
Seq( | |
Seq( | |
Term.Param( | |
Nil, Term.Name("ds"), | |
Some(Type.Apply(Type.Name("Iterable"), Seq(Type.Name("Doc")))), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply(Term.Name("intercalate"), Seq(Term.Name("space"), Term.Name("ds")))), | |
Defn.Def( | |
Nil, Term.Name("stack"), Nil, | |
Seq( | |
Seq( | |
Term.Param( | |
Nil, Term.Name("ds"), | |
Some(Type.Apply(Type.Name("Iterable"), Seq(Type.Name("Doc")))), None))), | |
Some(Type.Name("Doc")), | |
Term.Apply( | |
Term.Name("intercalate"), Seq(Term.Name("line"), Term.Name("ds")))))))))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment