Re: Polymorphism + Quasiquoting + Untyped AST = problems
"Alfonso Acosta" <[email protected]> Wed, 20 Feb 2008 09:41:16 +0100
| Newsgroups | gmane.comp.lang.haskell.template |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Feb 20, 2008 at 9:12 AM, Geoffrey Mainland <[email protected]> wrote: > 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.