summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-06-08 16:55:25 +0000
committeraarne <aarne@cs.chalmers.se>2007-06-08 16:55:25 +0000
commit2949a973d0caf1a03508818152b0c89bf839f723 (patch)
treea395207a81619995ef5c5b3a39021c2626cf25c7 /src
parent695f30725f3abec080dc25e88ed424d56d70a0e9 (diff)
some new shortcuts in Compute; no impressive results
Diffstat (limited to 'src')
-rw-r--r--src/GF/Grammar/Compute.hs36
1 files changed, 28 insertions, 8 deletions
diff --git a/src/GF/Grammar/Compute.hs b/src/GF/Grammar/Compute.hs
index d9bd70301..1b4693932 100644
--- a/src/GF/Grammar/Compute.hs
+++ b/src/GF/Grammar/Compute.hs
@@ -127,22 +127,42 @@ computeTermOpt rec gr = comp where
PI t l i -> comp g $ P t l -----
- S t@(T _ cc) v -> do
+ S t@(T ti cc) v -> do
v' <- comp g v
case v' of
FV vs -> do
ts' <- mapM (comp g . S t) vs
return $ variants ts'
- _ -> case matchPattern cc v' of
- Ok (c,g') -> comp (g' ++ g) c
- _ | isCan v' -> prtBad ("missing case" +++ prt v' +++ "in") t
- _ -> do
- t' <- comp g t
- return $ S t' v' -- if v' is not canonical
+ _ -> case ti of
+
+ TComp _ -> do
+ case term2patt v' of
+ Ok p' -> case lookup p' cc of
+ Just u -> comp g u
+ _ -> do
+ t' <- comp g t
+ return $ S t' v' -- if v' is not canonical
+ _ -> do
+ t' <- comp g t
+ return $ S t' v'
+
+ _ -> case matchPattern cc v' of
+ Ok (c,g') -> comp (g' ++ g) c
+ _ | isCan v' -> prtBad ("missing case" +++ prt v' +++ "in") t
+ _ -> do
+ t' <- comp g t
+ return $ S t' v' -- if v' is not canonical
+
S t v -> do
- t' <- comp g t
+
+ t' <- case t of
+-- T _ _ -> return t
+ V _ _ -> return t
+ _ -> comp g t
+
v' <- comp g v
+
case v' of
FV vs -> mapM (\c -> comp g (S t' c)) vs >>= returnC . variants
_ -> case t' of