Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data GenericWidget control a = GenericWidget {
- widgetTidings :: Tidings a
- widgetControl :: control
- edited :: GenericWidget el a -> Event a
- contents :: GenericWidget el a -> Behavior a
- liftElement :: UI el -> Editor a el ()
- newtype Editor a el b = Editor {
- create :: Behavior a -> UI (GenericWidget el b)
- dimapE :: (a' -> a) -> (b -> b') -> Editor a el b -> Editor a' el b'
- lmapE :: (a' -> a) -> Editor a el b -> Editor a' el b
- applyE :: (el1 -> el2 -> el) -> Editor in_ el1 (a -> b) -> Editor in_ el2 a -> Editor in_ el b
- (|*|) :: Editor s Layout (b -> a) -> Editor s Layout b -> Editor s Layout a
- (|*) :: Editor s Layout a -> UI Element -> Editor s Layout a
- (*|) :: UI Element -> Editor s Layout a -> Editor s Layout a
- (-*-) :: Editor s Layout (b -> a) -> Editor s Layout b -> Editor s Layout a
- (-*) :: Editor s Layout a -> UI Element -> Editor s Layout a
- (*-) :: UI Element -> Editor s Layout a -> Editor s Layout a
- field :: Renderable m => String -> (out -> inn) -> Editor inn m a -> Editor out Layout a
- fieldLayout :: (Renderable m, Renderable m') => (Layout -> m') -> String -> (out -> inn) -> Editor inn m a -> Editor out m' a
- edit :: (a' -> a) -> Editor a el b -> Editor a' el b
- pattern Horizontally :: forall a b. Editor a Layout b -> Editor a Horizontal b
- pattern Vertically :: forall a b. Editor a Layout b -> Editor a Vertical b
- editorUnit :: Editor b Element b
- editorIdentity :: Editor a el a -> Editor (Identity a) el (Identity a)
- editorString :: Editor String TextEntry String
- editorCheckBox :: Editor Bool Element Bool
- editorReadShow :: (Read a, Show a) => Editor (Maybe a) TextEntry (Maybe a)
- editorEnumBounded :: (Bounded a, Enum a, Ord a, Show a) => Behavior (a -> UI Element) -> Editor (Maybe a) (ListBox a) (Maybe a)
- editorSelection :: Ord a => Behavior [a] -> Behavior (a -> UI Element) -> Editor (Maybe a) (ListBox a) (Maybe a)
- editorSum :: (Ord tag, Show tag, Renderable el) => (Layout -> Layout -> Layout) -> [(tag, Editor a el a)] -> (a -> tag) -> Editor a Layout a
- editorJust :: Editor (Maybe b) el (Maybe b) -> Editor b el b
- withLayout :: (layout -> layout') -> Editor a layout b -> Editor a layout' b
- construct :: Renderable m => Editor a m b -> Editor a Layout b
GenericWidgets
data GenericWidget control a Source #
A widget for editing values of type a
.
GenericWidget | |
|
Bifunctor GenericWidget Source # | |
Functor (GenericWidget control) Source # | |
Widget el => Widget (GenericWidget el a) Source # | |
Renderable el => Renderable (GenericWidget el a) Source # | |
edited :: GenericWidget el a -> Event a Source #
contents :: GenericWidget el a -> Behavior a Source #
liftElement :: UI el -> Editor a el () Source #
Lift an HTML element into a vacuous editor.
newtype Editor a el b Source #
A widget el
for editing b
values while displaying a
values.
For obvious reasons, a
and b
are usually the same type, except while composing editors.
All the three type arguments are functorial, but a
is contravariant.
Editor
is a Biapplicative
functor on el
and b
, and a Profunctor
on a
and b
.
Editors compose using the Applicative interface when el
is monoidal
or more generally with the Biapplicative interface. In both cases the
Profunctor lmap
is used to select the value to display.
For an example of the Applicative interface, let's assemble the editor for a tuple of values:
editorTuple = (,) <$> lmap fst editable <*> lmap snd editable
applyE :: (el1 -> el2 -> el) -> Editor in_ el1 (a -> b) -> Editor in_ el2 a -> Editor in_ el b Source #
GenericWidget composition
(|*|) :: Editor s Layout (b -> a) -> Editor s Layout b -> Editor s Layout a infixl 4 Source #
Left-right editor composition
(|*) :: Editor s Layout a -> UI Element -> Editor s Layout a infixl 5 Source #
Left-right composition of an element with a editor
(*|) :: UI Element -> Editor s Layout a -> Editor s Layout a infixl 5 Source #
Left-right composition of an element with a editor
(-*-) :: Editor s Layout (b -> a) -> Editor s Layout b -> Editor s Layout a infixl 4 Source #
Left-right editor composition
(-*) :: Editor s Layout a -> UI Element -> Editor s Layout a infixl 5 Source #
Left-right composition of an element with a editor
(*-) :: UI Element -> Editor s Layout a -> Editor s Layout a infixl 5 Source #
Left-right composition of an element with a editor
field :: Renderable m => String -> (out -> inn) -> Editor inn m a -> Editor out Layout a Source #
A helper that arranges a label with the field name and the editor horizontally.
fieldLayout :: (Renderable m, Renderable m') => (Layout -> m') -> String -> (out -> inn) -> Editor inn m a -> Editor out m' a Source #
A helper that arranges a label with the field name and the editor horizontally. This version takes a Layout builder as well.
edit :: (a' -> a) -> Editor a el b -> Editor a' el b Source #
Use when composing Biapplicative editors to focus on a field.
personEditor :: Editor Person PersonEditor Person personEditor = bipure Person Person <<*>> edit education editor <<*>> edit firstName editor <<*>> edit lastName editor
pattern Horizontally :: forall a b. Editor a Layout b -> Editor a Horizontal b Source #
Applicative modifier for horizontal composition of editor factories. This can be used in conjunction with ApplicativeDo as:
editorPerson = horizontally $ do firstName <- Horizontally $ field "First:" firstName editor lastName <- Horizontally $ field "Last:" lastName editor age <- Horizontally $ field "Age:" age editor return Person{..}
DEPRECATED: Use the Horizontal
layout builder instead
pattern Vertically :: forall a b. Editor a Layout b -> Editor a Vertical b Source #
Applicative modifier for vertical composition of editor factories. This can be used in conjunction with ApplicativeDo as:
editorPerson = vertically $ do firstName <- Vertically $ field "First:" firstName editor lastName <- Vertically $ field "Last:" lastName editor age <- Vertically $ field "Age:" age editor return Person{..}
DEPRECATED: Use the Vertical
layout builder instead
GenericWidget constructors
editorUnit :: Editor b Element b Source #
editorEnumBounded :: (Bounded a, Enum a, Ord a, Show a) => Behavior (a -> UI Element) -> Editor (Maybe a) (ListBox a) (Maybe a) Source #
editorSelection :: Ord a => Behavior [a] -> Behavior (a -> UI Element) -> Editor (Maybe a) (ListBox a) (Maybe a) Source #
An editor that presents a dynamic choice of values.
editorSum :: (Ord tag, Show tag, Renderable el) => (Layout -> Layout -> Layout) -> [(tag, Editor a el a)] -> (a -> tag) -> Editor a Layout a Source #
An editor for union types, built from editors for its constructors.
GenericWidget layout
withLayout :: (layout -> layout') -> Editor a layout b -> Editor a layout' b Source #
Apply a layout builder.