It doesn't typecheck, no, but it also doesn't check out in scope. It complains in
[FunD 'mousePosition [| mousePositionf |] ... that mousePositionf isn't in scope. What I believe I need to do is use mkName "mousePositionf", but how do I bind the record getter "mousePositionf" that is defined by the code in the function named "additions" to mousePosition -- a.k.a. how do I write that template? Is it a ConE? And how do I encode a{ mousePositionf = b } in template haskell without using the [| |] syntax, so that I can use mkName? -- Jeff On Tue, Jan 6, 2009 at 6:23 PM, Eelco Lempsink <ee...@lempsink.nl> wrote: > On 6 jan 2009, at 18:08, Jeff Heard wrote: >> >> Alright... I *think* I'm nearly there, but I can't figure out how to >> derive a class instance using record accessors and updaters... Can >> anyone help? There are [| XXXf |] instances at the end of the module >> and they all need replaced, but I can't figure out what to replace >> them with. > > ... >> >> -- usage: $(deriveUIState ''MyTypeWithUIState) >> {- >> - Derive an instance of UIState from some type that has had UIState >> fields added to it. >> -} >> deriveUIState tp = do >> return [InstanceD [] >> (appUIState $ appType tp []) >> [FunD 'mousePosition [| mousePositionf |] > > ... >> >> ,FunD 'setMousePosition [| \b a -> a{ >> mousePositionf=b } |] > > ... > > Quick guess: this doesn't typecheck? > > FunD :: Name -> [Clause] -> Dec > > while [| ... |] will return something of type ExpQ (which is the same as Q > Exp). > > You're indeed nearly there, but if you use the quotation brackets you need > to write monadic code (for the Q monad) and use functions like clause and > funD. The tutorials on the wiki (you've probably seen them, > http://www.haskell.org/haskellwiki/Template_Haskell) or pretty good and you > could also look at packages at hackage for inspiration/examples, e.g. > http://hackage.haskell.org/packages/archive/haxr-th/3000.0.0/doc/html/src/Network-XmlRpc-THDeriveXmlRpcType.html > > -- > Regards, > > Eelco Lempsink > > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe