glazier-0.7.0.0: Composable widgets framework

Safe HaskellNone
LanguageHaskell2010

Glazier.Gadget.Lazy

Synopsis

Documentation

newtype Gadget s m a c Source #

The Elm update function is a -> s -> (s, c) This is isomorphic to ReaderT a (State s) c ie, given an action "a", and a current state "s", return the new state "s" and any commands "c" that need to be interpreted externally (eg. download file). This is named Gadget instead of Update to avoid confusion with update from Data.Map

Constructors

Gadget 

Fields

Instances

Monad m => MonadState s (Gadget s m a) Source # 

Methods

get :: Gadget s m a s #

put :: s -> Gadget s m a () #

state :: (s -> (a, s)) -> Gadget s m a a #

Monad m => MonadReader a (Gadget s m a) Source # 

Methods

ask :: Gadget s m a a #

local :: (a -> a) -> Gadget s m a a -> Gadget s m a a #

reader :: (a -> a) -> Gadget s m a a #

Monad m => Category * (Gadget s m) Source # 

Methods

id :: cat a a #

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

Monad m => Arrow (Gadget s m) Source # 

Methods

arr :: (b -> c) -> Gadget s m b c #

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

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

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

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

MonadPlus m => ArrowZero (Gadget s m) Source # 

Methods

zeroArrow :: Gadget s m b c #

MonadPlus m => ArrowPlus (Gadget s m) Source # 

Methods

(<+>) :: Gadget s m b c -> Gadget s m b c -> Gadget s m b c #

Monad m => ArrowChoice (Gadget s m) Source # 

Methods

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

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

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

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

Monad m => ArrowApply (Gadget s m) Source # 

Methods

app :: Gadget s m (Gadget s m b c, b) c #

Monad m => Profunctor (Gadget s m) Source # 

Methods

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

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

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

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

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

Monad m => Choice (Gadget s m) Source # 

Methods

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

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

Monad m => Strong (Gadget s m) Source # 

Methods

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

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

Monad m => Monad (Gadget s m a) Source # 

Methods

(>>=) :: Gadget s m a a -> (a -> Gadget s m a b) -> Gadget s m a b #

(>>) :: Gadget s m a a -> Gadget s m a b -> Gadget s m a b #

return :: a -> Gadget s m a a #

fail :: String -> Gadget s m a a #

Functor m => Functor (Gadget s m a) Source # 

Methods

fmap :: (a -> b) -> Gadget s m a a -> Gadget s m a b #

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

MonadFix m => MonadFix (Gadget s m a) Source # 

Methods

mfix :: (a -> Gadget s m a a) -> Gadget s m a a #

MonadFail m => MonadFail (Gadget s m a) Source # 

Methods

fail :: String -> Gadget s m a a #

Monad m => Applicative (Gadget s m a) Source # 

Methods

pure :: a -> Gadget s m a a #

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

(*>) :: Gadget s m a a -> Gadget s m a b -> Gadget s m a b #

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

MonadIO m => MonadIO (Gadget s m a) Source # 

Methods

liftIO :: IO a -> Gadget s m a a #

MonadPlus m => Alternative (Gadget s m a) Source # 

Methods

empty :: Gadget s m a a #

(<|>) :: Gadget s m a a -> Gadget s m a a -> Gadget s m a a #

some :: Gadget s m a a -> Gadget s m a [a] #

many :: Gadget s m a a -> Gadget s m a [a] #

MonadPlus m => MonadPlus (Gadget s m a) Source # 

Methods

mzero :: Gadget s m a a #

mplus :: Gadget s m a a -> Gadget s m a a -> Gadget s m a a #

Monad m => Zoom (Gadget s m a) (Gadget t m a) s t Source # 

Methods

zoom :: LensLike' (Zoomed (Gadget s m a) c) t s -> Gadget s m a c -> Gadget t m a c #

Monad m => Magnify (Gadget s m a) (Gadget s m b) a b Source # 

Methods

magnify :: LensLike' (Magnified (Gadget s m a) c) b a -> Gadget s m a c -> Gadget s m b c #

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

Methods

(<>) :: Gadget s m a c -> Gadget s m a c -> Gadget s m a c #

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

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

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

Methods

mempty :: Gadget s m a c #

mappend :: Gadget s m a c -> Gadget s m a c -> Gadget s m a c #

mconcat :: [Gadget s m a c] -> Gadget s m a c #

Wrapped (Gadget s0 m0 a0 c0) Source # 

Associated Types

type Unwrapped (Gadget s0 m0 a0 c0) :: * #

Methods

_Wrapped' :: Iso' (Gadget s0 m0 a0 c0) (Unwrapped (Gadget s0 m0 a0 c0)) #

(~) * (Gadget s0 m0 a0 c0) t0 => Rewrapped (Gadget s1 m1 a1 c1) t0 Source # 
HasGadget (Gadget s m a c) (Gadget s m a c) Source # 

Methods

gadget :: Lens' (Gadget s m a c) (Gadget s m a c) Source #

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

Methods

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

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

Methods

implant :: LensLike' (Implanted (Gadget s m a c)) t s -> Gadget s m a c -> Gadget t m a c 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 #

type Zoomed (Gadget s m a) Source # 
type Zoomed (Gadget s m a) = Zoomed (StateT s m)
type Magnified (Gadget s m a) Source # 
type Magnified (Gadget s m a) = Magnified (ReaderT * a (StateT s m))
type Unwrapped (Gadget s0 m0 a0 c0) Source # 
type Unwrapped (Gadget s0 m0 a0 c0) = ReaderT * a0 (StateT s0 m0) c0
type Dispatched (Gadget s m a c) Source # 
type Dispatched (Gadget s m a c) = Magnified (Gadget s m a) c
type Implanted (Gadget s m a c) Source # 
type Implanted (Gadget s m a c) = Zoomed (Gadget s m a) c

class HasGadget s a | s -> a where Source #

Minimal complete definition

gadget

Methods

gadget :: Lens' s a Source #

Instances

HasGadget (Gadget s m a c) (Gadget s m a c) Source # 

Methods

gadget :: Lens' (Gadget s m a c) (Gadget s m a c) 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 #

hoistGadget :: Monad m => (forall b. m b -> n b) -> Gadget s m a c -> Gadget s n a c Source #

NB lift can be simulated: liftGadget :: (MonadTrans t, Monad m) => Gadget s m a c -> Gadget s (t m) a c liftGadget = _Wrapping Gadget %~ hoist (hoist lift)

_Gadget :: Iso (Gadget s m a c) (Gadget s' m' a' c') (a -> s -> m (c, s)) (a' -> s' -> m' (c', s')) Source #

This Iso gives the following functions:

underGadget :: (ReaderT a (StateT s m) c -> ReaderT a' (StateT s' m') c') -> Gadget s m a c -> Gadget s' m' a' c'
underGadget f = _Wrapping Gadget %~ f

overGadget :: (Gadget s m a c -> Gadget s' m' a' c') -> ReaderT a (StateT s m) c -> ReaderT a' (StateT s' m') c'
overGadget f = _Unwrapping Gadget %~ f

belowGadget :: (a -> s -> m (c, s)) (a' -> s' -> m' (c', s')) -> Gadget s m a c -> Gadget s' m' a' c'
belowGadget f = _Gadget %~ f

aboveGadget :: (Gadget s m a c -> Gadget s' m' a' c') -> (a -> s -> m (c, s)) (a' -> s' -> m' (c', s'))
aboveGadget f = from _Gadget %~ f

mkGadget' :: (a -> s -> m (c, s)) -> Gadget s m a c
mkGadget' = review _Gadget

runGadget' :: Gadget s m a c -> (a -> s -> m (c, s))
runGadget' = view _Gadget

_Gadget' :: Iso' (Gadget s m a c) (a -> s -> m (c, s)) Source #

Non polymorphic version of _Gadget