Hello everybody I am new to the list and intend to bother you a bit in the near future with newbie questions --- my apologies in advance. The following seems strange to me. If I try: data Tree a = Leaf a | Bin (Tree a) (Tree a) out' :: Dec -> () out' _ = () outGen' :: Q [Dec] outGen' = do d<-reifyDecl Tree dec1<-clause [pvar "x"] (normal [|out' d|]) [] return [Fun "out" [dec1]] I get an unexpected: No instance for (Lift Dec) arising from use of `d'... Whereas if I replace outGen' by: foo :: Q () foo = do d<-reifyDecl Tree return (out' d) outGen :: Q [Dec] outGen = do dec1<-clause [pvar "x"] (normal [|foo|]) [] return [Fun "out" [dec1]] Then everything works OK. Is it really a bug or just one of the numerous staging problems ? Shouldn't everything derive Lift, by the way ? (if useful) Now another thing: after writing some code randomly, I happened to write foo like this: foo :: Q () foo = do d<-reifyDecl Tree return $( [| out' d |] ) Because I meant that the "out' d" should really be executed _before_. Now, I understand this was not really sensible (or was it ?). However, ghc gives an ugly "panic!" message upon this, which is not nice, and I suppose had to be reported. Cheers, fr.
participants (1)
-
François-Régis Sinot