[Template-haskell] Re: TH2 bug

Simon Peyton-Jones simonpj at microsoft.com
Fri Dec 3 08:48:08 EST 2004


Did I mention that I've committed this change.

  | PrimTyConI 	-- Ones that can't be expressed with a data type 
		-- decl, such as (->), Int#
	Name 
	Int	-- Arity
	Bool	-- False => lifted type; True => unlifted


| -----Original Message-----
| From: template-haskell-bounces at haskell.org
[mailto:template-haskell-bounces at haskell.org] On
| Behalf Of Keean Schupke
| Sent: 27 October 2004 15:12
| To: Keean Schupke
| Cc: template-haskell at haskell.org; Simon Peyton-Jones
| Subject: Re: [Template-haskell] Re: TH2 bug
| 
| Just checked and 'Type' has an entry (ArrowT) for functions.
| Why not just use the existing Type. IE
| 
| reify ''(->)
| 
|     data Info =
|        PrimTyCon Type
|        TyConI Dec
| 
| This would be fine for tuples as well, I wonder if () could be
| encoded as a tuple of 0?
| 
|     Keean.
| 
| Keean Schupke wrote:
| 
| > 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.
| >> | >
| >> | >
| >>
| >>
| >>
| >
| > _______________________________________________
| > template-haskell mailing list
| > template-haskell at haskell.org
| > http://www.haskell.org/mailman/listinfo/template-haskell
| 
| 
| _______________________________________________
| template-haskell mailing list
| template-haskell at haskell.org
| http://www.haskell.org/mailman/listinfo/template-haskell


More information about the template-haskell mailing list