@@ -27,12 +27,14 @@ import qualified Transient.Indeterminism as T
28import qualified Data.Machine as M
28import qualified Data.Machine as M
29import qualified ListT as LT
29import qualified ListT as LT
30+import qualified Control.Monad.Logic as LG
30import qualified Asyncly as A
31import qualified Asyncly as A
32main :: IO ()
33main :: IO ()
34 defaultMain [
35 defaultMain [
35 bgroup "basic" [ bench "asyncly" $ nfIO asyncly_basic
36 bgroup "basic" [ bench "asyncly" $ nfIO asyncly_basic
37+ , bench "logict" $ nfIO logict_basic
36 , bench "list-t" $ nfIO list_t_basic
38 , bench "list-t" $ nfIO list_t_basic
37 , bench "transient" $ nfIO transient_basic
39 , bench "transient" $ nfIO transient_basic
38 , bench "machines" $ nfIO machines_basic
40 , bench "machines" $ nfIO machines_basic
@@ -135,6 +137,29 @@ list_t_basic = do
135 assert (Prelude.length xs == 499000) $
137 assert (Prelude.length xs == 499000) $
136 return (Prelude.length xs)
138 return (Prelude.length xs)
140+lgfilter :: (Int -> Bool) -> Int -> LG.LogicT IO Int
141+lgfilter = Main.filter
143+lgmap :: (Int -> Int) -> Int -> LG.LogicT IO Int
146+lgdrop :: Int -> Int -> LG.LogicT IO Int
149+logict_basic :: IO Int
152+ --xs <- LG.observeManyT 2900 $ do
153+ xs <- LG.observeAllT $ do
154+ LG.msum $ Prelude.map return [1..1000000]
159+ >>= lgfilter (\x -> x `mod` 2 == 0)
160+ assert (Prelude.length xs == 499000) $
161+ return (Prelude.length xs)
138machines_basic :: IO Int
163machines_basic :: IO Int
139machines_basic = do
164machines_basic = do
140 xs <- M.runT $ M.source [1..1000000]
165 xs <- M.runT $ M.source [1..1000000]