adamc@1003: con meta = 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@1003: val int : meta (int, string) adamc@1003: val float : meta (float, string) adamc@1003: val string : meta (string, string) adamc@1003: val bool : meta (bool, bool) adamc@1001: adamc@1001: functor Make(M : sig adamc@1003: con paper :: {(Type * Type)} adamc@1003: constraint [Id, Title] ~ paper adamc@1003: val paper : $(map meta paper) adamc@1003: adamc@1001: con review :: {(Type * Type)} adamc@1003: constraint [Paper, User] ~ review adamc@1003: val review : $(map meta review) adamc@1001: end) : sig adamc@1001: adamc@1001: val main : unit -> transaction page adamc@1001: adamc@1001: end