{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE TupleSections #-}
module Jaskell
(
run, runOn, runK, runKOn
, push, liftS, liftS2, pushM, popM, liftSM
) where
import Control.Arrow (Arrow, arr, Kleisli(Kleisli))
run :: (() -> t) -> t
run :: forall t. (() -> t) -> t
run () -> t
f = () -> t
f ()
runOn :: s -> (s -> t) -> t
runOn :: forall s t. s -> (s -> t) -> t
runOn s
s s -> t
f = s -> t
f s
s
runK :: Kleisli m () t -> m t
runK :: forall (m :: * -> *) t. Kleisli m () t -> m t
runK (Kleisli () -> m t
f) = () -> m t
f ()
runKOn :: s -> Kleisli m s t -> m t
runKOn :: forall s (m :: * -> *) t. s -> Kleisli m s t -> m t
runKOn s
s (Kleisli s -> m t
f) = s -> m t
f s
s
push :: Arrow arr => a -> arr s (s, a)
push :: forall (arr :: * -> * -> *) a s. Arrow arr => a -> arr s (s, a)
push a
x = forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (, a
x)
liftS :: Arrow arr => (a -> b) -> arr (s, a) (s, b)
liftS :: forall (arr :: * -> * -> *) a b s.
Arrow arr =>
(a -> b) -> arr (s, a) (s, b)
liftS a -> b
f = forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
f)
liftS2 :: Arrow arr => (a -> b -> c) -> arr ((s, a), b) (s, c)
liftS2 :: forall (arr :: * -> * -> *) a b c s.
Arrow arr =>
(a -> b -> c) -> arr ((s, a), b) (s, c)
liftS2 a -> b -> c
f = forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr \((s
s, a
x), b
y) -> (s
s, a -> b -> c
f a
x b
y)
pushM :: Functor m => m a -> Kleisli m s (s, a)
pushM :: forall (m :: * -> *) a s. Functor m => m a -> Kleisli m s (s, a)
pushM m a
mx = forall (m :: * -> *) a b. (a -> m b) -> Kleisli m a b
Kleisli \s
s -> forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (s
s, ) m a
mx
popM :: Functor m => (a -> m ()) -> Kleisli m (s, a) s
popM :: forall (m :: * -> *) a s.
Functor m =>
(a -> m ()) -> Kleisli m (s, a) s
popM a -> m ()
f = forall (m :: * -> *) a b. (a -> m b) -> Kleisli m a b
Kleisli \(s
s, a
x) -> forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (forall a b. a -> b -> a
const s
s) (a -> m ()
f a
x)
liftSM :: Functor m => (a -> m b) -> Kleisli m (s, a) (s, b)
liftSM :: forall (m :: * -> *) a b s.
Functor m =>
(a -> m b) -> Kleisli m (s, a) (s, b)
liftSM a -> m b
f = forall (m :: * -> *) a b. (a -> m b) -> Kleisli m a b
Kleisli \(s
s, a
x) -> forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (s
s, ) (a -> m b
f a
x)