diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-01-10 21:03:18 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-01-10 21:03:18 +0000 |
| commit | 935594eb86a16532108f707b5dcfd351271d80b9 (patch) | |
| tree | ed41deeb003f8f601a3c54661f946f577056b73e /src/GF/Grammar/Compute.hs | |
| parent | 0882e5eac274f11a0cd3a98fa93c57d6ee479981 (diff) | |
semantics of variants
Diffstat (limited to 'src/GF/Grammar/Compute.hs')
| -rw-r--r-- | src/GF/Grammar/Compute.hs | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/GF/Grammar/Compute.hs b/src/GF/Grammar/Compute.hs index a299d9eb5..1fda827eb 100644 --- a/src/GF/Grammar/Compute.hs +++ b/src/GF/Grammar/Compute.hs @@ -80,10 +80,12 @@ computeTermOpt rec gr = comp where f' <- comp g f a' <- comp g a case (f',a') of + (Abs x b, FV as) -> + mapM (\c -> comp (ext x c g) b) as >>= return . variants + (_, FV as) -> mapM (\c -> comp g (App f' c)) as >>= return . variants + (FV fs, _) -> mapM (\c -> comp g (App c a')) fs >>= return . variants (Abs x b,_) -> comp (ext x a' g) b (QC _ _,_) -> returnC $ App f' a' - (FV fs, _) -> mapM (\c -> comp g (App c a')) fs >>= return . variants - (_, FV as) -> mapM (\c -> comp g (App f' c)) as >>= return . variants (Alias _ _ d, _) -> comp g (App d a') @@ -140,13 +142,14 @@ computeTermOpt rec gr = comp where t' <- comp g t v' <- comp g v case t' of + FV ccs -> mapM (\c -> comp g (S c v')) ccs >>= returnC . variants + T _ [(PV IW,c)] -> comp g c --- an optimization T _ [(PT _ (PV IW),c)] -> comp g c T _ [(PV z,c)] -> comp (ext z v' g) c --- another optimization T _ [(PT _ (PV z),c)] -> comp (ext z v' g) c - FV ccs -> mapM (\c -> comp g (S c v')) ccs >>= returnC . variants V ptyp ts -> do vs <- allParamValues gr ptyp @@ -180,6 +183,13 @@ computeTermOpt rec gr = comp where x <- comp g x0 y <- comp g y0 case (x,y) of + (FV ks,_) -> do + kys <- mapM (comp g . flip Glue y) ks + return $ variants kys + (_,FV ks) -> do + xks <- mapM (comp g . Glue x) ks + return $ variants xks + (Alias _ _ d, y) -> comp g $ Glue d y (x, Alias _ _ d) -> comp g $ Glue x d @@ -201,12 +211,6 @@ computeTermOpt rec gr = comp where ---- foldr1 C (map K (str2strings (glueStr v (str a)))) | v <- x'] ,return $ Glue x y ] - (FV ks,_) -> do - kys <- mapM (comp g . flip Glue y) ks - return $ variants kys - (_,FV ks) -> do - xks <- mapM (comp g . Glue x) ks - return $ variants xks _ -> do mapM_ checkNoArgVars [x,y] |
