class ui :: Type -> Type -> Type

val mkUi : widget ::: Type -> value ::: Type
           -> {Render : widget -> xbody,
               Value : widget -> signal value}
           -> ui widget value
val render : widget ::: Type -> value ::: Type -> ui widget value -> widget -> xbody
val value : widget ::: Type -> value ::: Type -> ui widget value -> widget -> signal value

con input :: Type -> Type
val ui_input : t ::: Type -> read t -> ui (input t) (option t)
val input : t ::: Type -> transaction (input t)

con select :: Type -> Type
val ui_select : t ::: Type -> show t -> ui (select t) t
val select : t ::: Type -> list t -> transaction (select t)