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/Lookup.hs | |
| parent | ed1d2a2954a3c955625cf210905a67e0683c8411 (diff) | |
working with interfaces
Diffstat (limited to 'src/GF/Grammar/Lookup.hs')
| -rw-r--r-- | src/GF/Grammar/Lookup.hs | 55 |
1 files changed, 32 insertions, 23 deletions
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 |
