diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2006-06-21 19:17:25 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2006-06-21 19:17:25 +0000 |
| commit | 4813788a9bb14360bfcc167db8eb7c7a2f7d6260 (patch) | |
| tree | ba02574e444f90deb1e4c4bd286f2a93ccacfe69 /src/GF | |
| parent | eed8c6f8135cb719f53f16569e3d61824cfe3039 (diff) | |
tail call recursive implementation of BacktrackM
Diffstat (limited to 'src/GF')
| -rw-r--r-- | src/GF/Data/BacktrackM.hs | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/GF/Data/BacktrackM.hs b/src/GF/Data/BacktrackM.hs index 736699c16..55a888857 100644 --- a/src/GF/Data/BacktrackM.hs +++ b/src/GF/Data/BacktrackM.hs @@ -29,6 +29,7 @@ module GF.Data.BacktrackM ( -- * the backtracking state monad foldFinalStates, finalStates ) where +import Data.List import Control.Monad ---------------------------------------------------------------------- @@ -80,7 +81,7 @@ failure :: BacktrackM s a failure = BM (\c s b -> b) (|||) :: BacktrackM s a -> BacktrackM s a -> BacktrackM s a -(BM f) ||| (BM g) = BM (\c s b -> f c s (g c s b)) +(BM f) ||| (BM g) = BM (\c s b -> g c s $! f c s b) instance MonadPlus (BacktrackM s) where mzero = failure @@ -89,4 +90,4 @@ instance MonadPlus (BacktrackM s) where -- * specific functions on the backtracking monad member :: [a] -> BacktrackM s a -member = msum . map return +member xs = BM (\c s b -> foldl' (\b x -> c x s b) b xs) |
