@@ -74,8 +74,7 @@ import Data.Tree (Forest, Tree (..), drawForest)
7474import Data.FastWeakBag (FastWeakBag)
7575import qualified Data.FastWeakBag as FastWeakBag
7676import Data.Reflection
77−import Data.Some (Some)
78−import qualified Data.Some as Some
77+import Data.Some (Some(Some))
7978import Data.Type.Coercion
8079import Data.WeakBag (WeakBag, WeakBagTicket, _weakBag_children)
8180import qualified Data.WeakBag as WeakBag
@@ -582,7 +581,7 @@ eventSubscribedFan !subscribed = EventSubscribed
582581 { eventSubscribedHeightRef = eventSubscribedHeightRef $ _eventSubscription_subscribed $ fanSubscribedParent subscribed
583582 , eventSubscribedRetained = toAny subscribed
584583#ifdef DEBUG_CYCLES
585− , eventSubscribedGetParents = return [Some.This $ _eventSubscription_subscribed $ fanSubscribedParent subscribed]
584+ , eventSubscribedGetParents = return [Some $ _eventSubscription_subscribed $ fanSubscribedParent subscribed]
586585 , eventSubscribedHasOwnHeightRef = False
587586 , eventSubscribedWhoCreated = whoCreatedIORef $ fanSubscribedCachedSubscribed subscribed
588587#endif
@@ -595,7 +594,7 @@ eventSubscribedSwitch !subscribed = EventSubscribed
595594#ifdef DEBUG_CYCLES
596595 , eventSubscribedGetParents = do
597596 s <- readIORef $ switchSubscribedCurrentParent subscribed
598− return [Some.This $ _eventSubscription_subscribed s]
597+ return [Some $ _eventSubscription_subscribed s]
599598 , eventSubscribedHasOwnHeightRef = True
600599 , eventSubscribedWhoCreated = whoCreatedIORef $ switchSubscribedCachedSubscribed subscribed
601600#endif
@@ -608,8 +607,8 @@ eventSubscribedCoincidence !subscribed = EventSubscribed
608607#ifdef DEBUG_CYCLES
609608 , eventSubscribedGetParents = do
610609 innerSubscription <- readIORef $ coincidenceSubscribedInnerParent subscribed
611− let outerParent = Some.This $ _eventSubscription_subscribed $ coincidenceSubscribedOuterParent subscribed
612− innerParents = maybeToList $ fmap Some.This innerSubscription
610+ let outerParent = Some $ _eventSubscription_subscribed $ coincidenceSubscribedOuterParent subscribed
611+ innerParents = maybeToList $ fmap Some innerSubscription
613612 return $ outerParent : innerParents
614613 , eventSubscribedHasOwnHeightRef = True
615614 , eventSubscribedWhoCreated = whoCreatedIORef $ coincidenceSubscribedCachedSubscribed subscribed
@@ -625,13 +624,13 @@ whoCreatedEventSubscribed = eventSubscribedWhoCreated
625624
626625walkInvalidHeightParents :: EventSubscribed x -> IO [Some (EventSubscribed x)]
627626walkInvalidHeightParents s0 = do
628− subscribers <- flip execStateT mempty $ ($ Some.This s0) $ fix $ \loop (Some.This s) -> do
627+ subscribers <- flip execStateT mempty $ ($ Some s0) $ fix $ \loop (Some s) -> do
629628 h <- liftIO $ readIORef $ eventSubscribedHeightRef s
630629 when (h == invalidHeight) $ do
631630 when (eventSubscribedHasOwnHeightRef s) $ liftIO $ writeIORef (eventSubscribedHeightRef s) $! invalidHeightBeingTraversed
632− modify (Some.This s :)
631+ modify (Some s :)
633632 mapM_ loop =<< liftIO (eventSubscribedGetParents s)
634− forM_ subscribers $ \(Some.This s) -> writeIORef (eventSubscribedHeightRef s) $! invalidHeight
633+ forM_ subscribers $ \(Some s) -> writeIORef (eventSubscribedHeightRef s) $! invalidHeight
635634 return subscribers
636635#endif
637636
@@ -659,7 +658,7 @@ behaviorPull !p = Behavior $ do
659658 val <- liftIO $ readIORef $ pullValue p
660659 case val of
661660 Just subscribed -> do
662− askParentsRef >>= mapM_ (\r -> liftIO $ modifyIORef' r (SomeBehaviorSubscribed (BehaviorSubscribedPull subscribed) :))
661+ askParentsRef >>= mapM_ (\r -> liftIO $ modifyIORef' r (SomeBehaviorSubscribed (Some (BehaviorSubscribedPull subscribed)) :))
663662 askInvalidator >>= mapM_ (\wi -> liftIO $ modifyIORef' (pullSubscribedInvalidators subscribed) (wi:))
664663 liftIO $ touch $ pullSubscribedOwnInvalidator subscribed
665664 return $ pullSubscribedValue subscribed
@@ -678,7 +677,7 @@ behaviorPull !p = Behavior $ do
678677 , pullSubscribedParents = parents
679678 }
680679 liftIO $ writeIORef (pullValue p) $ Just subscribed
681− askParentsRef >>= mapM_ (\r -> liftIO $ modifyIORef' r (SomeBehaviorSubscribed (BehaviorSubscribedPull subscribed) :))
680+ askParentsRef >>= mapM_ (\r -> liftIO $ modifyIORef' r (SomeBehaviorSubscribed (Some (BehaviorSubscribedPull subscribed)) :))
682681 return a
683682
684683behaviorDyn :: Patch p => Dyn x p -> Behavior x (PatchTarget p)
@@ -689,7 +688,7 @@ readHoldTracked :: Hold x p -> BehaviorM x (PatchTarget p)
689688readHoldTracked h = do
690689 result <- liftIO $ readIORef $ holdValue h
691690 askInvalidator >>= mapM_ (\wi -> liftIO $ modifyIORef' (holdInvalidators h) (wi:))
692− askParentsRef >>= mapM_ (\r -> liftIO $ modifyIORef' r (SomeBehaviorSubscribed (BehaviorSubscribedHold h) :))
691+ askParentsRef >>= mapM_ (\r -> liftIO $ modifyIORef' r (SomeBehaviorSubscribed (Some (BehaviorSubscribedHold h)) :))
693692 liftIO $ touch h -- Otherwise, if this gets inlined enough, the hold's parent reference may get collected
694693 return result
695694
@@ -782,9 +781,9 @@ data EventEnv x
782781 , eventEnvDynInits :: !(IORef [SomeDynInit x])
783782 , eventEnvMergeUpdates :: !(IORef [SomeMergeUpdate x])
784783 , eventEnvMergeInits :: !(IORef [SomeMergeInit x]) -- Needed for Subscribe
785− , eventEnvClears :: !(IORef [SomeClear]) -- Needed for Subscribe
786− , eventEnvIntClears :: !(IORef [SomeIntClear])
787− , eventEnvRootClears :: !(IORef [SomeRootClear])
784+ , eventEnvClears :: !(IORef [Some Clear]) -- Needed for Subscribe
785+ , eventEnvIntClears :: !(IORef [Some IntClear])
786+ , eventEnvRootClears :: !(IORef [Some RootClear])
788787 , eventEnvCurrentHeight :: !(IORef Height) -- Needed for Subscribe
789788 , eventEnvResetCoincidences :: !(IORef [SomeResetCoincidence x]) -- Needed for Subscribe
790789 , eventEnvDelayedMerges :: !(IORef (IntMap [EventM x ()]))
@@ -856,29 +855,29 @@ putCurrentHeight h = do
856855 heightRef <- asksEventEnv eventEnvCurrentHeight
857856 liftIO $ writeIORef heightRef $! h
858857
859−instance HasSpiderTimeline x => Defer SomeClear (EventM x) where
858+instance HasSpiderTimeline x => Defer (Some Clear) (EventM x) where
860859 {-# INLINE getDeferralQueue #-}
861860 getDeferralQueue = asksEventEnv eventEnvClears
862861
863862{-# INLINE scheduleClear #-}
864−scheduleClear :: Defer SomeClear m => IORef (Maybe a) -> m ()
865−scheduleClear r = defer $ SomeClear r
863+scheduleClear :: Defer (Some Clear) m => IORef (Maybe a) -> m ()
864+scheduleClear r = defer $ Some $ Clear r
866865
867−instance HasSpiderTimeline x => Defer SomeIntClear (EventM x) where
866+instance HasSpiderTimeline x => Defer (Some IntClear) (EventM x) where
868867 {-# INLINE getDeferralQueue #-}
869868 getDeferralQueue = asksEventEnv eventEnvIntClears
870869
871870{-# INLINE scheduleIntClear #-}
872−scheduleIntClear :: Defer SomeIntClear m => IORef (IntMap a) -> m ()
873−scheduleIntClear r = defer $ SomeIntClear r
871+scheduleIntClear :: Defer (Some IntClear) m => IORef (IntMap a) -> m ()
872+scheduleIntClear r = defer $ Some $ IntClear r
874873
875−instance HasSpiderTimeline x => Defer SomeRootClear (EventM x) where
874+instance HasSpiderTimeline x => Defer (Some RootClear) (EventM x) where
876875 {-# INLINE getDeferralQueue #-}
877876 getDeferralQueue = asksEventEnv eventEnvRootClears
878877
879878{-# INLINE scheduleRootClear #-}
880−scheduleRootClear :: Defer SomeRootClear m => IORef (DMap k Identity) -> m ()
881−scheduleRootClear r = defer $ SomeRootClear r
879+scheduleRootClear :: Defer (Some RootClear) m => IORef (DMap k Identity) -> m ()
880+scheduleRootClear r = defer $ Some $ RootClear r
882881
883882instance HasSpiderTimeline x => Defer (SomeResetCoincidence x) (EventM x) where
884883 {-# INLINE getDeferralQueue #-}
@@ -951,7 +950,7 @@ data BehaviorSubscribed x a
951950 = forall p. BehaviorSubscribedHold (Hold x p)
952951 | BehaviorSubscribedPull (PullSubscribed x a)
953952
954−data SomeBehaviorSubscribed x = forall a. SomeBehaviorSubscribed (BehaviorSubscribed x a)
953+newtype SomeBehaviorSubscribed x = SomeBehaviorSubscribed (Some (BehaviorSubscribed x))
955954
956955--type role PullSubscribed representational
957956data PullSubscribed x a
@@ -1259,11 +1258,11 @@ scheduleMerge' initialHeight heightRef a = scheduleMerge initialHeight $ do
12591258 GT -> scheduleMerge' height heightRef a -- The height has been increased (by a coincidence event; TODO: is this the only way?)
12601259 EQ -> a
12611260
1262−data SomeClear = forall a. SomeClear {-# UNPACK #-} !(IORef (Maybe a))
1261+newtype Clear a = Clear (IORef (Maybe a))
12631262
1264−data SomeIntClear = forall a. SomeIntClear {-# UNPACK #-} !(IORef (IntMap a))
1263+newtype IntClear a = IntClear (IORef (IntMap a))
12651264
1266−data SomeRootClear = forall k. SomeRootClear {-# UNPACK #-} !(IORef (DMap k Identity))
1265+newtype RootClear k = RootClear (IORef (DMap k Identity))
12671266
12681267data SomeAssignment x = forall a. SomeAssignment {-# UNPACK #-} !(IORef a) {-# UNPACK #-} !(IORef [Weak (Invalidator x)]) a
12691268
@@ -1853,7 +1852,7 @@ mergeSubscriber m getKey = Subscriber
18531852 else liftIO $ do
18541853#ifdef DEBUG_CYCLES
18551854 nodesInvolvedInCycle <- walkInvalidHeightParents $ eventSubscribedMerge subscribed
1856− stacks <- forM nodesInvolvedInCycle $ \(Some.This es) -> whoCreatedEventSubscribed es
1855+ stacks <- forM nodesInvolvedInCycle $ \(Some es) -> whoCreatedEventSubscribed es
18571856 let cycleInfo = ":\n" <> drawForest (listsToForest stacks)
18581857#else
18591858 let cycleInfo = ""
@@ -2096,11 +2095,11 @@ runFrame a = SpiderHost $ do
20962095 return result
20972096 result <- runEventM go
20982097 toClear <- readIORef $ eventEnvClears env
2099− forM_ toClear $ \(SomeClear ref) -> {-# SCC "clear" #-} writeIORef ref Nothing
2098+ forM_ toClear $ \(Some (Clear ref)) -> {-# SCC "clear" #-} writeIORef ref Nothing
21002099 toClearInt <- readIORef $ eventEnvIntClears env
2101− forM_ toClearInt $ \(SomeIntClear ref) -> {-# SCC "intClear" #-} writeIORef ref $! IntMap.empty
2100+ forM_ toClearInt $ \(Some (IntClear ref)) -> {-# SCC "intClear" #-} writeIORef ref $! IntMap.empty
21022101 toClearRoot <- readIORef $ eventEnvRootClears env
2103− forM_ toClearRoot $ \(SomeRootClear ref) -> {-# SCC "rootClear" #-} writeIORef ref $! DMap.empty
2102+ forM_ toClearRoot $ \(Some (RootClear ref)) -> {-# SCC "rootClear" #-} writeIORef ref $! DMap.empty
21042103 toAssign <- readIORef $ eventEnvAssignments env
21052104 toReconnectRef <- newIORef []
21062105 coincidenceInfos <- readIORef $ eventEnvResetCoincidences env
@@ -2460,7 +2459,7 @@ unsafeNewSpiderTimelineEnv = do
24602459
24612460-- | Create a new SpiderTimelineEnv
24622461newSpiderTimeline :: IO (Some SpiderTimelineEnv)
2463−newSpiderTimeline = withSpiderTimeline (pure . Some.This)
2462+newSpiderTimeline = withSpiderTimeline (pure . Some)
24642463
24652464data LocalSpiderTimeline x s
24662465