summaryrefslogtreecommitdiff
path: root/src-3.0/PGF/Linearize.hs
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2008-05-30 09:10:28 +0000
committerkrasimir <krasimir@chalmers.se>2008-05-30 09:10:28 +0000
commit1172539a9544ed999c565053b79cf6a30ec14de4 (patch)
treee6b5e023fcede14ae7750e68c63154ac18b68940 /src-3.0/PGF/Linearize.hs
parent1077fa1f30c0714933d02cf4b9c20cbe30fd9876 (diff)
change the PGF.Data.Exp type
Diffstat (limited to 'src-3.0/PGF/Linearize.hs')
-rw-r--r--src-3.0/PGF/Linearize.hs34
1 files changed, 15 insertions, 19 deletions
diff --git a/src-3.0/PGF/Linearize.hs b/src-3.0/PGF/Linearize.hs
index 94d8aa216..d84c48f89 100644
--- a/src-3.0/PGF/Linearize.hs
+++ b/src-3.0/PGF/Linearize.hs
@@ -26,25 +26,21 @@ realize trm = case trm of
_ -> "ERROR " ++ show trm ---- debug
linExp :: GFCC -> CId -> Exp -> Term
-linExp mcfg lang tree@(DTr xs at trees) =
- addB $ case at of
- AC fun -> comp (map lin trees) $ look fun
- AS s -> R [kks (show s)] -- quoted
- AI i -> R [kks (show i)]
- --- [C lst, kks (show i), C size] where
- --- lst = mod (fromInteger i) 10 ; size = if i < 10 then 0 else 1
- AF d -> R [kks (show d)]
- AV x -> TM (prCId x)
- AM i -> TM (show i)
- where
- lin = linExp mcfg lang
- comp = compute mcfg lang
- look = lookLin mcfg lang
- addB t
- | Data.List.null xs = t
- | otherwise = case t of
- R ts -> R $ ts ++ (Data.List.map (kks . prCId) xs)
- TM s -> R $ t : (Data.List.map (kks . prCId) xs)
+linExp gfcc lang = lin
+ where
+ lin (EAbs xs e ) = case lin e of
+ R ts -> R $ ts ++ (Data.List.map (kks . prCId) xs)
+ TM s -> R $ (TM s) : (Data.List.map (kks . prCId) xs)
+ lin (EApp fun es) = comp (map lin es) $ look fun
+ lin (EStr s ) = R [kks (show s)] -- quoted
+ lin (EInt i ) = R [kks (show i)]
+ lin (EFloat d ) = R [kks (show d)]
+ lin (EVar x ) = TM (prCId x)
+ lin (EMeta i ) = TM (show i)
+
+ comp = compute gfcc lang
+ look = lookLin gfcc lang
+
compute :: GFCC -> CId -> [Term] -> Term -> Term
compute mcfg lang args = comp where