Re: Polymorphism + Quasiquoting + Untyped AST = problems
On Wed, Feb 20, 2008 at 9:12 AM, Geoffrey Mainland
On Wed, Feb 20, 2008 at 08:22:18AM +0100, Alfonso Acosta wrote:
Hi,
Let me show you why I reached that conclusion through a simple example.
I can't help but feel I've missed some context :)
Well, I'm probably bad at providing simplified examples ;). The real purpose of using quasiquoters is to help implementing fixed sized vectors (numerically parameterized lists using type-level numerals). See http://www.haskell.org/pipermail/haskell-cafe/2008-February/039801.html for details.
Using "vector" is simple:
$(vector [1,2,3,4,5])
Well, not so simple actually, as you'll get an "ambiguous type variable" error unless you add a type signature. For instance:
$(vector [1::Int,2,3,4,5])
True, I forgot to include the signature. However, even if a signature is required, vector can still be used to build vectors of any type, whereas that is not the case when using quasiquoters.
The real problem is that you can't splice in a polymorphic variable. Witness:
v = QuasiQuoter (fst . vExp) vPat
vExp :: Read a => String -> (Q Exp, a) vExp str = do let xs = (parseLTGT str) :: [a] sanityCheck xs ([| MkVec xs |], undefined)
Yes, I know. I thought it would maybe be possible if TH had a typed AST.
participants (1)
-
Alfonso Acosta