diff options
| author | aarne <aarne@cs.chalmers.se> | 2007-06-18 18:31:02 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2007-06-18 18:31:02 +0000 |
| commit | 6090012fa2added5c2dcb89e39301482027e2ecc (patch) | |
| tree | d9e92faf7674eae088fae60a53dc138b083d85d1 /src/GF | |
| parent | ed5b02d4aafdd5250076ede6cbe4ad3ab707ea98 (diff) | |
overloading in ParadigmsFre
Diffstat (limited to 'src/GF')
| -rw-r--r-- | src/GF/Compile/Rename.hs | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/src/GF/Compile/Rename.hs b/src/GF/Compile/Rename.hs index d5561fcc6..52fb44211 100644 --- a/src/GF/Compile/Rename.hs +++ b/src/GF/Compile/Rename.hs @@ -40,6 +40,7 @@ import GF.Data.Operations import Control.Monad import Data.List (nub) +import Debug.Trace (trace) renameGrammar :: SourceGrammar -> Err SourceGrammar renameGrammar g = liftM (MGrammar . reverse) $ foldM renameModule [] (modules g) @@ -70,22 +71,8 @@ renameIdentTerm :: Status -> Term -> Err Term renameIdentTerm env@(act,imps) t = errIn ("atomic term" +++ prt t +++ "given" +++ unwords (map (prt . fst) qualifs)) $ case t of - Vr c -> case lookupTree prt c act of - Ok f -> return $ f c - _ -> case lookupTreeManyAll prt opens c of - [f] -> return $ f c - [] -> predefAbs c ("constant not found:" +++ prt c) - fs -> case nub [f c | f <- fs] of - [tr] -> return tr - ts -> Bad $ "conflicting imports:" +++ unwords (map prt ts) - Cn c -> case lookupTree prt c act of - Ok f -> return $ f c - _ -> case lookupTreeManyAll prt opens c of - [f] -> return $ f c - [] -> Bad ("constant not found:" +++ prt c) - fs -> case nub [f c | f <- fs] of - [tr] -> return tr - ts -> Bad $ "conflicting imports:" +++ unwords (map prt ts) + Vr c -> ident predefAbs c + Cn c -> ident (\_ s -> Bad s) c Q m' c | m' == cPredef {- && isInPredefined c -} -> return t Q m' c -> do m <- lookupErr m' qualifs @@ -109,6 +96,17 @@ renameIdentTerm env@(act,imps) t = IC "String" -> return $ Q cPredefAbs cString _ -> Bad s + ident alt c = case lookupTree prt c act of + Ok f -> return $ f c + _ -> case lookupTreeManyAll prt opens c of + [f] -> return $ f c + [] -> alt c ("constant not found:" +++ prt c) + fs -> case nub [f c | f <- fs] of + [tr] -> return tr + ts@(tr:_) -> + Bad $ "conflicting imports:" +++ unwords (map prt ts) + + --- | would it make sense to optimize this by inlining? renameIdentPatt :: Status -> Patt -> Err Patt renameIdentPatt env p = do |
