@@ -27,12 +27,14 @@ import qualified Transient.Indeterminism as T
2727
2828import qualified Data.Machine as M
2929import qualified ListT as LT
30+import qualified Control.Monad.Logic as LG
3031import qualified Asyncly as A
3132
3233main :: IO ()
3334main = do
3435 defaultMain [
3536 bgroup "basic" [ bench "asyncly" $ nfIO asyncly_basic
37+ , bench "logict" $ nfIO logict_basic
3638 , bench "list-t" $ nfIO list_t_basic
3739 , bench "transient" $ nfIO transient_basic
3840 , bench "machines" $ nfIO machines_basic
@@ -135,6 +137,29 @@ list_t_basic = do
135137 assert (Prelude.length xs == 499000) $
136138 return (Prelude.length xs)
137139
140+lgfilter :: (Int -> Bool) -> Int -> LG.LogicT IO Int
141+lgfilter = Main.filter
142+
143+lgmap :: (Int -> Int) -> Int -> LG.LogicT IO Int
144+lgmap = Main.map
145+
146+lgdrop :: Int -> Int -> LG.LogicT IO Int
147+lgdrop = Main.drop
148+
149+logict_basic :: IO Int
150+logict_basic = do
151+ writeIORef count 0
152+ --xs <- LG.observeManyT 2900 $ do
153+ xs <- LG.observeAllT $ do
154+ LG.msum $ Prelude.map return [1..1000000]
155+ >>= lgfilter even
156+ >>= lgmap (+1)
157+ >>= lgdrop 1000
158+ >>= lgmap (+1)
159+ >>= lgfilter (\x -> x `mod` 2 == 0)
160+ assert (Prelude.length xs == 499000) $
161+ return (Prelude.length xs)
162+
138163machines_basic :: IO Int
139164machines_basic = do
140165 xs <- M.runT $ M.source [1..1000000]