on develop help sign in
Eliminate most of the unsafeCoerces
commit99146eeb70e5472367c39b53a6003e57b05a348d authorRyan Trinkle <ryan.trinkle@gmail.com> dateThu 4 Aug 2016, 20:15 (10 years ago) parent9cf221a
1 file changed+8−12
src/Reflex/Spider/Internal.hs+8−12
src/Reflex/Spider/Internal.hs+8−12
@@ -2025,19 +2025,19 @@ instance R.Reflex (SpiderEnv x) where
20252025 {-# INLINABLE pull #-}
20262026 pull = SpiderBehavior . pull . coerce
20272027 {-# INLINABLE merge #-}
2028− merge = SpiderEvent . merge . DynamicConst . (unsafeCoerce :: DMap k (R.Event (SpiderEnv x)) -> DMap k (Event x))
2028+ merge = SpiderEvent . merge . DynamicConst . (coerce :: DMap k (R.Event (SpiderEnv x)) -> DMap k (Event x))
20292029 {-# INLINABLE fan #-}
20302030 fan e = R.EventSelector $ SpiderEvent . select (fan (unSpiderEvent e))
20312031 {-# INLINABLE switch #-}
20322032 switch = SpiderEvent . switch . (unsafeCoerce :: Behavior x (R.Event (SpiderEnv x) a) -> Behavior x (Event x a)) . unSpiderBehavior
20332033 {-# INLINABLE coincidence #-}
2034− coincidence = SpiderEvent . coincidence . (unsafeCoerce :: Event x (R.Event (SpiderEnv x) a) -> Event x (Event x a)) . unSpiderEvent
2034+ coincidence = SpiderEvent . coincidence . (coerce :: Event x (R.Event (SpiderEnv x) a) -> Event x (Event x a)) . unSpiderEvent
20352035 {-# INLINABLE current #-}
20362036 current = SpiderBehavior . current . unSpiderDynamic
20372037 {-# INLINABLE updated #-}
20382038 updated = SpiderEvent . fmap runIdentity . updated . unSpiderDynamic
20392039 {-# INLINABLE unsafeBuildDynamic #-}
2040− unsafeBuildDynamic readV0 v' = SpiderDynamic $ DynamicDynIdentity $ unsafeDyn (coerce readV0) $ addIdentity $ unSpiderEvent v'
2040+ unsafeBuildDynamic readV0 v' = SpiderDynamic $ DynamicDynIdentity $ unsafeDyn (coerce readV0) $ coerce $ unSpiderEvent v'
20412041 {-# INLINABLE unsafeBuildIncremental #-}
20422042 unsafeBuildIncremental readV0 dv = SpiderIncremental $ DynamicDyn $ unsafeDyn (coerce readV0) $ unSpiderEvent dv
20432043 {-# INLINABLE mergeIncremental #-}
@@ -2064,10 +2064,10 @@ instance R.MonadHold (SpiderEnv x) (EventM x) where
20642064 holdIncremental = holdIncrementalSpiderEventM
20652065
20662066holdSpiderEventM :: a -> R.Event (SpiderEnv x) a -> EventM x (R.Behavior (SpiderEnv x) a)
2067−holdSpiderEventM v0 e = fmap (SpiderBehavior . BehaviorHoldIdentity) $ hold v0 $ addIdentity $ unSpiderEvent e
2067+holdSpiderEventM v0 e = fmap (SpiderBehavior . BehaviorHoldIdentity) $ hold v0 $ coerce $ unSpiderEvent e
20682068
20692069holdDynSpiderEventM :: a -> R.Event (SpiderEnv x) a -> EventM x (R.Dynamic (SpiderEnv x) a)
2070−holdDynSpiderEventM v0 e = fmap (SpiderDynamic . DynamicHoldIdentity) $ hold v0 $ addIdentity $ unSpiderEvent e
2070+holdDynSpiderEventM v0 e = fmap (SpiderDynamic . DynamicHoldIdentity) $ hold v0 $ coerce $ unSpiderEvent e
20712071
20722072holdIncrementalSpiderEventM :: R.Patch p => a -> R.Event (SpiderEnv x) (p a) -> EventM x (R.Incremental (SpiderEnv x) p a)
20732073holdIncrementalSpiderEventM v0 e = fmap (SpiderIncremental . DynamicHold) $ hold v0 $ unSpiderEvent e
@@ -2096,7 +2096,7 @@ instance R.MonadHold (SpiderEnv x) (SpiderPushM x) where
20962096 {-# INLINABLE hold #-}
20972097 hold v0 e = R.current <$> R.holdDyn v0 e
20982098 {-# INLINABLE holdDyn #-}
2099− holdDyn v0 (SpiderEvent e) = SpiderPushM $ fmap (SpiderDynamic . DynamicHoldIdentity) $ hold v0 $ addIdentity e
2099+ holdDyn v0 (SpiderEvent e) = SpiderPushM $ fmap (SpiderDynamic . DynamicHoldIdentity) $ hold v0 $ coerce e
21002100 {-# INLINABLE holdIncremental #-}
21012101 holdIncremental v0 (SpiderEvent e) = SpiderPushM $ SpiderIncremental . DynamicHold <$> hold v0 e
21022102
@@ -2182,15 +2182,11 @@ instance Monad (SpiderHostFrame x) where
21822182instance R.MonadSample (SpiderEnv x) (SpiderHostFrame x) where
21832183 sample = SpiderHostFrame . readBehaviorUntracked . unSpiderBehavior --TODO: This can cause problems with laziness, so we should get rid of it if we can
21842184
2185−addIdentity :: Event x a -> Event x (Identity a)
2186−--addIdentity = fmap Identity
2187−addIdentity = unsafeCoerce
2188−
21892185instance R.MonadHold (SpiderEnv x) (SpiderHostFrame x) where
21902186 {-# INLINABLE hold #-}
2191− hold v0 e = SpiderHostFrame $ fmap (SpiderBehavior . BehaviorHoldIdentity) $ hold v0 $ addIdentity $ unSpiderEvent e
2187+ hold v0 e = SpiderHostFrame $ fmap (SpiderBehavior . BehaviorHoldIdentity) $ hold v0 $ coerce $ unSpiderEvent e
21922188 {-# INLINABLE holdDyn #-}
2193− holdDyn v0 e = SpiderHostFrame $ fmap (SpiderDynamic . DynamicHoldIdentity) $ hold v0 $ addIdentity $ unSpiderEvent e
2189+ holdDyn v0 e = SpiderHostFrame $ fmap (SpiderDynamic . DynamicHoldIdentity) $ hold v0 $ coerce $ unSpiderEvent e
21942190 {-# INLINABLE holdIncremental #-}
21952191 holdIncremental v0 e = SpiderHostFrame $ fmap (SpiderIncremental . DynamicHold) $ hold v0 $ unSpiderEvent e
21962192