There is a bug in GHC: mkName ":" doesn't work right. let pcons x xs = return $ InfixP x (mkName ":") xs The reason is that ":" is built-in syntax, and I wasn't handing that right. You can get around it by replacing the call to mkName by a quoted name, thus: let pcons x xs = return $ InfixP x '(:) xs but I will fix the bug. Simon | -----Original Message----- | From: template-haskell-bounces@haskell.org [mailto:template-haskell-bounces@haskell.org] On | Behalf Of Ch. A. Herrmann | Sent: 29 November 2005 16:55 | To: template-haskell@haskell.org | Subject: [Template-haskell] TH problem | | Dear TH gurus, | | I'm desperately trying to convert the old TH examples to work with ghc-6.4.1 | and got stuck with a problem I cannot explain. Although the splice seems | to be correct, the compiler complains about the (:) in the gerated | pattern match. | I appended the source files. They are not very nice right now, because all | guidance I have are the types generated by haddock and all effort I spent | was to make them fit somehow. | Please tell me where the error is and how to proceed or, even | better, please send me the corrected source files back. | | Many thanks in advance. | | Christoph | ------------------------------------------------------------------------ ---------------- | Loading package base-1.0 ... linking ... done. | Compiling Zip ( ./Zip.hs, interpreted ) | Compiling Sel ( ./Sel.hs, interpreted ) | Compiling Main ( Main.hs, interpreted ) | Loading package haskell98-1.0 ... linking ... done. | Loading package haskell-src-1.0 ... linking ... done. | Loading package template-haskell-1.0 ... linking ... done. | Main.hs:16:18: | Main.hs:16:18-23: Splicing expression | zipN 3 | ======> | let | zp[a4fV] = \ y1 y2 y3 | -> case (y1, y2, y3) of | (x1 : xs1, x2 : xs2, x3 : xs3) | -> ((x1, x2, x3) `GHC.Base.:` (zp[a4fV] | xs1 xs2 xs3)) | (_, _, _) -> GHC.Base.[] | in zp[a4fV] | In the second argument of `($)', namely `$[splice](zipN 3) as bs cs' | In a 'do' expression: print $ ($[splice](zipN 3) as bs cs) | In the definition of `main': | main = do | let as = ['a' .. 'e'] | bs = map toUpper as | cs = map ord as | print $ ($[splice](zipN 3) as bs cs) | let ds = [1 .. ] | print $ ($[splice](zipN 4) ds as bs cs) | print $ ($[splice](sel 1 3) (2, 'a', 6)) | | Main.hs:16:18: Not in scope: data constructor `:' | | Main.hs:16:18: Not in scope: data constructor `:' | | Main.hs:16:18: Not in scope: data constructor `:' | Failed, modules loaded: Sel, Zip. | -- | Christoph | | | |