diff options
| author | aarne <unknown> | 2003-11-05 14:42:29 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2003-11-05 14:42:29 +0000 |
| commit | 49c17be41a7d572d27df74eb7351b672e85953a1 (patch) | |
| tree | 2856b2b2af3c3d6adea285dcb42173b920751897 /src/GF/Grammar | |
| parent | ed1d2a2954a3c955625cf210905a67e0683c8411 (diff) | |
working with interfaces
Diffstat (limited to 'src/GF/Grammar')
| -rw-r--r-- | src/GF/Grammar/Compute.hs | 6 | ||||
| -rw-r--r-- | src/GF/Grammar/Lookup.hs | 55 |
2 files changed, 36 insertions, 25 deletions
diff --git a/src/GF/Grammar/Compute.hs b/src/GF/Grammar/Compute.hs index 1f1eba28c..3dd90012d 100644 --- a/src/GF/Grammar/Compute.hs +++ b/src/GF/Grammar/Compute.hs @@ -129,10 +129,12 @@ computeTerm gr = comp where (K a, Alts (d,vs)) -> do let glx = Glue x comp g $ Alts (glx d, [(glx v,c) | (v,c) <- vs]) - (Alts _, K a) -> do - x' <- strsFromTerm x + (Alts _, K a) -> checks [do + x' <- strsFromTerm x -- this may fail when compiling opers return $ variants [ foldr1 C (map K (str2strings (glueStr v (str a)))) | v <- x'] + ,return $ Glue x y + ] _ -> do mapM_ checkNoArgVars [x,y] r <- composOp (comp g) t diff --git a/src/GF/Grammar/Lookup.hs b/src/GF/Grammar/Lookup.hs index 83d6787ef..684b08cff 100644 --- a/src/GF/Grammar/Lookup.hs +++ b/src/GF/Grammar/Lookup.hs @@ -10,19 +10,23 @@ import Monad -- lookup in resource and concrete in compiling; for abstract, use Look lookupResDef :: SourceGrammar -> Ident -> Ident -> Err Term -lookupResDef gr m c = do - mi <- lookupModule gr m - case mi of - ModMod mo -> do - info <- lookupInfo mo c - case info of - ResOper _ (Yes t) -> return $ qualifAnnot m t - ResOper _ Nope -> return $ Q m c - AnyInd _ n -> lookupResDef gr n c - ResParam _ -> return $ QC m c - ResValue _ -> return $ QC m c - _ -> Bad $ prt c +++ "is not defined in resource" +++ prt m - _ -> Bad $ prt m +++ "is not a resource" +lookupResDef gr = look True where + look isTop m c = do + mi <- lookupModule gr m + case mi of + ModMod mo -> do + info <- lookupInfo mo c + case info of + ResOper _ (Yes t) -> return $ qualifAnnot m t + ResOper _ Nope -> return (Q m c) ---- if isTop then lookExt m c + ---- else prtBad "cannot find in exts" c + AnyInd _ n -> look False n c + ResParam _ -> return $ QC m c + ResValue _ -> return $ QC m c + _ -> Bad $ prt c +++ "is not defined in resource" +++ prt m + _ -> Bad $ prt m +++ "is not a resource" + lookExt m c = + checks ([look False n c | n <- allExtensions gr m] ++ [return (Q m c)]) lookupResType :: SourceGrammar -> Ident -> Ident -> Err Type lookupResType gr m c = do @@ -40,16 +44,21 @@ lookupResType gr m c = do _ -> Bad $ prt m +++ "is not a resource" lookupParams :: SourceGrammar -> Ident -> Ident -> Err [Param] -lookupParams gr m c = do - mi <- lookupModule gr m - case mi of - ModMod mo -> do - info <- lookupInfo mo c - case info of - ResParam (Yes ps) -> return ps - AnyInd _ n -> lookupParams gr n c - _ -> Bad $ prt c +++ "has no parameters defined in resource" +++ prt m - _ -> Bad $ prt m +++ "is not a resource" +lookupParams gr = look True where + look isTop m c = do + mi <- lookupModule gr m + case mi of + ModMod mo -> do + info <- lookupInfo mo c + case info of + ResParam (Yes ps) -> return ps + ---- ResParam Nope -> if isTop then lookExt m c + ---- else prtBad "cannot find params in exts" c + AnyInd _ n -> look False n c + _ -> Bad $ prt c +++ "has no parameters defined in resource" +++ prt m + _ -> Bad $ prt m +++ "is not a resource" + lookExt m c = + checks [look False n c | n <- allExtensions gr m] lookupParamValues :: SourceGrammar -> Ident -> Ident -> Err [Term] lookupParamValues gr m c = do |
