| > One idea: add (Maybe Type) fields to many TH syntax forms, where the | > type checker can record types. That's simple and direct. | | This is actually the way how we implemented it in Nemerle. Our syntax trees | has elements like E_typed { body : Typedtree.Expr } in Parsetree.Expr or | T_typed { body : Typedtree.Type } in Parsetree.Type, so we can store typed | parts in our ASTs. | Our quotations support this with | <[ $(e : typed) ]> where `e' is a variable holding typed tree of expression | | We can also build typed trees for types with quotation like | <[ ttype: int ]> Interesting ... but I'm afraid I don't understand what these notations mean. Suppose you want to build a data structure from the original constructors, by hand as it were. (Which Template Haskell certainly allows you to do.) You don't want to supply all the types! If pattern match over this structure, you aren't going to see types. So the types must somehow be optional. I don't want to have two completely different, but similar, data structures, one with types and one without. Hence the 'Maybe' part. Is that what you have? Simon