@@ -1,3 +1,4 @@
1{-# LANGUAGE BangPatterns #-}
2{-# LANGUAGE BangPatterns #-}
2{-# LANGUAGE TupleSections #-}
3{-# LANGUAGE TupleSections #-}
3{-# LANGUAGE ScopedTypeVariables #-}
4{-# LANGUAGE ScopedTypeVariables #-}
@@ -7,6 +8,7 @@ module Main where
7import Data.Functor.Misc
8import Data.Functor.Misc
8import Control.Monad.Primitive
9import Control.Monad.Primitive
9import Control.Monad.IO.Class
10import Control.Monad.IO.Class
11+import Control.Monad.Identity
10import Data.Dependent.Sum
12import Data.Dependent.Sum
11import Control.Concurrent.STM
13import Control.Concurrent.STM
12import Control.Applicative
14import Control.Applicative
@@ -21,8 +23,6 @@ import System.Mem
21import System.IO
23import System.IO
22import Criterion.Main
24import Criterion.Main
24−import qualified Data.Traversable as T
26import qualified Data.Dependent.Map as DM
26import qualified Data.Dependent.Map as DM
@@ -30,8 +30,10 @@ main :: IO ()
30main = defaultMain
30main = defaultMain
31 [ bgroup "micro" micros ]
31 [ bgroup "micro" micros ]
33+#if !(MIN_VERSION_deepseq(1,4,2))
33instance NFData (IORef a) where
34instance NFData (IORef a) where
34 rnf x = seq x ()
35 rnf x = seq x ()
36instance NFData (TVar a) where
38instance NFData (TVar a) where
37 rnf x = seq x ()
39 rnf x = seq x ()
@@ -73,7 +75,7 @@ micros =
73 (newEventWithTriggerRef >>= subscribePair)
75 (newEventWithTriggerRef >>= subscribePair)
74 (\(subd, trigger) -> do
76 (\(subd, trigger) -> do
75 Just key <- liftIO $ readIORef trigger
77 Just key <- liftIO $ readIORef trigger
76− fireEvents [key :=> (42 :: Int)])
78+ fireEvents [key :=> Identity (42 :: Int)])
77 , withSetupWHNF "fireEventsAndRead(head/merge1)"
79 , withSetupWHNF "fireEventsAndRead(head/merge1)"
78 (setupMerge 1 >>= subscribePair)
80 (setupMerge 1 >>= subscribePair)
79 (\(subd, t:riggers) -> fireAndRead t (42 :: Int) subd)
81 (\(subd, t:riggers) -> fireAndRead t (42 :: Int) subd)
@@ -87,17 +89,17 @@ micros =
87 (setupMerge 100 >>= subscribePair)
89 (setupMerge 100 >>= subscribePair)
88 (\(subd, t:riggers) -> do
90 (\(subd, t:riggers) -> do
89 Just key <- liftIO $ readIORef t
91 Just key <- liftIO $ readIORef t
90− fireEvents [key :=> (42 :: Int)])
92+ fireEvents [key :=> Identity (42 :: Int)])
91 , withSetupWHNF "hold" newEventWithTriggerRef $ \(ev,trigger) -> hold (42 :: Int) ev
93 , withSetupWHNF "hold" newEventWithTriggerRef $ \(ev,trigger) -> hold (42 :: Int) ev
92 , withSetupWHNF "sample" (newEventWithTriggerRef >>= hold (42 :: Int) . fst) sample
94 , withSetupWHNF "sample" (newEventWithTriggerRef >>= hold (42 :: Int) . fst) sample
95setupMerge :: Int
97setupMerge :: Int
96− -> SpiderHost (Event Spider (DM.DMap (Const2 Int a)),
98+ -> SpiderHost (Event Spider (DM.DMap (Const2 Int a) Identity),
97 [IORef (Maybe (EventTrigger Spider a))])
99 [IORef (Maybe (EventTrigger Spider a))])
98setupMerge num = do
100setupMerge num = do
99 (evs, triggers) <- unzip <$> replicateM 100 newEventWithTriggerRef
101 (evs, triggers) <- unzip <$> replicateM 100 newEventWithTriggerRef
100− let !m = DM.fromList [WrapArg (Const2 i) :=> v | (i,v) <- zip [0..] evs]
102+ let !m = DM.fromList [(Const2 i) :=> v | (i,v) <- zip [0..] evs]
101 pure (merge m, triggers)
103 pure (merge m, triggers)
103subscribePair :: (Event Spider a, b) -> SpiderHost (EventHandle Spider a, b)
105subscribePair :: (Event Spider a, b) -> SpiderHost (EventHandle Spider a, b)
@@ -107,4 +109,4 @@ fireAndRead :: IORef (Maybe (EventTrigger Spider a)) -> a -> EventHandle Spider
107 -> SpiderHost (Maybe b)
109 -> SpiderHost (Maybe b)
108fireAndRead trigger val subd = do
110fireAndRead trigger val subd = do
109 Just key <- liftIO $ readIORef trigger
111 Just key <- liftIO $ readIORef trigger
110− fireEventsAndRead [key :=> val] $ readEvent subd >>= T.sequence
112+ fireEventsAndRead [key :=> Identity val] $ readEvent subd >>= sequence