adamc@1001: con reviewMeta = fn (db :: Type, widget :: Type) => adamc@1001: {Show : db -> xbody, adamc@1001: Widget : nm :: Name -> xml form [] [nm = widget], adamc@1001: WidgetPopulated : nm :: Name -> db -> xml form [] [nm = widget], adamc@1001: Parse : widget -> db, adamc@1001: Inject : sql_injectable db} adamc@1001: adamc@1001: fun default [t] (sh : show t) (rd : read t) (inj : sql_injectable t) : reviewMeta (t, string) = adamc@1001: {Show = txt, adamc@1001: Widget = fn [nm :: Name] => , adamc@1001: WidgetPopulated = fn [nm :: Name] n => adamc@1001: , adamc@1001: Parse = readError, adamc@1001: Inject = _} adamc@1001: adamc@1001: val int = default adamc@1001: val float = default adamc@1001: val string = default adamc@1001: val bool = {Show = txt, adamc@1001: Widget = fn [nm :: Name] => , adamc@1001: WidgetPopulated = fn [nm :: Name] b => adamc@1001: , adamc@1001: Parse = fn x => x, adamc@1001: Inject = _} adamc@1001: adamc@1001: functor Make(M : sig adamc@1001: con review :: {(Type * Type)} adamc@1001: val review : $(map reviewMeta review) adamc@1001: end) = struct adamc@1001: adamc@1001: fun main () = return adamc@1001: adamc@1001: end