diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2006-06-21 19:37:18 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2006-06-21 19:37:18 +0000 |
| commit | af555cc6a73a4a13e81d05cabe9eda1bbc492452 (patch) | |
| tree | 5e8b65666be9bb59c64ca0db1c7d20c0120d8ee9 /src/GF/Conversion | |
| parent | 4813788a9bb14360bfcc167db8eb7c7a2f7d6260 (diff) | |
Optimized mkSingletonSelectors
Diffstat (limited to 'src/GF/Conversion')
| -rw-r--r-- | src/GF/Conversion/SimpleToFCFG.hs | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/GF/Conversion/SimpleToFCFG.hs b/src/GF/Conversion/SimpleToFCFG.hs index 99f0f31fa..fbefd8693 100644 --- a/src/GF/Conversion/SimpleToFCFG.hs +++ b/src/GF/Conversion/SimpleToFCFG.hs @@ -354,14 +354,14 @@ data STermSelector | StrSel mkSingletonSelectors :: SLinType -> [STermSelector] -mkSingletonSelectors ctype = - let (rcss,tcss) = loop emptyPath ([],[]) ctype - in [mkSelector [rcs] tcss | rcs <- rcss] +mkSingletonSelectors ctype = sels0 where + (sels0,tcss0) = loop emptyPath ([],[]) ctype + loop path st (RecT record) = List.foldl' (\st (lbl,ctype) -> loop (path ++. lbl ) st ctype) st record loop path st (TblT terms ctype) = List.foldl' (\st term -> loop (path ++! term) st ctype) st terms - loop path (rcss,tcss) (ConT terms) = (rcss, map ((,) path) terms : tcss) - loop path (rcss,tcss) (StrT) = (path : rcss, tcss) + loop path (sels,tcss) (ConT terms) = ( sels,map ((,) path) terms : tcss) + loop path (sels,tcss) (StrT) = (mkSelector [path] tcss0 : sels, tcss) mkSelector :: [SPath] -> [[(SPath,STerm)]] -> STermSelector |
