@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE BangPatterns #-}
23{-# LANGUAGE TupleSections #-}
34{-# LANGUAGE ScopedTypeVariables #-}
@@ -7,6 +8,7 @@ module Main where
78import Data.Functor.Misc
89import Control.Monad.Primitive
910import Control.Monad.IO.Class
11+import Control.Monad.Identity
1012import Data.Dependent.Sum
1113import Control.Concurrent.STM
1214import Control.Applicative
@@ -21,8 +23,6 @@ import System.Mem
2123import System.IO
2224import Criterion.Main
2325
24−import qualified Data.Traversable as T
25−
2626import qualified Data.Dependent.Map as DM
2727
2828
@@ -30,8 +30,10 @@ main :: IO ()
3030main = defaultMain
3131 [ bgroup "micro" micros ]
3232
33+#if !(MIN_VERSION_deepseq(1,4,2))
3334instance NFData (IORef a) where
3435 rnf x = seq x ()
36+#endif
3537
3638instance NFData (TVar a) where
3739 rnf x = seq x ()
@@ -73,7 +75,7 @@ micros =
7375 (newEventWithTriggerRef >>= subscribePair)
7476 (\(subd, trigger) -> do
7577 Just key <- liftIO $ readIORef trigger
76− fireEvents [key :=> (42 :: Int)])
78+ fireEvents [key :=> Identity (42 :: Int)])
7779 , withSetupWHNF "fireEventsAndRead(head/merge1)"
7880 (setupMerge 1 >>= subscribePair)
7981 (\(subd, t:riggers) -> fireAndRead t (42 :: Int) subd)
@@ -87,17 +89,17 @@ micros =
8789 (setupMerge 100 >>= subscribePair)
8890 (\(subd, t:riggers) -> do
8991 Just key <- liftIO $ readIORef t
90− fireEvents [key :=> (42 :: Int)])
92+ fireEvents [key :=> Identity (42 :: Int)])
9193 , withSetupWHNF "hold" newEventWithTriggerRef $ \(ev,trigger) -> hold (42 :: Int) ev
9294 , withSetupWHNF "sample" (newEventWithTriggerRef >>= hold (42 :: Int) . fst) sample
9395 ]
9496
9597setupMerge :: Int
96− -> SpiderHost (Event Spider (DM.DMap (Const2 Int a)),
98+ -> SpiderHost (Event Spider (DM.DMap (Const2 Int a) Identity),
9799 [IORef (Maybe (EventTrigger Spider a))])
98100setupMerge num = do
99101 (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]
101103 pure (merge m, triggers)
102104
103105subscribePair :: (Event Spider a, b) -> SpiderHost (EventHandle Spider a, b)
@@ -107,4 +109,4 @@ fireAndRead :: IORef (Maybe (EventTrigger Spider a)) -> a -> EventHandle Spider
107109 -> SpiderHost (Maybe b)
108110fireAndRead trigger val subd = do
109111 Just key <- liftIO $ readIORef trigger
110− fireEventsAndRead [key :=> val] $ readEvent subd >>= T.sequence
112+ fireEventsAndRead [key :=> Identity val] $ readEvent subd >>= sequence