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