[Template-haskell] Using a Typ as a Type

Simon Peyton-Jones simonpj@microsoft.com
Wed, 3 Sep 2003 09:45:18 +0100

| Is there any way that I can use a Typ (i.e., a reified Type) as a Type
| a template so that I can use the Typ to select an instance of a type
| For example, I'd like to be able to write (this doesn't parse):
|   $(test [t[ Float ]] "1.0")
|   test :: Q Typ -> String -> Q [Dec]
|   test qty x =3D do
|     ty <- qty
|     print (read x :: $ty)    -- The ':: $ty' part is the important bit
|     return []

I've Sean's reply and Alastair's reply to that, and I still can't figure
out what you are trying to do.  The above code looks weird. =20
	test is a Q [Dec], but you are doing a print in the middle of
it.  Why?

In principle you can certainly say:

	$(test [t| Float ]] "2.0")

	test :: Q Type -> String -> Q [Dec]
	test qty x =3D [| read (x::$qty) |]

so that=20
	$(test [t| Float ]] "2.0")
	read ("2.0" :: Float)

TH doesn't support type splices today; that's one of the things I'm
actively working on.  But I'm not sure if this is what you meant.