view demo/more/meta.urs @ 1298:e665527fce1c

Support empty datatypes, which can now be generated via 'variant []'
author Adam Chlipala <adam@chlipala.net>
date Thu, 09 Sep 2010 12:42:25 -0400
parents 6bcc1020d5cd
children
line wrap: on
line source
con meta = fn (db :: Type, widget :: Type) =>
                    {Nam : string,
                     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}

val int : string -> meta (int, string)
val float : string -> meta (float, string)
val string : string -> meta (string, string)
val bool : string -> meta (bool, bool)

val textarea : string -> meta (string, string)

val allContent : ts ::: {(Type * Type)} -> $(map meta ts) -> $(map fst ts) -> folder ts -> xbody

val allWidgets : ts ::: {(Type * Type)} -> $(map meta ts) -> folder ts
                 -> xml form [] (map snd ts)

val allPopulated : ts ::: {(Type * Type)} -> $(map meta ts) -> $(map fst ts) -> folder ts
                   -> xml form [] (map snd ts)

val allPopulatedTr : ts ::: {(Type * Type)} -> $(map meta ts) -> $(map fst ts) -> folder ts
                     -> xml ([Tr] ++ form) [] (map snd ts)

val ensql : avail ::: {{Type}} -> ts ::: {(Type * Type)} -> $(map meta ts) -> $(map snd ts) -> folder ts
            -> $(map (sql_exp avail [] []) (map fst ts))

con private = fn t :: Type =>
                 {Nam : string,
                  Initialize : t,
                  Show : t -> xbody,
                  Inject : sql_injectable t}

val initialize : ts ::: {Type} -> $(map private ts) -> folder ts -> $(map (sql_exp [] [] []) ts)