[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