-- | Haskell implementations of hydra/lib/flows primitives

module Hydra.Lib.Flows where

import Hydra.Kernel


apply :: Flow s (a -> b) -> Flow s a -> Flow s b
apply :: forall s a b. Flow s (a -> b) -> Flow s a -> Flow s b
apply = forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
(<*>)

bind :: Flow s a -> (a -> Flow s b) -> Flow s b
bind :: forall s a b. Flow s a -> (a -> Flow s b) -> Flow s b
bind = forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
(>>=)

map :: (a -> b) -> Flow s a -> Flow s b
map :: forall a b s. (a -> b) -> Flow s a -> Flow s b
map = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap

pure :: a -> Flow s a
pure :: forall a s. a -> Flow s a
pure = forall (m :: * -> *) a. Monad m => a -> m a
return