[Template-haskell] RE: Question regarding template Haskell
ozone at algorithm.com.au
ozone at algorithm.com.au
Thu Sep 18 11:15:59 EDT 2003
On 17/09/2003, at 9:07 PM, Simon Peyton-Jones wrote:
> | If your 'x' variable is monomorphic, you can use the rType function
> | that Sean and I came up with, detailed here:
> |
> |
> http://www.haskell.org/pipermail/template-haskell/2003-July/
> 000128.html
> |
> | That currently handles only 2-tuples, but it shouldn't be too hard to
> | extend it to work on any-size tuples. Let me know if you're having
> | problems.
>
> I missed that message. How does rType differ from typeOf, defined in
> Data.Typeable?
typeOf :: a -> TypeRep
rType :: a -> Typ (or :: a -> Type in the new THSyntax definitions).
The two are conceptually the same, but they return you different data
types: typeOf returns you the TypeRep which the Data.Dynamic functions
use, and rType returns you a Typ (now Type) which THSyntax uses.
Another way to think about it is that rType is Template Haskell's
reifyType as a function.
The point is that you can use rType to return you the definition of a
Type given in THSyntax, which you can then use directly within
THSyntax:
*Mocha.ReifyType> Data.Dynamic.typeOf (undefined :: (Int, Char))
(Int,Char)
*Mocha.ReifyType> rType (undefined :: (Int, Char))
AppT (AppT (TupleT 2) (ConT "GHC.Base:Int")) (ConT "GHC.Base:Char")
*Mocha.ReifyType>
Come to think of it, now that we have a concrete syntax, perhaps it'd
be worth merging the definitions of THSyntax's Type and Data.Dynamic's
TypeRep? They're conceptually the same thing, but with different data
representations ...
A slightly wilder idea (which is not a serious suggestion) would be to
use Template Haskell to implement Dynamics. If there's a pre-defined
"Dynamic" data type, all the various toDyn and fromDyn functions could
be meta-programmed so that they emit code to convert to and from the
Dynamic type. Effectively you could use Template Haskell as a
generics/polytopic system. I have no idea whether this is possible,
it's just a fleeting thought.
BTW, you didn't miss that message Simon -- you even replied[1] to it :).
1.
http://www.haskell.org/pipermail/template-haskell/2003-July/000129.html
--
% Andre Pang : trust.in.love.to.save
More information about the template-haskell
mailing list