glazier-0.8.0.0: Composable widgets framework

Safe HaskellNone
LanguageHaskell2010

Glazier.Widget.Strict

Synopsis

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.

Constructors

Widget 

Fields

Instances

(Applicative m, Monad n, Monoid v) => Category * (Widget m s v n) Source # 

Methods

id :: cat a a #

(.) :: cat b c -> cat a b -> cat a c #

(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.

Methods

arr :: (b -> c) -> Widget m s v n b c #

first :: Widget m s v n b c -> Widget m s v n (b, d) (c, d) #

second :: Widget m s v n b c -> Widget m s v n (d, b) (d, c) #

(***) :: Widget m s v n b c -> Widget m s v n b' c' -> Widget m s v n (b, b') (c, c') #

(&&&) :: Widget m s v n b c -> Widget m s v n b c' -> Widget m s v n b (c, c') #

(Applicative m, Monad n, Monoid v) => ArrowChoice (Widget m s v n) Source # 

Methods

left :: Widget m s v n b c -> Widget m s v n (Either b d) (Either c d) #

right :: Widget m s v n b c -> Widget m s v n (Either d b) (Either d c) #

(+++) :: Widget m s v n b c -> Widget m s v n b' c' -> Widget m s v n (Either b b') (Either c c') #

(|||) :: Widget m s v n b d -> Widget m s v n c d -> Widget m s v n (Either b c) d #

(Applicative m, Monad n) => Profunctor (Widget m s v n) Source # 

Methods

dimap :: (a -> b) -> (c -> d) -> Widget m s v n b c -> Widget m s v n a d #

lmap :: (a -> b) -> Widget m s v n b c -> Widget m s v n a c #

rmap :: (b -> c) -> Widget m s v n a b -> Widget m s v n a c #

(#.) :: Coercible * c b => (b -> c) -> Widget m s v n a b -> Widget m s v n a c #

(.#) :: Coercible * b a => Widget m s v n b c -> (a -> b) -> Widget m s v n a c #

(Applicative m, Monad n) => Choice (Widget m s v n) Source # 

Methods

left' :: Widget m s v n a b -> Widget m s v n (Either a c) (Either b c) #

right' :: Widget m s v n a b -> Widget m s v n (Either c a) (Either c b) #

(Applicative m, Monad n) => Strong (Widget m s v n) Source # 

Methods

first' :: Widget m s v n a b -> Widget m s v n (a, c) (b, c) #

second' :: Widget m s v n a b -> Widget m s v n (c, a) (c, b) #

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)

Methods

fmap :: (a -> b) -> Widget m s v n a a -> Widget m s v n a b #

(<$) :: a -> Widget m s v n a b -> Widget m s v n a a #

(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

Methods

pure :: a -> Widget m s v n a a #

(<*>) :: Widget m s v n a (a -> b) -> Widget m s v n a a -> Widget m s v n a b #

(*>) :: Widget m s v n a a -> Widget m s v n a b -> Widget m s v n a b #

(<*) :: Widget m s v n a a -> Widget m s v n a b -> Widget m s v n a a #

(Applicative m, Monad n, Semigroup c, Semigroup v) => Semigroup (Widget m s v n a c) Source # 

Methods

(<>) :: Widget m s v n a c -> Widget m s v n a c -> Widget m s v n a c #

sconcat :: NonEmpty (Widget m s v n a c) -> Widget m s v n a c #

stimes :: Integral b => b -> Widget m s v n a c -> Widget m s v n a c #

(Applicative m, Monad n, Monoid c, Monoid v) => Monoid (Widget m s v n a c) Source # 

Methods

mempty :: Widget m s v n a c #

mappend :: Widget m s v n a c -> Widget m s v n a c -> Widget m s v n a c #

mconcat :: [Widget m s v n a c] -> Widget m s v n a c #

Monad n => Dispatch (Widget m s v n a c) (Widget m s v n b c) a b Source # 

Methods

dispatch :: LensLike' (Dispatched (Widget m s v n a c)) b a -> Widget m s v n a c -> Widget m s v n b c Source #

(Monad m, Monad n) => Implant (Widget m s v n a c) (Widget m t v n a c) s t Source # 

Methods

implant :: LensLike' (Implanted (Widget m s v n a c)) t s -> Widget m s v n a c -> Widget m t v n a c Source #

type Dispatched (Widget m s v n a c) Source # 
type Dispatched (Widget m s v n a c) = Dispatched (Gadget s n a c)
type Implanted (Widget m s v n a c) Source # 
type Implanted (Widget m s v n a c)

_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

statically :: (Monad n, Monoid c) => Window m s v -> Widget m s v n a c Source #

dynamically :: (Applicative m, Monad n, Monoid v) => Gadget s n a c -> Widget m s v n a c Source #