diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-06-08 16:55:25 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-06-08 16:55:25 +0000 |
| commit | 2949a973d0caf1a03508818152b0c89bf839f723 (patch) | |
| tree | a395207a81619995ef5c5b3a39021c2626cf25c7 /src | |
| parent | 695f30725f3abec080dc25e88ed424d56d70a0e9 (diff) | |
some new shortcuts in Compute; no impressive results
Diffstat (limited to 'src')
| -rw-r--r-- | src/GF/Grammar/Compute.hs | 36 |
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 |
