{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE ImplicitParams #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UnicodeSyntax #-}
module Observe.Event
(
SubSelector
, NoEventsSelector
, selectorRendering
, SelectorRendering (..)
, noSubEventsSelectorRendering
, Selectors (..)
, withEvent
, instantEvent
, Event
, eventReference
, withRelatedEvent
, allocateRelatedEvent
, instantRelatedEvent
, HasEvents
, HasEvent
, HasEventIn
, HasSubEvents
, SubEventBackend (..)
, allocateEventArgs
, instantEventArgs
, addEventField
, finalizeEvent
)
where
import Control.Applicative
import Control.Exception
import Control.Monad.With
import Data.Coerce
import Data.Exceptable
import Data.Functor.Parametric
import Data.GeneralAllocate
import Data.Kind
import Observe.Event.Backend
withEvent
∷ (HasEvents m backend selector, MonadWithExceptable m)
⇒ selector field
→ ((HasSubEvents m backend field) ⇒ m a)
→ m a
withEvent :: forall (m :: * -> *) backend (selector :: * -> *) field a.
(HasEvents m backend selector, MonadWithExceptable m) =>
selector field -> (HasSubEvents m backend field => m a) -> m a
withEvent selector field
selector = selector field
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> ((((?e11yEvent::BackendEvent backend field,
Event (BackendEvent backend)),
EventIn m (BackendEvent backend)),
?e11yBackend::SubEventBackend backend field) =>
m a)
-> m a
forall (m :: * -> *) backend (selector :: * -> *) field a.
(HasEvents m backend selector, MonadWithExceptable m) =>
selector field
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> (HasSubEvents m backend field => m a)
-> m a
withRelatedEvent selector field
selector Maybe (EventReference (BackendEvent backend))
forall a. Maybe a
Nothing []
instantEvent
∷ (HasEvents m backend selector)
⇒ selector field
→ [field]
→ m (EventReference (BackendEvent backend))
instantEvent :: forall (m :: * -> *) backend (selector :: * -> *) field.
HasEvents m backend selector =>
selector field
-> [field] -> m (EventReference (BackendEvent backend))
instantEvent selector field
selector [field]
fields = selector field
-> [field]
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> m (EventReference (BackendEvent backend))
forall (m :: * -> *) backend (selector :: * -> *) field.
HasEvents m backend selector =>
selector field
-> [field]
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> m (EventReference (BackendEvent backend))
instantRelatedEvent selector field
selector [field]
fields Maybe (EventReference (BackendEvent backend))
forall a. Maybe a
Nothing []
instantRelatedEvent
∷ (HasEvents m backend selector)
⇒ selector field
→ [field]
→ Maybe (EventReference (BackendEvent backend))
→ [EventReference (BackendEvent backend)]
→ m (EventReference (BackendEvent backend))
instantRelatedEvent :: forall (m :: * -> *) backend (selector :: * -> *) field.
HasEvents m backend selector =>
selector field
-> [field]
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> m (EventReference (BackendEvent backend))
instantRelatedEvent selector field
selector [field]
initialFields Maybe (EventReference (BackendEvent backend))
parent [EventReference (BackendEvent backend)]
causes =
EventParams selector field (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
forall (m :: * -> *) backend (selector :: * -> *) field.
HasEvents m backend selector =>
EventParams selector field (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
instantEventArgs (EventParams selector field (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend)))
-> EventParams
selector field (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
forall a b. (a -> b) -> a -> b
$
EventParams
{ selectors :: Selectors selector field
selectors = selector field -> Selectors selector field
forall (selector :: * -> *) field.
selector field -> Selectors selector field
Leaf selector field
selector
, Maybe (EventReference (BackendEvent backend))
parent :: Maybe (EventReference (BackendEvent backend))
parent :: Maybe (EventReference (BackendEvent backend))
parent
, [EventReference (BackendEvent backend)]
causes :: [EventReference (BackendEvent backend)]
causes :: [EventReference (BackendEvent backend)]
causes
, [field]
initialFields :: [field]
initialFields :: [field]
initialFields
}
instantEventArgs
∷ (HasEvents m backend selector)
⇒ EventParams selector field (EventReference (BackendEvent backend))
→ m (EventReference (BackendEvent backend))
instantEventArgs :: forall (m :: * -> *) backend (selector :: * -> *) field.
HasEvents m backend selector =>
EventParams selector field (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
instantEventArgs = backend
-> EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
forall field.
backend
-> EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
forall (m :: * -> *) backend field.
EventBackendIn m backend =>
backend
-> EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
newInstantEvent backend
?e11yBackend::backend
?e11yBackend
withRelatedEvent
∷ (HasEvents m backend selector, MonadWithExceptable m)
⇒ selector field
→ Maybe (EventReference (BackendEvent backend))
→ [EventReference (BackendEvent backend)]
→ ((HasSubEvents m backend field) ⇒ m a)
→ m a
withRelatedEvent :: forall (m :: * -> *) backend (selector :: * -> *) field a.
(HasEvents m backend selector, MonadWithExceptable m) =>
selector field
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> (HasSubEvents m backend field => m a)
-> m a
withRelatedEvent selector field
selector Maybe (EventReference (BackendEvent backend))
parent [EventReference (BackendEvent backend)]
causes HasSubEvents m backend field => m a
go = With m a (BackendEvent backend field)
-> (BackendEvent backend field -> m a) -> m a
forall (m :: * -> *) b a.
MonadWith m =>
With m b a -> (a -> m b) -> m b
generalWith (selector field
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> With m a (BackendEvent backend field)
forall (m :: * -> *) backend (selector :: * -> *) e field
releaseArg.
(HasEvents m backend selector, Exceptable e) =>
selector field
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> GeneralAllocate m e () releaseArg (BackendEvent backend field)
allocateRelatedEvent selector field
selector Maybe (EventReference (BackendEvent backend))
parent [EventReference (BackendEvent backend)]
causes) ((BackendEvent backend field -> m a) -> m a)
-> (BackendEvent backend field -> m a) -> m a
forall a b. (a -> b) -> a -> b
$
\BackendEvent backend field
ev →
let
?e11yEvent = ?e11yEvent::BackendEvent backend field
BackendEvent backend field
ev
?e11yBackend = RootSelector backend field
-> backend
-> EventReference (BackendEvent backend)
-> SubEventBackend backend field
forall backend field.
RootSelector backend field
-> backend
-> EventReference (BackendEvent backend)
-> SubEventBackend backend field
SubEventBackend selector field
RootSelector backend field
selector backend
?e11yBackend::backend
?e11yBackend (EventReference (BackendEvent backend)
-> SubEventBackend backend field)
-> EventReference (BackendEvent backend)
-> SubEventBackend backend field
forall a b. (a -> b) -> a -> b
$ BackendEvent backend field -> EventReference (BackendEvent backend)
forall field.
BackendEvent backend field -> EventReference (BackendEvent backend)
forall (event :: * -> *) field.
Event event =>
event field -> EventReference event
reference BackendEvent backend field
ev
in
m a
HasSubEvents m backend field => m a
go
allocateRelatedEvent
∷ (HasEvents m backend selector, Exceptable e)
⇒ selector field
→ Maybe (EventReference (BackendEvent backend))
→ [EventReference (BackendEvent backend)]
→ GeneralAllocate m e () releaseArg (BackendEvent backend field)
allocateRelatedEvent :: forall (m :: * -> *) backend (selector :: * -> *) e field
releaseArg.
(HasEvents m backend selector, Exceptable e) =>
selector field
-> Maybe (EventReference (BackendEvent backend))
-> [EventReference (BackendEvent backend)]
-> GeneralAllocate m e () releaseArg (BackendEvent backend field)
allocateRelatedEvent selector field
selector Maybe (EventReference (BackendEvent backend))
parent [EventReference (BackendEvent backend)]
causes =
EventParams selector field (EventReference (BackendEvent backend))
-> GeneralAllocate m e () releaseArg (BackendEvent backend field)
forall (m :: * -> *) backend (selector :: * -> *) e field
releaseArg.
(HasEvents m backend selector, Exceptable e) =>
EventParams selector field (EventReference (BackendEvent backend))
-> GeneralAllocate m e () releaseArg (BackendEvent backend field)
allocateEventArgs (EventParams selector field (EventReference (BackendEvent backend))
-> GeneralAllocate m e () releaseArg (BackendEvent backend field))
-> EventParams
selector field (EventReference (BackendEvent backend))
-> GeneralAllocate m e () releaseArg (BackendEvent backend field)
forall a b. (a -> b) -> a -> b
$
EventParams
{ selectors :: Selectors selector field
selectors = selector field -> Selectors selector field
forall (selector :: * -> *) field.
selector field -> Selectors selector field
Leaf selector field
selector
, [EventReference (BackendEvent backend)]
causes :: [EventReference (BackendEvent backend)]
causes :: [EventReference (BackendEvent backend)]
causes
, Maybe (EventReference (BackendEvent backend))
parent :: Maybe (EventReference (BackendEvent backend))
parent :: Maybe (EventReference (BackendEvent backend))
parent
, initialFields :: [field]
initialFields = []
}
eventReference ∷ (HasEvent event field) ⇒ EventReference event
eventReference :: forall (event :: * -> *) field.
HasEvent event field =>
EventReference event
eventReference = event field -> EventReference event
forall field. event field -> EventReference event
forall (event :: * -> *) field.
Event event =>
event field -> EventReference event
reference event field
?e11yEvent::event field
?e11yEvent
allocateEventArgs
∷ (HasEvents m backend selector, Exceptable e)
⇒ EventParams selector field (EventReference (BackendEvent backend))
→ GeneralAllocate m e () releaseArg (BackendEvent backend field)
allocateEventArgs :: forall (m :: * -> *) backend (selector :: * -> *) e field
releaseArg.
(HasEvents m backend selector, Exceptable e) =>
EventParams selector field (EventReference (BackendEvent backend))
-> GeneralAllocate m e () releaseArg (BackendEvent backend field)
allocateEventArgs EventParams selector field (EventReference (BackendEvent backend))
params = ((forall x. m x -> m x)
-> m (GeneralAllocated
m e () releaseArg (BackendEvent backend field)))
-> GeneralAllocate m e () releaseArg (BackendEvent backend field)
forall (m :: * -> *) e releaseReturn releaseArg a.
((forall x. m x -> m x)
-> m (GeneralAllocated m e releaseReturn releaseArg a))
-> GeneralAllocate m e releaseReturn releaseArg a
GeneralAllocate (((forall x. m x -> m x)
-> m (GeneralAllocated
m e () releaseArg (BackendEvent backend field)))
-> GeneralAllocate m e () releaseArg (BackendEvent backend field))
-> ((forall x. m x -> m x)
-> m (GeneralAllocated
m e () releaseArg (BackendEvent backend field)))
-> GeneralAllocate m e () releaseArg (BackendEvent backend field)
forall a b. (a -> b) -> a -> b
$ \forall x. m x -> m x
unmask → do
BackendEvent backend field
ev ← m (BackendEvent backend field) -> m (BackendEvent backend field)
forall x. m x -> m x
unmask (m (BackendEvent backend field) -> m (BackendEvent backend field))
-> m (BackendEvent backend field) -> m (BackendEvent backend field)
forall a b. (a -> b) -> a -> b
$ backend
-> EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
-> m (BackendEvent backend field)
forall field.
backend
-> EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
-> m (BackendEvent backend field)
forall (m :: * -> *) backend field.
EventBackendIn m backend =>
backend
-> EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
-> m (BackendEvent backend field)
newEvent backend
?e11yBackend::backend
?e11yBackend EventParams selector field (EventReference (BackendEvent backend))
EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
params
let release :: GeneralReleaseType e releaseArg -> m ()
release (ReleaseFailure e
e) = BackendEvent backend field -> Maybe SomeException -> m ()
forall field.
BackendEvent backend field -> Maybe SomeException -> m ()
forall (m :: * -> *) (event :: * -> *) field.
EventIn m event =>
event field -> Maybe SomeException -> m ()
finalize BackendEvent backend field
ev (Maybe SomeException -> m ())
-> (SomeException -> Maybe SomeException) -> SomeException -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SomeException -> Maybe SomeException
forall a. a -> Maybe a
Just (SomeException -> m ()) -> SomeException -> m ()
forall a b. (a -> b) -> a -> b
$ e -> SomeException
forall e. Exceptable e => e -> SomeException
toSomeException e
e
release (ReleaseSuccess releaseArg
_) = BackendEvent backend field -> Maybe SomeException -> m ()
forall field.
BackendEvent backend field -> Maybe SomeException -> m ()
forall (m :: * -> *) (event :: * -> *) field.
EventIn m event =>
event field -> Maybe SomeException -> m ()
finalize BackendEvent backend field
ev Maybe SomeException
forall a. Maybe a
Nothing
GeneralAllocated m e () releaseArg (BackendEvent backend field)
-> m (GeneralAllocated
m e () releaseArg (BackendEvent backend field))
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GeneralAllocated m e () releaseArg (BackendEvent backend field)
-> m (GeneralAllocated
m e () releaseArg (BackendEvent backend field)))
-> GeneralAllocated m e () releaseArg (BackendEvent backend field)
-> m (GeneralAllocated
m e () releaseArg (BackendEvent backend field))
forall a b. (a -> b) -> a -> b
$ BackendEvent backend field
-> (GeneralReleaseType e releaseArg -> m ())
-> GeneralAllocated m e () releaseArg (BackendEvent backend field)
forall (m :: * -> *) e releaseReturn releaseArg a.
a
-> (GeneralReleaseType e releaseArg -> m releaseReturn)
-> GeneralAllocated m e releaseReturn releaseArg a
GeneralAllocated BackendEvent backend field
ev GeneralReleaseType e releaseArg -> m ()
release
finalizeEvent
∷ (HasEventIn m event field)
⇒ Maybe SomeException
→ m ()
finalizeEvent :: forall (m :: * -> *) (event :: * -> *) field.
HasEventIn m event field =>
Maybe SomeException -> m ()
finalizeEvent = event field -> Maybe SomeException -> m ()
forall field. event field -> Maybe SomeException -> m ()
forall (m :: * -> *) (event :: * -> *) field.
EventIn m event =>
event field -> Maybe SomeException -> m ()
finalize event field
?e11yEvent::event field
?e11yEvent
type HasEvents m backend selector = (?e11yBackend ∷ backend, EventBackendIn m backend, selector ~ RootSelector backend)
type HasEvent event field = (?e11yEvent ∷ event field, Event event)
type HasEventIn m event field = (HasEvent event field, EventIn m event)
type HasSubEvents m backend field = (HasEventIn m (BackendEvent backend) field, ?e11yBackend ∷ SubEventBackend backend field)
type NoEventsSelector ∷ Type → Type
data NoEventsSelector f
selectorRendering
∷ (∀ field. selector field → SelectorRendering t field)
→ ∀ field
. Selectors selector field
→ t field
selectorRendering :: forall (selector :: * -> *) (t :: * -> *).
(forall field. selector field -> SelectorRendering t field)
-> forall field. Selectors selector field -> t field
selectorRendering forall field. selector field -> SelectorRendering t field
getRendering (Leaf selector field
s) = (selector field -> SelectorRendering t field
forall field. selector field -> SelectorRendering t field
getRendering selector field
s).renderTopSelector
selectorRendering forall field. selector field -> SelectorRendering t field
getRendering (selector field1
s :/ Selectors (SubSelector field1) field
tl) = SelectorRendering t field1
-> forall field'. Selectors (SubSelector field1) field' -> t field'
forall (t :: * -> *) field.
SelectorRendering t field
-> forall field'. Selectors (SubSelector field) field' -> t field'
renderSubSelector (selector field1 -> SelectorRendering t field1
forall field. selector field -> SelectorRendering t field
getRendering selector field1
s) Selectors (SubSelector field1) field
tl
noSubEventsSelectorRendering ∷ (SubSelector field ~ NoEventsSelector) ⇒ t field → SelectorRendering t field
noSubEventsSelectorRendering :: forall field (t :: * -> *).
(SubSelector field ~ NoEventsSelector) =>
t field -> SelectorRendering t field
noSubEventsSelectorRendering t field
renderTopSelector =
SelectorRendering
{ t field
renderTopSelector :: t field
renderTopSelector :: t field
renderTopSelector
, renderSubSelector :: forall field'. Selectors (SubSelector field) field' -> t field'
renderSubSelector = (forall field.
SubSelector field field -> SelectorRendering t field)
-> forall field'. Selectors (SubSelector field) field' -> t field'
forall (selector :: * -> *) (t :: * -> *).
(forall field. selector field -> SelectorRendering t field)
-> forall field. Selectors selector field -> t field
selectorRendering ((forall field.
SubSelector field field -> SelectorRendering t field)
-> forall field'. Selectors (SubSelector field) field' -> t field')
-> (forall field.
SubSelector field field -> SelectorRendering t field)
-> forall field'. Selectors (SubSelector field) field' -> t field'
forall a b. (a -> b) -> a -> b
$ \case {}
}
data SelectorRendering t field = SelectorRendering
{ forall (t :: * -> *) field. SelectorRendering t field -> t field
renderTopSelector ∷ !(t field)
, forall (t :: * -> *) field.
SelectorRendering t field
-> forall field'. Selectors (SubSelector field) field' -> t field'
renderSubSelector ∷ !(∀ field'. Selectors (SubSelector field) field' → t field')
}
data SubEventBackend backend field = SubEventBackend
{ forall backend field.
SubEventBackend backend field -> RootSelector backend field
selector ∷ !(RootSelector backend field)
, forall backend field. SubEventBackend backend field -> backend
backend ∷ !backend
, forall backend field.
SubEventBackend backend field
-> EventReference (BackendEvent backend)
parentReference ∷ !(EventReference (BackendEvent backend))
}
newtype SubEventBackendEvent backend field = SubEventBackendEvent (BackendEvent backend field)
deriving newtype instance (EventBackend backend) ⇒ Event (SubEventBackendEvent backend)
deriving newtype instance (EventBackendIn m backend, Monad m) ⇒ EventIn m (SubEventBackendEvent backend)
instance (EventBackend backend) ⇒ EventBackend (SubEventBackend backend field) where
type BackendEvent (SubEventBackend backend field) = SubEventBackendEvent backend
type RootSelector (SubEventBackend backend field) = SubSelector field
subEventParams ∷ SubEventBackend backend field → EventParams (SubSelector field) field' (EventReference (BackendEvent backend)) → EventParams (RootSelector backend) field' (EventReference (BackendEvent backend))
subEventParams :: forall backend field field'.
SubEventBackend backend field
-> EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
-> EventParams
(RootSelector backend)
field'
(EventReference (BackendEvent backend))
subEventParams SubEventBackend backend field
backend EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
params =
EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
params
{ selectors = backend.selector :/ params.selectors
, parent = params.parent <|> Just backend.parentReference
}
instance (EventBackendIn m backend, ParametricFunctor m) ⇒ EventBackendIn m (SubEventBackend backend field) where
newEvent ∷ ∀ field'. SubEventBackend backend field → EventParams (SubSelector field) field' (EventReference (BackendEvent backend)) → m (SubEventBackendEvent backend field')
newEvent :: forall field'.
SubEventBackend backend field
-> EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
-> m (SubEventBackendEvent backend field')
newEvent SubEventBackend backend field
backend EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
params =
m (BackendEvent backend field')
-> m (SubEventBackendEvent backend field')
forall a b. Coercible a b => a -> b
coerce (m (BackendEvent backend field')
-> m (SubEventBackendEvent backend field'))
-> m (BackendEvent backend field')
-> m (SubEventBackendEvent backend field')
forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) backend field.
EventBackendIn m backend =>
backend
-> EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
-> m (BackendEvent backend field)
newEvent @m @backend @field'
SubEventBackend backend field
backend.backend
(SubEventBackend backend field
-> EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
-> EventParams
(RootSelector backend)
field'
(EventReference (BackendEvent backend))
forall backend field field'.
SubEventBackend backend field
-> EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
-> EventParams
(RootSelector backend)
field'
(EventReference (BackendEvent backend))
subEventParams SubEventBackend backend field
backend EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
params)
newInstantEvent ∷ ∀ field'. SubEventBackend backend field → EventParams (SubSelector field) field' (EventReference (BackendEvent backend)) → m (EventReference (BackendEvent backend))
newInstantEvent :: forall field'.
SubEventBackend backend field
-> EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
newInstantEvent SubEventBackend backend field
backend EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
params =
m (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
forall a b. Coercible a b => a -> b
coerce (m (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend)))
-> m (EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) backend field.
EventBackendIn m backend =>
backend
-> EventParams
(RootSelector backend)
field
(EventReference (BackendEvent backend))
-> m (EventReference (BackendEvent backend))
newInstantEvent @m @backend @field'
SubEventBackend backend field
backend.backend
(SubEventBackend backend field
-> EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
-> EventParams
(RootSelector backend)
field'
(EventReference (BackendEvent backend))
forall backend field field'.
SubEventBackend backend field
-> EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
-> EventParams
(RootSelector backend)
field'
(EventReference (BackendEvent backend))
subEventParams SubEventBackend backend field
backend EventParams
(SubSelector field) field' (EventReference (BackendEvent backend))
params)
addEventField
∷ (HasEventIn m event field)
⇒ field
→ m ()
addEventField :: forall (m :: * -> *) (event :: * -> *) field.
HasEventIn m event field =>
field -> m ()
addEventField = event field -> field -> m ()
forall field. event field -> field -> m ()
forall (m :: * -> *) (event :: * -> *) field.
EventIn m event =>
event field -> field -> m ()
addField event field
?e11yEvent::event field
?e11yEvent