From af555cc6a73a4a13e81d05cabe9eda1bbc492452 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Wed, 21 Jun 2006 19:37:18 +0000 Subject: [PATCH] Optimized mkSingletonSelectors --- src/GF/Conversion/SimpleToFCFG.hs | 10 +++++----- 1 file 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