
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
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 Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe