FW: Records and generating splices

"Rene de Visser" <[email protected]> Mon, 11 Jul 2005 18:39:20 +0200
Newsgroups gmane.comp.lang.haskell.template
Message-ID <[email protected]>
>From: "Rene de Visser" <[email protected]>
>test = [| add_rel1 value = modify (\db -> db{ rel1 = Set.insert value (rel1 
>db)}) |]
>{-# OPTIONS -fglasgow-exts #-}
>module DataBase where
>
>import Control.Monad.State
>import qualified Data.Set as Set
>-- Does this really need to be extensible???
>-- Entries need to be based on sets, or something similar...
>data SmallDB = SmallDB { rel1 :: Set.Set String
>                       , rel2 :: Set.Set Integer } deriving Show
>
>emptyDB = SmallDB Set.empty Set.empty
>
>add_rel1 :: (MonadState SmallDB m) => String -> m ()
>add_rel1 value = modify (\db -> db{ rel1 = Set.insert value (rel1 db)})
>
>add_rel2 :: (MonadState SmallDB m) => Integer -> m ()
>add_rel2 value = modify (\db -> db{ rel2 = Set.insert value (rel2 db)})
>
So I've made a tiny bit of progress.

I have:
test9 = [d| add_rel1 value = $(exp) value |] where
          exp = [| (\value -> modify (\db -> $(updater) db (Set.insert value 
(rel1 db)))) |] where
          updater = [|(\db value -> db{rel1 = value}) |]
          --updater =  LamE [VarP db_2,VarP value_3] (RecUpdE (VarE db_2) 
[(DataBase.rel1,VarE value_3)]) where
          db_2 = mkName "db_2" ; value_3 = mkName "value_3"

However if I replace updater by its expansion, I get a type error. Why? It 
looks like an expansion of a quasi quote is not identical to the quasi 
quote?

Rene.