[Fencommits] fenserve: remove variable types from the rendering environment, because for now variable expressions know their types

Benja Fallenstein benja.fallenstein at gmail.com
Thu Jun 21 15:58:57 EEST 2007


Thu Jun 21 15:58:39 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * remove variable types from the rendering environment, because for now variable expressions know their types
diff -rN -u old-fenserve/fendata/Potions.hs new-fenserve/fendata/Potions.hs
--- old-fenserve/fendata/Potions.hs	2007-06-21 15:58:57.000000000 +0300
+++ new-fenserve/fendata/Potions.hs	2007-06-21 15:58:57.000000000 +0300
@@ -31,7 +31,7 @@
     deriving (Read, Show, Typeable, Data, Eq, Ord)
     
     
-mint ty (t, f, exec) = (t, I $ mintVar ty $ \var -> ren (f var), exec)
+mint f = I $ mintVar $ \var -> ren (f var)
 
 runExp :: (?imp :: Imp) => [Values] -> Exp -> Values
 runExp env (Focus e) = runExp env e
@@ -49,7 +49,7 @@
 potions =
   [ Potion "var" $ \(ty, i) ->
       ( ty
-      , ( varType i, " ", varName i )
+      , ( renderType ty, " ", varName i )
       , \env -> env !! i )
       
   , Potion "literal" $ \(ty, values) ->
@@ -76,19 +76,20 @@
         , " in the database" )
       , \_ -> map (ItemValue cat) $ map itemId $ getItems cat )
 
-  , Potion "sort" $ \(ty, e1, e2, order) -> mint (Single ty)
+  , Potion "sort" $ \(ty, e1, e2, order) ->
       ( Multiple ty
-      , \var -> ( E 0 e1, " ", varName var, ", sorted by ", E 1 e2, ", "
-                , case order of Asc -> "ascending"; Desc -> "descending" )
+      , mint $ \var -> ( E 0 e1, " ", varName var, ", sorted by ", E 1 e2
+                       , ", " , case order of Asc -> "ascending"
+                                              Desc -> "descending" )
       , \env -> let values = runExp env e1
                     sortKeys = map (\v -> runExp ([v]:env) e2) values
                     sorted = map snd $ sort $ zip sortKeys values
                  in case order of Asc -> sorted; Desc -> reverse sorted )
                  
-  , Potion "filter" $ \(ty, e1, e2) -> mint (Single ty)
+  , Potion "filter" $ \(ty, e1, e2) ->
       ( Multiple ty
-      , \var -> ( "those ", Multiple ty, " ", varName var, " of ", E 0 e1
-                , " such that ", E 1 e2 )
+      , mint $ \var -> ( "those ", Multiple ty, " ", varName var, " of "
+                       , E 0 e1, " such that ", E 1 e2 )
       , \env -> let f v = case runExp ([v]:env) e2 of [BooleanValue b] -> b
                  in filter f $ runExp env e1 )
                  
diff -rN -u old-fenserve/fendata/Rendering.hs new-fenserve/fendata/Rendering.hs
--- old-fenserve/fendata/Rendering.hs	2007-06-21 15:58:57.000000000 +0300
+++ new-fenserve/fendata/Rendering.hs	2007-06-21 15:58:57.000000000 +0300
@@ -49,15 +49,12 @@
 renderValues vs = commaList $ map renderValue $ vs
 
 
-varType :: (?imp :: Imp) => Int -> RenderExp [(Bool, HTML)]
-varType i = ask >>= renderOne . renderType . snd . (!! i) . envVars
-
 varName :: (?imp :: Imp) => Int -> RenderExp [(Bool, HTML)]
-varName i = asks ((!! i) . envVars) >>= \(name,_) -> ren ("'", ital name, "'")
+varName i = asks ((!! i) . envVars) >>= \name -> ren ("'", ital name, "'")
 
-mintVar :: Type -> (Int -> RenderExp a) -> RenderExp a
-mintVar t f = do var <- get; put (var + 1)
-                 local (\e -> e {envVars=(n var,t):envVars e}) (f var) where
+mintVar :: (Int -> RenderExp a) -> RenderExp a
+mintVar f = do var <- get; put (var + 1)
+               local (\e -> e {envVars=n var:envVars e}) (f var) where
     n i = (if i<26 then "" else n (i `div` 26))
        ++ [toEnum $ fromEnum 'a' + i `mod` 26]
        
diff -rN -u old-fenserve/fendata/Types.hs new-fenserve/fendata/Types.hs
--- old-fenserve/fendata/Types.hs	2007-06-21 15:58:57.000000000 +0300
+++ new-fenserve/fendata/Types.hs	2007-06-21 15:58:57.000000000 +0300
@@ -151,7 +151,7 @@
 -- Rendering of expressions
 ----------------------------------------------------------------------------
 
-data Env = Env { envVars :: [(String,Type)], envPath :: [Int], envWhole :: Exp }
+data Env = Env { envVars :: [String], envPath :: [Int], envWhole :: Exp }
 
 type RenderExp = ReaderT Env :$$: State Int
                                




More information about the Fencommits mailing list