adamc@1002: con colMeta = fn (db :: Type, state :: Type) => adamc@650: {Nam : string, adamc@1002: Show : db -> xbody, adamc@1002: Inject : sql_injectable db, adamc@650: adamc@1002: NewState : transaction state, adamc@1002: Widget : state -> xbody, adamc@1002: ReadState : state -> transaction db} adamc@650: con colsMeta = fn cols :: {(Type * Type)} => $(map colMeta cols) adamc@650: adamc@650: val int : string -> colMeta (int, source string) adamc@650: val float : string -> colMeta (float, source string) adamc@650: val string : string -> colMeta (string, source string) adamc@650: adamc@650: functor Make(M : sig adamc@650: con cols :: {(Type * Type)} adamc@650: constraint [Id] ~ cols adamc@650: val fl : folder cols adamc@650: adamc@706: table tab : ([Id = int] ++ map fst cols) adamc@650: adamc@650: val title : string adamc@650: adamc@650: val cols : colsMeta cols adamc@650: end) : sig adamc@650: val main : unit -> transaction page adamc@650: end