@@ -31,6 +31,7 @@ import Reflex.TriggerEvent.Base hiding (askEvents)
3131import Reflex.TriggerEvent.Class
3232
3333import Control.Concurrent.Chan
34+import Control.Exception (evaluate)
3435import Control.Lens hiding (element, ix)
3536import Control.Monad.Exception
3637import Control.Monad.Primitive
@@ -224,6 +225,9 @@ wrap e cfg = do
224225 liftIO $ forM_ mv $ \v -> writeChan events [TriggerRef triggerRef :=> TriggerInvocation v (return ())]
225226 return $ en :=> EventFilterTriggerRef triggerRef
226227 es <- do
228+ let h :: forall en. (EventName en, GhcjsDomEvent en) -> JSM (Maybe (er en))
229+ h = _ghcjsEventSpec_handler $ _rawElementConfig_eventSpec cfg -- Note: this needs to be done strictly and outside of the newFanEventWithTrigger, so that the newFanEventWithTrigger doesn't retain the entire cfg, which can cause a cyclic dependency that the GC won't be able to clean up
230+ _ <- liftIO $ evaluate h
227231 ctx <- askJSM
228232 newFanEventWithTrigger $ \(WrapArg en) t ->
229233 case DMap.lookup en eventTriggerRefs of
@@ -233,7 +237,6 @@ wrap e cfg = do
233237 writeIORef r Nothing
234238 Nothing -> (`runJSM` ctx) <$> (`runJSM` ctx) (elementOnEventName en e $ do
235239 evt <- DOM.event
236− let h = _ghcjsEventSpec_handler $ _rawElementConfig_eventSpec cfg
237240 mv <- lift $ h (en, GhcjsDomEvent evt)
238241 case mv of
239242 Nothing -> return ()