glazier-0.8.0.0: Composable widgets framework

Safe HaskellNone
LanguageHaskell2010

Glazier.Gadget.Strict

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 # 
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 #

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

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