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.