Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data Widget m s v n a c = Widget {}
- _gadget :: Lens (Widget m s v n a c) (Widget m s v n' a' c') (Gadget s n a c) (Gadget s n' a' c')
- _window :: Lens (Widget m s v n a c) (Widget m' s v' n a c) (Window m s v) (Window m' s v')
- _Widget :: Iso (Widget m s v n a c) (Widget m' s' v' n' a' c') (s -> m v, a -> s -> n (c, s)) (s' -> m' v', a' -> s' -> n' (c', s'))
- _Widget' :: Iso' (Widget m s v n a c) (s -> m v, a -> s -> n (c, s))
- _WrappingWidget :: Iso (Widget m s v n a c) (Widget m' s' v' n' a' c') (Window m s v, Gadget s n a c) (Window m' s' v', Gadget s' n' a' c')
- _WrappingWidget' :: Iso' (Widget m s v n a c) (Window m s v, Gadget s n a c)
- statically :: (Monad n, Monoid c) => Window m s v -> Widget m s v n a c
- dynamically :: (Applicative m, Monad n, Monoid v) => Gadget s n a c -> Widget m s v n a c
Documentation
data Widget m s v n a c Source #
A widget is basically a tuple with Gadget and Window, but with handy instances for implant and dispatch.
(Applicative m, Monad n, Monoid v) => Category * (Widget m s v n) Source # | |
(Applicative m, Monad n, Monoid v) => Arrow (Widget m s v n) Source # | No monad instance for Widget is possible, however an arrow is possible. The Arrow instance monoidally appends the Window, and uses the inner Gadget Arrow instance. |
(Applicative m, Monad n, Monoid v) => ArrowChoice (Widget m s v n) Source # | |
(Applicative m, Monad n) => Profunctor (Widget m s v n) Source # | |
(Applicative m, Monad n) => Choice (Widget m s v n) Source # | |
(Applicative m, Monad n) => Strong (Widget m s v n) Source # | |
Functor n => Functor (Widget m s v n a) Source # | Widget Functor is lawful 1: fmap id = id (Widget w g) = Widget w (id $ g) = Widget w g 2: fmap (f . g) = fmap f . fmap g (Widget w gad) = Widget w ((f . g) $ gad) = Widget w ((fmap f . fmap g) gad) |
(Applicative m, Monad n, Semigroup v, Monoid v) => Applicative (Widget m s v n a) Source # | Widget Applicative is lawful Identity: pure id * v = v Widget mempty (pure id) * Widget vw vg = Widget (mempty <> vw) (pure id * vg) = Widget vw vg Composition: pure (.) * u * v * w = u * (v * w) Widget mempty (pure (.)) * Widget uw ug * Widget vw vg * Widget ww wg = = Widget (mempty <> uw <> vw <> ww) (pure (.) * ug * vg * wg = Widget (uw <> vw <> ww) (ug * (vg * wg)) = Widget (uw <> (vw <> ww)) (ug * (vg * wg)) = Widget uw ug * (Widget vw vg * Widget ww wg) Interchange: u * pure y = pure ($ y) * u Widget uw ug * Widget mempty (pure y) = Widget (uw <> mempty) (ug * pure y) = Widget (mempty <> uw) (pure ($ y) * ug) = Widget mempty (pure $y) * Widget uw ug |
(Applicative m, Monad n, Semigroup c, Semigroup v) => Semigroup (Widget m s v n a c) Source # | |
(Applicative m, Monad n, Monoid c, Monoid v) => Monoid (Widget m s v n a c) Source # | |
Monad n => Dispatch (Widget m s v n a c) (Widget m s v n b c) a b Source # | |
(Monad m, Monad n) => Implant (Widget m s v n a c) (Widget m t v n a c) s t Source # | |
type Dispatched (Widget m s v n a c) Source # | |
type Implanted (Widget m s v n a c) Source # | |
_gadget :: Lens (Widget m s v n a c) (Widget m s v n' a' c') (Gadget s n a c) (Gadget s n' a' c') Source #
polymorphic lens to the gadget of a widget
_window :: Lens (Widget m s v n a c) (Widget m' s v' n a c) (Window m s v) (Window m' s v') Source #
polymorphic lens to the window of a widget
_Widget :: Iso (Widget m s v n a c) (Widget m' s' v' n' a' c') (s -> m v, a -> s -> n (c, s)) (s' -> m' v', a' -> s' -> n' (c', s')) Source #
This Iso gives the following functions:
belowWidget :: ((s -> m v, a -> s -> m (c, s)) -> (s' -> m' v', a' -> s' -> m' (c', s'))) -> Widget s v m a c -> Widget s' v' m' a' c' belowWidget f = _Widget %~ f aboveWidget :: (Widget s v m a c -> Widget s' v' m' a' c') -> (s -> m v, a -> s -> m (c, s)) -> (s' -> m' v', a' -> s' -> m' (c', s')) aboveWidget f = from _Widget %~ f mkWidget' :: (s -> m v, a -> s -> m (c, s)) -> Widget s v m a c mkWidget' = review _Widget runWidget' :: Widget s v m a c -> (s -> m v, a -> s -> m (c, s)) runWidget' = view _Widget
_Widget' :: Iso' (Widget m s v n a c) (s -> m v, a -> s -> n (c, s)) Source #
Non polymorphic version of _Widget
_WrappingWidget :: Iso (Widget m s v n a c) (Widget m' s' v' n' a' c') (Window m s v, Gadget s n a c) (Window m' s' v', Gadget s' n' a' c') Source #
This Iso gives the following functions:
underWidget :: ((Window m s v, Gadget s m a c) -> (Window m' s' v', Gadget s' m' a' c')) -> Widget s v m a c -> Widget s' v' m' a' c' underWidget f = _WrappingWidget %~ f overWidget :: (Widget s v m a c -> Widget s' v' m' a' c') -> (Window m s v, Gadget s m a c) -> (Window m' s' v', Gadget s' m' a' c') overWidget f = from _WrappingWidget %~ f mkWidget :: (Window m s v, Gadget s m a c) -> Widget s v m a c mkWidget = review _WrappingWidget runWidget :: Widget s v m a c -> (Window m s v, Gadget s m a c) runWidget = view _WrappingWidget
_WrappingWidget' :: Iso' (Widget m s v n a c) (Window m s v, Gadget s n a c) Source #
Non polymorphic version of _WrappingWidget
dynamically :: (Applicative m, Monad n, Monoid v) => Gadget s n a c -> Widget m s v n a c Source #