diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2006-06-01 10:26:49 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2006-06-01 10:26:49 +0000 |
| commit | 496f1fc8767f9d8ce1bb69b6e6460c2b7b7dd4b4 (patch) | |
| tree | 744205609902f1dde62a9aca91457da65e02deef /src/GF/Conversion/SimpleToMCFG | |
| parent | f7d8cdfc2ec43984979a6c7dd1eacc221dd779ec (diff) | |
The SLinType type is changed so that you don't have to use enumerateTerms each time when you want to know the possible table arguments
Diffstat (limited to 'src/GF/Conversion/SimpleToMCFG')
| -rw-r--r-- | src/GF/Conversion/SimpleToMCFG/Nondet.hs | 16 | ||||
| -rw-r--r-- | src/GF/Conversion/SimpleToMCFG/Strict.hs | 2 |
2 files changed, 8 insertions, 10 deletions
diff --git a/src/GF/Conversion/SimpleToMCFG/Nondet.hs b/src/GF/Conversion/SimpleToMCFG/Nondet.hs index 514f2b382..d6ff052f5 100644 --- a/src/GF/Conversion/SimpleToMCFG/Nondet.hs +++ b/src/GF/Conversion/SimpleToMCFG/Nondet.hs @@ -136,15 +136,13 @@ simplifyCase (pat, term) = liftM2 (,) (simplifyTerm pat) (simplifyTerm term) reduceTerm :: SLinType -> SPath -> STerm -> CnvMonad () --reduceTerm ctype path (Variants terms) -- = member terms >>= reduceTerm ctype path -reduceTerm (StrT) path term = updateLin (path, term) -reduceTerm (ConT _ _) path term = do pat <- expandTerm term - updateHead (path, pat) +reduceTerm (StrT) path term = updateLin (path, term) +reduceTerm (ConT _) path term = do pat <- expandTerm term + updateHead (path, pat) reduceTerm (RecT rtype) path term - = sequence_ [ reduceTerm ctype (path ++. lbl) (term +. lbl) | - (lbl, ctype) <- rtype ] -reduceTerm (TblT ptype vtype) path table - = sequence_ [ reduceTerm vtype (path ++! pat) (table +! pat) | - pat <- enumeratePatterns ptype ] + = sequence_ [ reduceTerm ctype (path ++. lbl) (term +. lbl) | (lbl, ctype) <- rtype ] +reduceTerm (TblT pats vtype) path table + = sequence_ [ reduceTerm vtype (path ++! pat) (table +! pat) | pat <- pats ] ------------------------------------------------------------ @@ -174,7 +172,7 @@ unifyPType arg (RecT prec) = sequence [ liftM ((,) lbl) $ unifyPType (arg +. lbl) ptype | (lbl, ptype) <- prec ] -unifyPType (Arg nr _ path) (ConT con terms) = +unifyPType (Arg nr _ path) (ConT terms) = do (_, args, _, _) <- readState case lookup path (ecatConstraints (args !! nr)) of Just term -> return term diff --git a/src/GF/Conversion/SimpleToMCFG/Strict.hs b/src/GF/Conversion/SimpleToMCFG/Strict.hs index 6ca7c4737..a5519fcd8 100644 --- a/src/GF/Conversion/SimpleToMCFG/Strict.hs +++ b/src/GF/Conversion/SimpleToMCFG/Strict.hs @@ -109,7 +109,7 @@ termPaths ctype term | isBaseType ctype = [ (emptyPath, (ctype, term)) ] parPaths :: SLinType -> STerm -> [[(SPath, STerm)]] parPaths ctype term = mapM (uncurry (map . (,))) $ groupPairs $ nubsort [ (path, value) | - (path, (ConT _ _, value)) <- termPaths ctype term ] + (path, (ConT _, value)) <- termPaths ctype term ] strPaths :: SLinType -> STerm -> [(SPath, STerm)] strPaths ctype term = [ (path, variants values) | (path, values) <- groupPairs paths ] |
