glazier-0.7.0.0: Composable widgets framework

Safe HaskellNone
LanguageHaskell2010

Glazier.Widget.Lazy

Synopsis

Documentation

data Widget s v m a c Source #

A widget is basically a tuple with Gadget and Window.

Constructors

Widget 

Fields

Instances

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

Methods

id :: cat a a #

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

(Monad m, Monoid v) => Arrow (Widget s v m) 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 s v m b c #

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

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

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

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

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

Methods

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

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

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

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

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

Methods

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

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

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

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

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

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

Methods

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

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

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

Methods

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

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

Functor m => Functor (Widget s v m 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 s v m a a -> Widget s v m a b #

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

(Semigroup v, Monad m, Monoid v) => Applicative (Widget s v m 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 s v m a a #

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

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

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

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

Methods

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

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

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

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

Methods

mempty :: Widget s v m a c #

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

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

HasWindow (Widget s0 v0 m0 a0 c0) (Window m0 s0 v0) Source # 

Methods

window :: Lens' (Widget s0 v0 m0 a0 c0) (Window m0 s0 v0) Source #

HasGadget (Widget s0 v0 m0 a0 c0) (Gadget s0 m0 a0 c0) Source # 

Methods

gadget :: Lens' (Widget s0 v0 m0 a0 c0) (Gadget s0 m0 a0 c0) Source #

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

Methods

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

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

Methods

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

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

_Widget :: Iso (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')) 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 s v m a c) (s -> m v, a -> s -> m (c, s)) Source #

Non polymorphic version of _Widget

_WrappingWidget :: Iso (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') 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 s v m a c) (Window m s v, Gadget s m a c) Source #

Non polymorphic version of _WrappingWidget

hoistWidget :: Monad m => (forall x. m x -> n x) -> Widget s v m a c -> Widget s v n a c Source #

NB lift can be simulated: liftWidget :: (MonadTrans t, Monad m) => Widget s v m a c -> Widget s v (t m) a c liftWidget = hoistWidget lift

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

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