An interesting and semi-related project was just presented at ICFP by Kathleen Fisher. It's called "Forest" and uses template haskell to create schema's for "FileStores" from Haskell definitions. But they're not plain-old-haskell type definitions...
-Ryan On Tue, Oct 4, 2011 at 12:11 PM, Edward Z. Yang <[email protected]> wrote: > Just making sure: have you looked at the Data.Data module yet? > > Edward > > Excerpts from Karel Gardas's message of Tue Oct 04 12:02:34 -0400 2011: > > > > Hello, > > > > I'm trying to find out if it's possible to use Haskell data type > > definition capability to define types and compile defined types into > > other languages, for example into Google's protocol buffers data > > definition language. So basically speaking I'm thinking about using > > Haskell sub-set as a data-definition DSL together with some functions > > which will generate some code based on supplied defined data types. My > > idea is: > > > > data Person = Person { > > id :: Int > > , name :: String > > , email :: Maybe String > > } > > deriving (Show, Data, Typeable) > > > > emit_proto Person 1 > > > > where emit_proto is function which will translate Person data type > > definition into Google's proto language (the 1 is index from which start > > to index type's fields) by traversing data type definition and > > translating all its children plus do some header/footer generation etc: > > > > message Person { > > required int32 id = 1; > > required string name = 2; > > optional string email = 3; > > } > > > > I've looked for something like that and found SYB papers which works on > > top of data instance (i.e. actual data, not data type). I also found > > JSON lib which again works on top of data and not data type. I've tried > > to look into Data.Typetable etc, but have not found function which will > > print data type's field name and field type name (although JSON lib > > seems to use field name for JSON generation so I'll need to investigate > > this more). I've tested `typeOf' function and it's quite useful, but its > > limitation is that it's not working on ADT name: > > > > data Color = RED|GREEN|BLUE > > > > *Main> typeOf Color > > > > <interactive>:1:8: Not in scope: data constructor `Color' > > > > *Main> typeOf RED > > Main.Color > > > > and I would need that in order to translate Color defined above into > > enum like: > > > > enum Color { > > RED = 0; > > GREEN = 1; > > BLUE = 2; > > } > > > > > > My question is: do you think I'm looking into good direction (i.e. > > Data/Typeable) or do you think I'll need to use something different for > > data definition DSL (Template Haskell?, or impossible in Haskell so > > write my own language with full parser? etc?) > > > > Thanks for any idea or opinion on this! > > Karel > > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
