summaryrefslogtreecommitdiff
path: root/src/GF/Conversion/SimpleToFCFG.hs
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2006-06-21 19:37:18 +0000
committerkr.angelov <kr.angelov@gmail.com>2006-06-21 19:37:18 +0000
commitaf555cc6a73a4a13e81d05cabe9eda1bbc492452 (patch)
tree5e8b65666be9bb59c64ca0db1c7d20c0120d8ee9 /src/GF/Conversion/SimpleToFCFG.hs
parent4813788a9bb14360bfcc167db8eb7c7a2f7d6260 (diff)
Optimized mkSingletonSelectors
Diffstat (limited to 'src/GF/Conversion/SimpleToFCFG.hs')
-rw-r--r--src/GF/Conversion/SimpleToFCFG.hs10
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