reflex 0.4.0 → 0.4.0.1
raw patch · 3 files changed
+42/−24 lines, 3 filesdep ~basedep ~criteriondep ~dependent-sum
Dependency ranges changed: base, criterion, dependent-sum, haskell-src-exts, haskell-src-meta, ref-tf, syb, template-haskell, these, transformers
Files
- bench/Main.hs +9/−7
- reflex.cabal +16/−16
- src/Reflex/Dynamic/TH.hs +17/−1
bench/Main.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE BangPatterns #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -7,6 +8,7 @@ import Data.Functor.Misc import Control.Monad.Primitive import Control.Monad.IO.Class+import Control.Monad.Identity import Data.Dependent.Sum import Control.Concurrent.STM import Control.Applicative@@ -21,8 +23,6 @@ import System.IO import Criterion.Main -import qualified Data.Traversable as T- import qualified Data.Dependent.Map as DM @@ -30,8 +30,10 @@ main = defaultMain [ bgroup "micro" micros ] +#if !(MIN_VERSION_deepseq(1,4,2)) instance NFData (IORef a) where rnf x = seq x ()+#endif instance NFData (TVar a) where rnf x = seq x ()@@ -73,7 +75,7 @@ (newEventWithTriggerRef >>= subscribePair) (\(subd, trigger) -> do Just key <- liftIO $ readIORef trigger- fireEvents [key :=> (42 :: Int)])+ fireEvents [key :=> Identity (42 :: Int)]) , withSetupWHNF "fireEventsAndRead(head/merge1)" (setupMerge 1 >>= subscribePair) (\(subd, t:riggers) -> fireAndRead t (42 :: Int) subd)@@ -87,17 +89,17 @@ (setupMerge 100 >>= subscribePair) (\(subd, t:riggers) -> do Just key <- liftIO $ readIORef t- fireEvents [key :=> (42 :: Int)])+ fireEvents [key :=> Identity (42 :: Int)]) , withSetupWHNF "hold" newEventWithTriggerRef $ \(ev,trigger) -> hold (42 :: Int) ev , withSetupWHNF "sample" (newEventWithTriggerRef >>= hold (42 :: Int) . fst) sample ] setupMerge :: Int- -> SpiderHost (Event Spider (DM.DMap (Const2 Int a)),+ -> SpiderHost (Event Spider (DM.DMap (Const2 Int a) Identity), [IORef (Maybe (EventTrigger Spider a))]) setupMerge num = do (evs, triggers) <- unzip <$> replicateM 100 newEventWithTriggerRef- let !m = DM.fromList [WrapArg (Const2 i) :=> v | (i,v) <- zip [0..] evs]+ let !m = DM.fromList [(Const2 i) :=> v | (i,v) <- zip [0..] evs] pure (merge m, triggers) subscribePair :: (Event Spider a, b) -> SpiderHost (EventHandle Spider a, b)@@ -107,4 +109,4 @@ -> SpiderHost (Maybe b) fireAndRead trigger val subd = do Just key <- liftIO $ readIORef trigger- fireEventsAndRead [key :=> val] $ readEvent subd >>= T.sequence+ fireEventsAndRead [key :=> Identity val] $ readEvent subd >>= sequence
reflex.cabal view
@@ -1,5 +1,5 @@ Name: reflex-Version: 0.4.0+Version: 0.4.0.1 Synopsis: Higher-order Functional Reactive Programming Description: Reflex is a high-performance, deterministic, higher-order Functional Reactive Programming system License: BSD3@@ -10,28 +10,28 @@ Category: FRP Build-type: Simple Cabal-version: >=1.9.2-homepage: https://github.com/ryantrinkle/reflex-bug-reports: https://github.com/ryantrinkle/reflex/issues+homepage: https://github.com/reflex-frp/reflex+bug-reports: https://github.com/reflex-frp/reflex/issues library hs-source-dirs: src build-depends:- base >= 4.7 && < 4.9,- dependent-sum == 0.3.*,+ base >= 4.7 && < 4.10,+ dependent-sum >= 0.3 && < 0.5, dependent-map == 0.2.*, semigroups >= 0.16 && < 0.19, mtl >= 2.1 && < 2.3, containers == 0.5.*,- these >= 0.4 && < 0.7,+ these >= 0.4 && < 0.8, primitive >= 0.5 && < 0.7,- template-haskell >= 2.9 && < 2.11,+ template-haskell >= 2.9 && < 2.13, ref-tf == 0.4.*, exception-transformers == 0.4.*, transformers >= 0.2, transformers-compat >= 0.3,- haskell-src-exts == 1.16.*,- haskell-src-meta == 0.6.*,- syb == 0.5.*+ haskell-src-exts >= 1.16 && < 1.20,+ haskell-src-meta >= 0.6 && < 0.9,+ syb >= 0.4.4 && < 0.8 exposed-modules: Reflex,@@ -71,12 +71,12 @@ base, dependent-sum, dependent-map,- transformers >= 0.3 && < 0.5,+ transformers >= 0.3 && < 0.6, stm == 2.4.*, deepseq >= 1.3 && < 1.5, mtl, primitive,- criterion == 1.1.*,+ criterion >= 1.1 && < 1.3, reflex benchmark saulzar-bench@@ -87,18 +87,18 @@ build-depends: base, containers == 0.5.*,- ref-tf == 0.4,+ ref-tf == 0.4.*, dependent-sum, dependent-map,- transformers >= 0.3 && < 0.5,+ transformers >= 0.3 && < 0.6, stm == 2.4.*, deepseq >= 1.3 && < 1.5, mtl, primitive,- criterion == 1.1.*,+ criterion >= 1.1 && < 1.3, split, reflex source-repository head type: git- location: https://github.com/ryantrinkle/reflex+ location: https://github.com/reflex-frp/reflex
src/Reflex/Dynamic/TH.hs view
@@ -1,4 +1,10 @@-{-# LANGUAGE TemplateHaskell, ScopedTypeVariables, TypeOperators, GADTs, EmptyDataDecls, PatternGuards #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE EmptyDataDecls #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeOperators #-} module Reflex.Dynamic.TH (qDyn, unqDyn, mkDyn) where import Reflex.Dynamic@@ -56,12 +62,22 @@ Hs.ParseFailed (Hs.SrcLoc _ l c) err -> fail $ "mkDyn:" <> show l <> ":" <> show c <> ": " <> err Hs.ParseOk e -> qDyn $ return $ everywhere (id `extT` reinstateUnqDyn) $ Hs.toExp $ everywhere (id `extT` antiE) e where TH.Name (TH.OccName occName) (TH.NameG _ _ (TH.ModName modName)) = 'unqMarker+#if MIN_VERSION_haskell_src_exts(1,18,0)+ antiE :: Hs.Exp Hs.SrcSpanInfo -> Hs.Exp Hs.SrcSpanInfo antiE x = case x of+ Hs.SpliceExp l se ->+ Hs.App l (Hs.Var l $ Hs.Qual l (Hs.ModuleName l modName) (Hs.Ident l occName)) $ case se of+ Hs.IdSplice l2 v -> Hs.Var l2 $ Hs.UnQual l2 $ Hs.Ident l2 v+ Hs.ParenSplice _ ps -> ps+ _ -> x+#else+ antiE x = case x of Hs.SpliceExp se -> Hs.App (Hs.Var $ Hs.Qual (Hs.ModuleName modName) (Hs.Ident occName)) $ case se of Hs.IdSplice v -> Hs.Var $ Hs.UnQual $ Hs.Ident v Hs.ParenSplice ps -> ps _ -> x+#endif reinstateUnqDyn (TH.Name (TH.OccName occName') (TH.NameQ (TH.ModName modName'))) | modName == modName' && occName == occName' = 'unqMarker reinstateUnqDyn x = x