[Template-haskell] Re: TH2 bug

Keean Schupke k.schupke at imperial.ac.uk
Wed Oct 27 09:43:03 EDT 2004


Actually I would like it to be a special name... but I guess there
are other possibilities.

Ideally I would like:

case info of
    (PrimTyCon name) -> instanceD (cxt []) (appT (conT classname) (appT 
(appT (conT name) (varT a) (varT b)))

to generate:

    instance ClassName (a -> b)


    Keean

Simon Peyton-Jones wrote:

>OK, now I get it.  I'm copying the TH list in the hope that other TH
>aficionados will chime in.
>
>The problem is with reify, not the '' notation.  Here it is in a
>nutshell: 
>
>	what value should be returned by the call  (reify ''(->) )?
>
>Recall that
>	reify :: Name -> Q Info
>
>So reify claims to return an Info, and for a type constructor it
>currently returns a TyConI; but a TyConI contains a  Dec, and there
>simply is no Dec in the TH syntax for a function type; it's built in,
>rather like Int# etc.  So reify falls over in a bad way.
>
>It's obviously unsatisfactory for reify to just fall over in this case,
>but what would you like?  A new constructor in Info for primitive
>tycons?  A new constructor in Dec?  
>
>And what questions do you want to be able to ask of the value in the
>Info?  For example would it be enough to day
>
>  data Info = TyConI Dec
>	| PrimTyCon
>	| ClassI Dec
>	...etc...
>
>where the PrimTyCon is returned for (->), Int#, etc?
>
>Nothing difficult about fixing this once the design is clear.
>
>Simon
>
>| -----Original Message-----
>| From: Keean Schupke [mailto:k.schupke at imperial.ac.uk]
>| Sent: 27 October 2004 11:14
>| To: Simon Peyton-Jones
>| Subject: Re: TH2 bug
>| 
>| Yup, using HEAD. Here's an example template:
>| 
>|     ttypeshow :: Name -> Q [Dec]
>|     ttypeshow q = do
>|         r <- reify q
>|        case r of
>|           (TyConI t) -> runIO . putStrLn . show $ t
>|           _ -> return ()
>|        return []
>| 
>| Then in another file we do:
>| 
>|     $(ttypeshow ''(->))
>| 
>| Which fails, as does ''(), and ''(,) etc...
>| 
>| ''[] works okay however
>| 
>|     Keean.
>| 
>| 
>| Simon Peyton-Jones wrote:
>| 
>| >I can't reproduce this.  Works for me.  What version of GHC are you
>| >using?  The HEAD I assume?
>| >
>| >Simon
>| >
>| >| -----Original Message-----
>| >| From: MR K P SCHUPKE [mailto:k.schupke at imperial.ac.uk]
>| >| Sent: 22 October 2004 18:23
>| >| To: glasgow-haskell-users at haskell.org; Simon Peyton-Jones
>| >| Subject: TH2 bug
>| >|
>| >|
>| >| Just reporting a bug, taking types using '' works fine for:
>| >|
>| >| 	''Int
>| >| 	''[]
>| >|
>| >| But when you try:
>| >|
>| >| 	''(->)
>| >|
>| >| 	you get:
>| >|
>| >| 	No match in record selector TyCon.algTcRhs
>| >|
>| >| Please report it as a compiler bug to
>| >glasgow-haskell-bugs at haskell.org,
>| >| or http://sourceforge.net/projects/ghc/.
>| >|
>| >|
>| >| 	Keean.
>| >
>| >
>
>  
>



More information about the template-haskell mailing list