netwire-5.0.3: Functional reactive programming library
Copyright(c) 2013 Ertugrul Soeylemez
LicenseBSD3
MaintainerErtugrul Soeylemez <[email protected]>
Safe HaskellNone
LanguageHaskell2010

Control.Wire.Core

Description

 
Synopsis

Wires

data Wire s e (m :: Type -> Type) a b where Source #

A wire is a signal function. It maps a reactive value to another reactive value.

Constructors

WArr :: forall e a b s (m :: Type -> Type). (Either e a -> Either e b) -> Wire s e m a b 
WConst :: forall e b s (m :: Type -> Type) a. Either e b -> Wire s e m a b 
WGen :: forall s e a (m :: Type -> Type) b. (s -> Either e a -> m (Either e b, Wire s e m a b)) -> Wire s e m a b 
WId :: forall s e (m :: Type -> Type) a. Wire s e m a a 
WPure :: forall s e a b (m :: Type -> Type). (s -> Either e a -> (Either e b, Wire s e m a b)) -> Wire s e m a b 

Instances

Instances details
Monad m => Category (Wire s e m :: Type -> Type -> Type) Source # 
Instance details

Defined in Control.Wire.Core

Methods

id :: Wire s e m a a #

(.) :: Wire s e m b c -> Wire s e m a b -> Wire s e m a c #

Monad m => Arrow (Wire s e m) Source # 
Instance details

Defined in Control.Wire.Core

Methods

arr :: (b -> c) -> Wire s e m b c #

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

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

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

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

(Monad m, Monoid e) => ArrowChoice (Wire s e m) Source # 
Instance details

Defined in Control.Wire.Core

Methods

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

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

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

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

MonadFix m => ArrowLoop (Wire s e m) Source # 
Instance details

Defined in Control.Wire.Core

Methods

loop :: Wire s e m (b, d) (c, d) -> Wire s e m b c #

(Monad m, Monoid e) => ArrowPlus (Wire s e m) Source # 
Instance details

Defined in Control.Wire.Core

Methods

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

(Monad m, Monoid e) => ArrowZero (Wire s e m) Source # 
Instance details

Defined in Control.Wire.Core

Methods

zeroArrow :: Wire s e m b c #

(Monad m, Monoid e) => Choice (Wire s e m) Source # 
Instance details

Defined in Control.Wire.Core

Methods

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

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

(Monad m, Monoid e) => Strong (Wire s e m) Source # 
Instance details

Defined in Control.Wire.Core

Methods

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

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

Monad m => Profunctor (Wire s e m) Source # 
Instance details

Defined in Control.Wire.Core

Methods

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

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

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

(#.) :: forall a b c q. Coercible c b => q b c -> Wire s e m a b -> Wire s e m a c #

(.#) :: forall a b c q. Coercible b a => Wire s e m b c -> q a b -> Wire s e m a c #

(Monad m, Monoid e) => Alternative (Wire s e m a) Source # 
Instance details

Defined in Control.Wire.Core

Methods

empty :: Wire s e m a a0 #

(<|>) :: Wire s e m a a0 -> Wire s e m a a0 -> Wire s e m a a0 #

some :: Wire s e m a a0 -> Wire s e m a [a0] #

many :: Wire s e m a a0 -> Wire s e m a [a0] #

Monad m => Applicative (Wire s e m a) Source # 
Instance details

Defined in Control.Wire.Core

Methods

pure :: a0 -> Wire s e m a a0 #

(<*>) :: Wire s e m a (a0 -> b) -> Wire s e m a a0 -> Wire s e m a b #

liftA2 :: (a0 -> b -> c) -> Wire s e m a a0 -> Wire s e m a b -> Wire s e m a c #

(*>) :: Wire s e m a a0 -> Wire s e m a b -> Wire s e m a b #

(<*) :: Wire s e m a a0 -> Wire s e m a b -> Wire s e m a a0 #

Monad m => Functor (Wire s e m a) Source # 
Instance details

Defined in Control.Wire.Core

Methods

fmap :: (a0 -> b) -> Wire s e m a a0 -> Wire s e m a b #

(<$) :: a0 -> Wire s e m a b -> Wire s e m a a0 #

(Monad m, IsString b) => IsString (Wire s e m a b) Source # 
Instance details

Defined in Control.Wire.Core

Methods

fromString :: String -> Wire s e m a b #

(Monad m, Monoid b) => Monoid (Wire s e m a b) Source # 
Instance details

Defined in Control.Wire.Core

Methods

mempty :: Wire s e m a b #

mappend :: Wire s e m a b -> Wire s e m a b -> Wire s e m a b #

mconcat :: [Wire s e m a b] -> Wire s e m a b #

(Monad m, Semigroup b) => Semigroup (Wire s e m a b) Source # 
Instance details

Defined in Control.Wire.Core

Methods

(<>) :: Wire s e m a b -> Wire s e m a b -> Wire s e m a b #

sconcat :: NonEmpty (Wire s e m a b) -> Wire s e m a b #

stimes :: Integral b0 => b0 -> Wire s e m a b -> Wire s e m a b #

(Monad m, Floating b) => Floating (Wire s e m a b) Source # 
Instance details

Defined in Control.Wire.Core

Methods

pi :: Wire s e m a b #

exp :: Wire s e m a b -> Wire s e m a b #

log :: Wire s e m a b -> Wire s e m a b #

sqrt :: Wire s e m a b -> Wire s e m a b #

(**) :: Wire s e m a b -> Wire s e m a b -> Wire s e m a b #

logBase :: Wire s e m a b -> Wire s e m a b -> Wire s e m a b #

sin :: Wire s e m a b -> Wire s e m a b #

cos :: Wire s e m a b -> Wire s e m a b #

tan :: Wire s e m a b -> Wire s e m a b #

asin :: Wire s e m a b -> Wire s e m a b #

acos :: Wire s e m a b -> Wire s e m a b #

atan :: Wire s e m a b -> Wire s e m a b #

sinh :: Wire s e m a b -> Wire s e m a b #

cosh :: Wire s e m a b -> Wire s e m a b #

tanh :: Wire s e m a b -> Wire s e m a b #

asinh :: Wire s e m a b -> Wire s e m a b #

acosh :: Wire s e m a b -> Wire s e m a b #

atanh :: Wire s e m a b -> Wire s e m a b #

log1p :: Wire s e m a b -> Wire s e m a b #

expm1 :: Wire s e m a b -> Wire s e m a b #

log1pexp :: Wire s e m a b -> Wire s e m a b #

log1mexp :: Wire s e m a b -> Wire s e m a b #

(Monad m, Num b) => Num (Wire s e m a b) Source # 
Instance details

Defined in Control.Wire.Core

Methods

(+) :: Wire s e m a b -> Wire s e m a b -> Wire s e m a b #

(-) :: Wire s e m a b -> Wire s e m a b -> Wire s e m a b #

(*) :: Wire s e m a b -> Wire s e m a b -> Wire s e m a b #

negate :: Wire s e m a b -> Wire s e m a b #

abs :: Wire s e m a b -> Wire s e m a b #

signum :: Wire s e m a b -> Wire s e m a b #

fromInteger :: Integer -> Wire s e m a b #

(Monad m, Fractional b) => Fractional (Wire s e m a b) Source # 
Instance details

Defined in Control.Wire.Core

Methods

(/) :: Wire s e m a b -> Wire s e m a b -> Wire s e m a b #

recip :: Wire s e m a b -> Wire s e m a b #

fromRational :: Rational -> Wire s e m a b #

stepWire :: Monad m => Wire s e m a b -> s -> Either e a -> m (Either e b, Wire s e m a b) Source #

Perform one step of the given wire.

Constructing wires

mkConst :: forall e b s (m :: Type -> Type) a. Either e b -> Wire s e m a b Source #

Construct a stateless wire from the given signal mapping function.

mkEmpty :: forall e s (m :: Type -> Type) a b. Monoid e => Wire s e m a b Source #

Construct the empty wire, which inhibits forever.

mkGen :: (Monad m, Monoid s) => (s -> a -> m (Either e b, Wire s e m a b)) -> Wire s e m a b Source #

Construct a stateful wire from the given transition function.

mkGen_ :: Monad m => (a -> m (Either e b)) -> Wire s e m a b Source #

Construct a stateless wire from the given transition function.

mkGenN :: Monad m => (a -> m (Either e b, Wire s e m a b)) -> Wire s e m a b Source #

Construct a stateful wire from the given transition function.

mkId :: forall s e (m :: Type -> Type) a. Wire s e m a a Source #

Construct the identity wire.

mkPure :: forall s a e b (m :: Type -> Type). Monoid s => (s -> a -> (Either e b, Wire s e m a b)) -> Wire s e m a b Source #

Construct a pure stateful wire from the given transition function.

mkPure_ :: forall a e b s (m :: Type -> Type). (a -> Either e b) -> Wire s e m a b Source #

Construct a pure stateless wire from the given transition function.

mkPureN :: forall a e b s (m :: Type -> Type). (a -> (Either e b, Wire s e m a b)) -> Wire s e m a b Source #

Construct a pure stateful wire from the given transition function.

mkSF :: forall s a b e (m :: Type -> Type). Monoid s => (s -> a -> (b, Wire s e m a b)) -> Wire s e m a b Source #

Construct a pure stateful wire from the given signal function.

mkSF_ :: forall a b s e (m :: Type -> Type). (a -> b) -> Wire s e m a b Source #

Construct a pure stateless wire from the given function.

mkSFN :: forall a b s e (m :: Type -> Type). (a -> (b, Wire s e m a b)) -> Wire s e m a b Source #

Construct a pure stateful wire from the given signal function.

Data flow and dependencies

delay :: forall a s e (m :: Type -> Type). a -> Wire s e m a a Source #

This wire delays its input signal by the smallest possible (semantically infinitesimal) amount of time. You can use it when you want to use feedback (ArrowLoop): If the user of the feedback depends on now, delay the value before feeding it back. The argument value is the replacement signal at the beginning.

  • Depends: before now.

evalWith :: forall a s e (m :: Type -> Type). Strategy a -> Wire s e m a a Source #

Evaluate the input signal using the given Strategy here. This wire evaluates only produced values.

  • Depends: now.

force :: forall s e (m :: Type -> Type) a. Wire s e m a a Source #

Force the input signal to WHNF here. This wire forces both produced values and inhibition values.

  • Depends: now.

forceNF :: forall a s e (m :: Type -> Type). NFData a => Wire s e m a a Source #

Force the input signal to NF here. This wire forces only produced values.

  • Depends: now.

Utilities

(&&&!) :: (a -> b) -> (a -> c) -> a -> (b, c) Source #

Left-strict version of &&& for functions.

(***!) :: (a -> c) -> (b -> d) -> (a, b) -> (c, d) Source #

Left-strict version of *** for functions.

lstrict :: (a, b) -> (a, b) Source #

Left-strict tuple.

mapWire :: (Monad m', Monad m) => (forall a1. m' a1 -> m a1) -> Wire s e m' a b -> Wire s e m a b Source #

Apply the given monad morphism to the wire's underlying monad.