Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data Editor editorElement a = Editor {
- _editorTidings :: Tidings a
- _editorElement :: editorElement
- edited :: Editor el a -> Event a
- contents :: Editor el a -> Behavior a
- editorElement :: Lens (Editor el a) (Editor el' a) el el'
- data EditorFactory a el b
- someEditor :: Editable a => EditorFactory a Layout a
- createEditor :: Renderable w => EditorFactory a w b -> Behavior a -> UI (Editor Element b)
- class Renderable (EditorWidget a) => Editable a where
- type EditorWidget a
- data EditorWidgetFor a where
- EditorWidgetFor :: Editable a => EditorWidget a -> EditorWidgetFor a
- type family Field (usage :: Usage) a where ...
- data Usage
- (|*|) :: EditorFactory s Layout (b -> a) -> EditorFactory s Layout b -> EditorFactory s Layout a
- (|*) :: EditorFactory s Layout a -> UI Element -> EditorFactory s Layout a
- (*|) :: UI Element -> EditorFactory s Layout a -> EditorFactory s Layout a
- (-*-) :: EditorFactory s Layout (b -> a) -> EditorFactory s Layout b -> EditorFactory s Layout a
- (-*) :: EditorFactory s Layout a -> UI Element -> EditorFactory s Layout a
- (*-) :: UI Element -> EditorFactory s Layout a -> EditorFactory s Layout a
- field :: Renderable m => String -> (out -> inn) -> EditorFactory inn m a -> EditorFactory out Layout a
- fieldLayout :: (Renderable m, Renderable m') => (Layout -> m') -> String -> (out -> inn) -> EditorFactory inn m a -> EditorFactory out m' a
- pattern Horizontally :: forall a b. EditorFactory a Layout b -> EditorFactory a Horizontal b
- pattern Vertically :: forall a b. EditorFactory a Layout b -> EditorFactory a Vertical b
- withLayout :: (layout -> layout') -> EditorFactory a layout b -> EditorFactory a layout' b
- withSomeWidget :: Renderable w => EditorFactory a w b -> EditorFactory a Layout b
- construct :: Renderable m => EditorFactory a m b -> EditorFactory a Layout b
- editorUnit :: EditorFactory b Element b
- editorIdentity :: EditorFactory a el a -> EditorFactory (Identity a) el (Identity a)
- editorReadShow :: (Read a, Show a) => EditorFactory (Maybe a) TextEntry (Maybe a)
- editorEnumBounded :: (Bounded a, Enum a, Ord a, Show a) => Behavior (a -> UI Element) -> EditorFactory (Maybe a) (ListBox a) (Maybe a)
- editorSelection :: Ord a => Behavior [a] -> Behavior (a -> UI Element) -> EditorFactory (Maybe a) (ListBox a) (Maybe a)
- editorSum :: (Ord tag, Show tag, Renderable el) => (Layout -> Layout -> Layout) -> [(tag, EditorFactory a el a)] -> (a -> tag) -> EditorFactory a Layout a
- editorJust :: EditorFactory (Maybe b) el (Maybe b) -> EditorFactory b el b
- editorGeneric :: forall a. (Generic a, HasDatatypeInfo a, All (All Editable `And` All Default) (Code a)) => EditorFactory a Layout a
- editorGenericSimple :: forall a xs. (Generic a, HasDatatypeInfo a, All Editable xs, Code a ~ '[xs]) => EditorFactory a Layout a
- data Layout
- above :: Layout -> Layout -> Layout
- beside :: Layout -> Layout -> Layout
- newtype Vertical = Vertical {}
- newtype Horizontal = Horizontal {}
- data Columns
- data a |*| b = a :|*| b
- data a -*- b = a :-*- b
- class Renderable w where
Editors
data Editor editorElement a Source #
A widget for editing values of type a
.
Editor | |
|
editorElement :: Lens (Editor el a) (Editor el' a) el el' Source #
A lens over the editorElement
field
Editor factories
data EditorFactory a el b Source #
A function from Behavior
a
to Editor
b
All the three type arguments are functorial, but a
is contravariant.
EditorFactory
is a Biapplicative
functor on el
and b
, and
a Profunctor
on a
and b
.
Bifunctor (EditorFactory a) Source # | |
Biapplicative (EditorFactory a) Source # | |
Functor (EditorFactory a el) Source # | |
Monoid el => Applicative (EditorFactory a el) Source # | |
someEditor :: Editable a => EditorFactory a Layout a Source #
A version of editor
with a concealed widget type.
createEditor :: Renderable w => EditorFactory a w b -> Behavior a -> UI (Editor Element b) Source #
class Renderable (EditorWidget a) => Editable a where Source #
The class of Editable
datatypes.
.
Define your own instance by using the Applicative
composition operators or
derive it via SOP
.
type EditorWidget a Source #
editor :: EditorFactory a (EditorWidget a) a Source #
The editor factory
editor :: (Generic a, HasDatatypeInfo a, All (All Editable `And` All Default) (Code a), EditorWidget a ~ Layout) => EditorFactory a (EditorWidget a) a Source #
The editor factory
Editable Bool Source # | |
Editable Double Source # | |
Editable Int Source # | |
Editable () Source # | |
(~) * a Char => Editable [a] Source # | |
Editable (Maybe Double) Source # | |
Editable (Maybe Int) Source # | |
Editable a => Editable (Identity a) Source # | |
(Editable a, Editable b) => Editable (a, b) Source # | |
All * Editable xs => Editable (NP * I xs) Source # | Tuple editor without fields |
data EditorWidgetFor a where Source #
A container for EditorWidget
.
EditorWidgetFor :: Editable a => EditorWidget a -> EditorWidgetFor a |
type family Field (usage :: Usage) a where ... Source #
Type level fields. Use this helper to define EditorWidget types. Example:
data PersonF (usage :: Usage) = Person { education :: Field usage Education , firstName, lastName :: Field usage String , age :: Field usage (Maybe Int)
type Person = PersonF Value type PersonEditor = PersonF Edit
Field Value a = a | |
Field Edit a = EditorWidget a |
Editor composition
(|*|) :: EditorFactory s Layout (b -> a) -> EditorFactory s Layout b -> EditorFactory s Layout a infixl 4 Source #
Left-right editor composition
(|*) :: EditorFactory s Layout a -> UI Element -> EditorFactory s Layout a infixl 5 Source #
Left-right composition of an editorElement with a editor
(*|) :: UI Element -> EditorFactory s Layout a -> EditorFactory s Layout a infixl 5 Source #
Left-right composition of an editorElement with a editor
(-*-) :: EditorFactory s Layout (b -> a) -> EditorFactory s Layout b -> EditorFactory s Layout a infixl 4 Source #
Left-right editor composition
(-*) :: EditorFactory s Layout a -> UI Element -> EditorFactory s Layout a infixl 5 Source #
Left-right composition of an editorElement with a editor
(*-) :: UI Element -> EditorFactory s Layout a -> EditorFactory s Layout a infixl 5 Source #
Left-right composition of an editorElement with a editor
field :: Renderable m => String -> (out -> inn) -> EditorFactory inn m a -> EditorFactory 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) -> EditorFactory inn m a -> EditorFactory 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.
pattern Horizontally :: forall a b. EditorFactory a Layout b -> EditorFactory 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. EditorFactory a Layout b -> EditorFactory 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
Editor layout
withLayout :: (layout -> layout') -> EditorFactory a layout b -> EditorFactory a layout' b Source #
Apply a layout builder.
withSomeWidget :: Renderable w => EditorFactory a w b -> EditorFactory a Layout b Source #
Conceal the widget type of some Editor
construct :: Renderable m => EditorFactory a m b -> EditorFactory a Layout b Source #
Construct a concrete Layout
. Useful when combining heterogeneours layout builders.
Editor constructors
editorUnit :: EditorFactory b Element b Source #
editorIdentity :: EditorFactory a el a -> EditorFactory (Identity a) el (Identity a) Source #
editorReadShow :: (Read a, Show a) => EditorFactory (Maybe a) TextEntry (Maybe a) Source #
editorEnumBounded :: (Bounded a, Enum a, Ord a, Show a) => Behavior (a -> UI Element) -> EditorFactory (Maybe a) (ListBox a) (Maybe a) Source #
editorSelection :: Ord a => Behavior [a] -> Behavior (a -> UI Element) -> EditorFactory (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, EditorFactory a el a)] -> (a -> tag) -> EditorFactory a Layout a Source #
An editor for union types, built from editors for its constructors.
editorJust :: EditorFactory (Maybe b) el (Maybe b) -> EditorFactory b el b Source #
Generic editors
editorGeneric :: forall a. (Generic a, HasDatatypeInfo a, All (All Editable `And` All Default) (Code a)) => EditorFactory a Layout a Source #
A generic editor for SOP types.
editorGenericSimple :: forall a xs. (Generic a, HasDatatypeInfo a, All Editable xs, Code a ~ '[xs]) => EditorFactory a Layout a Source #
A generic editor for record types.
Layouts
Monoidal layouts
A layout monoid that places everything in a single column
newtype Horizontal Source #
A layout monoid that places everything in a single row
A layout monoid that lays elements in columns
Type level layouts
Type level Horizontal layouts
a :|*| b |
Bifunctor (|*|) Source # | |
Biapplicative (|*|) Source # | |
Bifoldable (|*|) Source # | |
(Renderable a, Renderable b) => Renderable ((|*|) a b) Source # | |
Type level Vertical layouts
a :-*- b |
Bifunctor (-*-) Source # | |
Biapplicative (-*-) Source # | |
Bifoldable (-*-) Source # | |
(Renderable a, Renderable b) => Renderable ((-*-) a b) Source # | |
Layout manipulation
class Renderable w where Source #
Renderable String Source # | |
Renderable TextEntry Source # | |
Renderable Element Source # | |
Renderable Columns Source # | |
Renderable Horizontal Source # | |
Renderable Vertical Source # | |
Renderable Layout Source # | |
Renderable (ListBox a) Source # | |
Renderable a => Renderable (UI a) Source # | |
(Renderable a, Renderable b) => Renderable ((-*-) a b) Source # | |
(Renderable a, Renderable b) => Renderable ((|*|) a b) Source # | |