adam@1: con pattern :: Type -> Type -> Type adam@1: adam@1: con tagInternal :: {Unit} -> Type adam@1: 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@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@1: adam@1: val app : internal ::: Type -> data ::: Type -> pattern internal data -> (data -> transaction {}) -> string -> transaction {}