module ComponentHelpers where
import Data.Typeable
import Data.Bifunctor
import Events
import Component (Purview (..), Attributes (..))
handler
:: ( Typeable event
, Show state
, Eq state
, Typeable state
)
=> [DirectedEvent parentEvent event]
-> state
-> (event -> state -> (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
handler :: forall event state parentEvent (m :: * -> *).
(Typeable event, Show state, Eq state, Typeable state) =>
[DirectedEvent parentEvent event]
-> state
-> (event
-> state -> (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
handler [DirectedEvent parentEvent event]
initEvents state
state event
-> state -> (state -> state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont =
forall state newEvent event (m :: * -> *).
(Show state, Eq state, Typeable state, Typeable newEvent) =>
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent event newEvent]
-> state
-> (newEvent
-> state -> (state -> state, [DirectedEvent event newEvent]))
-> (state -> Purview newEvent m)
-> Purview event m
Handler forall a. Maybe a
Nothing forall a. Maybe a
Nothing [DirectedEvent parentEvent event]
initEvents state
state event
-> state -> (state -> state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont
handler'
:: ( Typeable event
, Show state
, Eq state
, Typeable state
)
=> [DirectedEvent parentEvent event]
-> state
-> (event -> state -> (state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
handler' :: forall event state parentEvent (m :: * -> *).
(Typeable event, Show state, Eq state, Typeable state) =>
[DirectedEvent parentEvent event]
-> state
-> (event -> state -> (state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
handler' [DirectedEvent parentEvent event]
initEvents state
state event -> state -> (state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont =
forall state newEvent event (m :: * -> *).
(Show state, Eq state, Typeable state, Typeable newEvent) =>
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent event newEvent]
-> state
-> (newEvent
-> state -> (state -> state, [DirectedEvent event newEvent]))
-> (state -> Purview newEvent m)
-> Purview event m
Handler forall a. Maybe a
Nothing forall a. Maybe a
Nothing [DirectedEvent parentEvent event]
initEvents state
state (forall {p} {p} {a} {b} {b}.
(p -> p -> (a, b)) -> p -> p -> (b -> a, b)
constReducer event -> state -> (state, [DirectedEvent parentEvent event])
reducer) state -> Purview event m
cont
where constReducer :: (p -> p -> (a, b)) -> p -> p -> (b -> a, b)
constReducer p -> p -> (a, b)
reducer p
event p
state =
let (a
newState, b
events) = p -> p -> (a, b)
reducer p
event p
state
in (forall a b. a -> b -> a
const a
newState, b
events)
effectHandler
:: ( Typeable event
, Show state
, Eq state
, Typeable state
)
=> [DirectedEvent parentEvent event]
-> state
-> (event -> state -> m (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
effectHandler :: forall event state parentEvent (m :: * -> *).
(Typeable event, Show state, Eq state, Typeable state) =>
[DirectedEvent parentEvent event]
-> state
-> (event
-> state -> m (state -> state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
effectHandler [DirectedEvent parentEvent event]
initEvents state
state event
-> state -> m (state -> state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont =
forall state newEvent event (m :: * -> *).
(Show state, Eq state, Typeable state, Typeable newEvent) =>
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent event newEvent]
-> state
-> (newEvent
-> state -> m (state -> state, [DirectedEvent event newEvent]))
-> (state -> Purview newEvent m)
-> Purview event m
EffectHandler forall a. Maybe a
Nothing forall a. Maybe a
Nothing [DirectedEvent parentEvent event]
initEvents state
state event
-> state -> m (state -> state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont
effectHandler'
:: ( Typeable event
, Show state
, Eq state
, Typeable state
, Functor m
)
=> [DirectedEvent parentEvent event]
-> state
-> (event -> state -> m (state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
effectHandler' :: forall event state (m :: * -> *) parentEvent.
(Typeable event, Show state, Eq state, Typeable state,
Functor m) =>
[DirectedEvent parentEvent event]
-> state
-> (event -> state -> m (state, [DirectedEvent parentEvent event]))
-> (state -> Purview event m)
-> Purview parentEvent m
effectHandler' [DirectedEvent parentEvent event]
initEvents state
state event -> state -> m (state, [DirectedEvent parentEvent event])
reducer state -> Purview event m
cont =
forall state newEvent event (m :: * -> *).
(Show state, Eq state, Typeable state, Typeable newEvent) =>
ParentIdentifier
-> ParentIdentifier
-> [DirectedEvent event newEvent]
-> state
-> (newEvent
-> state -> m (state -> state, [DirectedEvent event newEvent]))
-> (state -> Purview newEvent m)
-> Purview event m
EffectHandler forall a. Maybe a
Nothing forall a. Maybe a
Nothing [DirectedEvent parentEvent event]
initEvents state
state (forall {f :: * -> *} {p :: * -> * -> *} {t} {t} {a} {c} {b}.
(Functor f, Bifunctor p) =>
(t -> t -> f (p a c)) -> t -> t -> f (p (b -> a) c)
constReducer event -> state -> m (state, [DirectedEvent parentEvent event])
reducer) state -> Purview event m
cont
where constReducer :: (t -> t -> f (p a c)) -> t -> t -> f (p (b -> a) c)
constReducer t -> t -> f (p a c)
reducer t
event t
state = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
Data.Bifunctor.first forall a b. a -> b -> a
const) (t -> t -> f (p a c)
reducer t
event t
state)
receiver
:: ( Show event
, Eq event
, Typeable event
)
=> String -> (Maybe String -> event) -> (state -> Purview event m) -> state -> Purview event m
receiver :: forall event state (m :: * -> *).
(Show event, Eq event, Typeable event) =>
String
-> (Maybe String -> event)
-> (state -> Purview event m)
-> state
-> Purview event m
receiver String
name Maybe String -> event
eventParser state -> Purview event m
child state
state = forall event state (m :: * -> *).
(Show event, Eq event, Typeable event) =>
ParentIdentifier
-> ParentIdentifier
-> String
-> (Maybe String -> event)
-> (state -> Purview event m)
-> state
-> Purview event m
Receiver forall a. Maybe a
Nothing forall a. Maybe a
Nothing String
name Maybe String -> event
eventParser state -> Purview event m
child state
state
div :: [Purview event m] -> Purview event m
div :: forall event (m :: * -> *). [Purview event m] -> Purview event m
div = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"div"
span :: [Purview event m] -> Purview event m
span :: forall event (m :: * -> *). [Purview event m] -> Purview event m
span = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"span"
h1 :: [Purview event m] -> Purview event m
h1 :: forall event (m :: * -> *). [Purview event m] -> Purview event m
h1 = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"h1"
h2 :: [Purview event m] -> Purview event m
h2 :: forall event (m :: * -> *). [Purview event m] -> Purview event m
h2 = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"h2"
h3 :: [Purview event m] -> Purview event m
h3 :: forall event (m :: * -> *). [Purview event m] -> Purview event m
h3 = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"h3"
h4 :: [Purview event m] -> Purview event m
h4 :: forall event (m :: * -> *). [Purview event m] -> Purview event m
h4 = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"h4"
p :: [Purview event m] -> Purview event m
p :: forall event (m :: * -> *). [Purview event m] -> Purview event m
p = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"p"
a :: [Purview event m] -> Purview event m
a :: forall event (m :: * -> *). [Purview event m] -> Purview event m
a = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"a"
ul :: [Purview event m] -> Purview event m
ul :: forall event (m :: * -> *). [Purview event m] -> Purview event m
ul = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"ul"
li :: [Purview event m] -> Purview event m
li :: forall event (m :: * -> *). [Purview event m] -> Purview event m
li = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"li"
button :: [Purview event m] -> Purview event m
button :: forall event (m :: * -> *). [Purview event m] -> Purview event m
button = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"button"
form :: [Purview event m] -> Purview event m
form :: forall event (m :: * -> *). [Purview event m] -> Purview event m
form = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"form"
input :: [Purview event m] -> Purview event m
input :: forall event (m :: * -> *). [Purview event m] -> Purview event m
input = forall event (m :: * -> *).
String -> [Purview event m] -> Purview event m
Html String
"input"
text :: String -> Purview event m
text :: forall event (m :: * -> *). String -> Purview event m
text = forall event (m :: * -> *). String -> Purview event m
Text
id' :: String -> Purview event m -> Purview event m
id' :: forall event (m :: * -> *).
String -> Purview event m -> Purview event m
id' = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall event. String -> String -> Attributes event
Generic String
"id"
class' :: String -> Purview event m -> Purview event m
class' :: forall event (m :: * -> *).
String -> Purview event m -> Purview event m
class' = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall event. String -> String -> Attributes event
Generic String
"class"
classes :: [String] -> Purview event m -> Purview event m
classes :: forall event (m :: * -> *).
[String] -> Purview event m -> Purview event m
classes [String]
xs = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall event. String -> String -> Attributes event
Generic String
"class" forall a b. (a -> b) -> a -> b
$ [String] -> String
unwords [String]
xs
href :: String -> Purview event m -> Purview event m
href :: forall event (m :: * -> *).
String -> Purview event m -> Purview event m
href = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall event. String -> String -> Attributes event
Generic String
"href"
istyle :: String -> Purview event m -> Purview event m
istyle :: forall event (m :: * -> *).
String -> Purview event m -> Purview event m
istyle String
str = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall a b. (a -> b) -> a -> b
$ forall event. (String, String) -> Attributes event
Style (String
"-1", String
str)
onClick :: (Typeable event, Eq event, Show event) => event -> Purview event m -> Purview event m
onClick :: forall event (m :: * -> *).
(Typeable event, Eq event, Show event) =>
event -> Purview event m -> Purview event m
onClick = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall event.
(Show event, Eq event, Typeable event) =>
String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
On String
"click" forall a. Maybe a
Nothing forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> b -> a
const
onSubmit :: (Typeable event, Eq event, Show event) => (Maybe String -> event) -> Purview event m -> Purview event m
onSubmit :: forall event (m :: * -> *).
(Typeable event, Eq event, Show event) =>
(Maybe String -> event) -> Purview event m -> Purview event m
onSubmit = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall event.
(Show event, Eq event, Typeable event) =>
String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
On String
"submit" forall a. Maybe a
Nothing
onBlur :: (Typeable event, Eq event, Show event) => (Maybe String -> event) -> Purview event m -> Purview event m
onBlur :: forall event (m :: * -> *).
(Typeable event, Eq event, Show event) =>
(Maybe String -> event) -> Purview event m -> Purview event m
onBlur = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall event.
(Show event, Eq event, Typeable event) =>
String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
On String
"focusout" forall a. Maybe a
Nothing
onChange :: (Typeable event, Eq event, Show event) => (Maybe String -> event) -> Purview event m -> Purview event m
onChange :: forall event (m :: * -> *).
(Typeable event, Eq event, Show event) =>
(Maybe String -> event) -> Purview event m -> Purview event m
onChange = forall event (m :: * -> *).
Attributes event -> Purview event m -> Purview event m
Attribute forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall event.
(Show event, Eq event, Typeable event) =>
String
-> ParentIdentifier -> (Maybe String -> event) -> Attributes event
On String
"change" forall a. Maybe a
Nothing