adamc@1004: functor Make(M : sig adamc@1004: con keyName :: Name adamc@1004: con keyType :: Type adamc@1004: val showKey : show keyType adamc@1005: val readKey : read keyType adamc@1005: val injKey : sql_injectable keyType adamc@1004: adamc@1004: con visible :: {(Type * Type)} adamc@1004: constraint [keyName] ~ visible adamc@1004: val folder : folder visible adamc@1004: val visible : $(map Meta.meta visible) adamc@1004: adamc@1004: con invisible :: {Type} adamc@1004: constraint [keyName] ~ invisible adamc@1004: constraint visible ~ invisible adamc@1004: adamc@1004: val title : string adamc@1004: val isAllowed : transaction bool adamc@1004: table t : ([keyName = keyType] ++ map fst visible ++ invisible) adamc@1004: end) : sig adamc@1004: adamc@1004: val main : unit -> transaction page adamc@1004: adamc@1004: end