adam@1: con pattern :: Type -> Type -> Type adam@1: adam@1: con tagInternal :: {Unit} -> Type adam@1: adam@4: val null : pattern unit (variant []) adam@4: adam@1: val tag : attrs ::: {Unit} -> folder attrs -> string -> $(mapU string attrs) adam@1: -> pattern (tagInternal attrs) {Attrs : $(mapU string attrs), Cdata : option string} adam@1: adam@3: val tagA : attrs ::: {Unit} -> folder attrs -> string -> $(mapU string attrs) adam@3: -> pattern (tagInternal attrs) $(mapU string attrs) adam@6: val tagAO : attrs ::: {Unit} -> folder attrs -> string -> $(mapU string attrs) adam@6: -> pattern (tagInternal attrs) $(mapU (option string) attrs) adam@6: adam@3: val tagC : string -> pattern (tagInternal []) string adam@3: adam@1: con childrenInternal :: Type -> {Type} -> Type adam@1: adam@1: val children : parentI ::: Type -> parent ::: Type -> children ::: {(Type * Type)} adam@1: -> pattern parentI parent -> $(map (fn (i, d) => pattern i d) children) -> folder children adam@1: -> pattern (childrenInternal parentI (map fst children)) (parent * $(map snd children)) adam@6: val childrenO : parentI ::: Type -> parent ::: Type -> children ::: {(Type * Type)} adam@6: -> pattern parentI parent -> $(map (fn (i, d) => pattern i d) children) -> folder children adam@6: -> pattern (childrenInternal parentI (map fst children)) (parent * $(map (fn (i, d) => option d) children)) adam@1: adam@4: con treeInternal :: Type -> Type -> Type adam@4: adam@4: val tree : parentI ::: Type -> parent ::: Type -> childI ::: Type -> child ::: Type adam@4: -> pattern parentI parent -> pattern childI child adam@4: -> pattern (treeInternal parentI childI) (parent * child) adam@4: adam@5: type document adam@7: val show_document : show document adam@5: adam@5: val fetch : string (* url *) -> transaction document adam@5: val app : internal ::: Type -> data ::: Type -> pattern internal data -> (data -> transaction {}) -> document -> transaction {}