mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-26 11:18:55 -06:00
Optimized mkSingletonSelectors
This commit is contained in:
@@ -354,14 +354,14 @@ data STermSelector
|
|||||||
| StrSel
|
| StrSel
|
||||||
|
|
||||||
mkSingletonSelectors :: SLinType -> [STermSelector]
|
mkSingletonSelectors :: SLinType -> [STermSelector]
|
||||||
mkSingletonSelectors ctype =
|
mkSingletonSelectors ctype = sels0
|
||||||
let (rcss,tcss) = loop emptyPath ([],[]) ctype
|
|
||||||
in [mkSelector [rcs] tcss | rcs <- rcss]
|
|
||||||
where
|
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 (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 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 (sels,tcss) (ConT terms) = ( sels,map ((,) path) terms : tcss)
|
||||||
loop path (rcss,tcss) (StrT) = (path : rcss, tcss)
|
loop path (sels,tcss) (StrT) = (mkSelector [path] tcss0 : sels, tcss)
|
||||||
|
|
||||||
|
|
||||||
mkSelector :: [SPath] -> [[(SPath,STerm)]] -> STermSelector
|
mkSelector :: [SPath] -> [[(SPath,STerm)]] -> STermSelector
|
||||||
|
|||||||
Reference in New Issue
Block a user