Module

Concur.Core.FRP

Package
purescript-concur-react
Repository
ajnsit/purescript-concur

#Signal Source

type Signal v a = Cofree (Widget v) a

Poor man's FRP implementation for Concur. I am experimenting with the smallest possible amount of FRP which can still be useful. A Widget can be considered to be a one-shot Event. (There is no stream of events in Concur). Signals then are never-ending widget loops that allow access to their last return value. This last produced value allows composition with other widgets even for never-ending widgets.

#step Source

step :: forall a v. a -> Widget v (Signal v a) -> Signal v a

Construct a signal from an initial value, and a step widget

#display Source

display :: forall v. Widget v (Signal v Unit) -> Signal v Unit

#always Source

always :: forall a v. Monoid v => a -> Signal v a

A constant signal

#update Source

update :: forall a v. Signal v a -> Widget v (Signal v a)

Update signal to a new value

#poll Source

poll :: forall a v. Signal v (Widget v a) -> Widget v (Signal v a)

Construct a signal by polling a signal with a nested widget for values

#hold Source

hold :: forall a v. Monoid v => a -> Widget v a -> Signal v a

Create a signal which repeatedly invokes a widget for values. E.g. signal False checkbox will return a signal which reflects the current value of the checkbox.

#loopW Source

loopW :: forall a v. a -> (a -> Widget v a) -> Signal v a

Create a signal which repeatedly invokes a widget function for values, looping in the prev value.

#loopS Source

loopS :: forall a v. Monoid v => a -> (a -> Signal v a) -> Signal v a

Loop a signal so that the return value is passed to the beginning again.

#foldp Source

foldp :: forall b a v. (a -> b -> a) -> a -> Signal v b -> Signal v a

Loop a signal so that the return value is passed to the beginning again. Folding signals. Similar to how signals used to work in Elm. This can be used to implement simple stateful Signals. e.g. counter = fold (\n _ -> n+1) 0 clicks

#dyn Source

dyn :: forall b a v. Signal v a -> Widget v b

Consume a closed signal to make a widget

#oneShot Source

oneShot :: forall a v. Signal v (Maybe a) -> Widget v a

Run a signal once and return its value

#demand Source

demand :: forall a v. Signal v (Maybe a) -> Widget v a

#demand' Source

demand' :: forall a v. (Maybe a -> Signal v (Maybe a)) -> Widget v a

#demandLoop Source

demandLoop :: forall s a v. Monoid v => s -> (s -> Signal v (Either s a)) -> Widget v a

#stateLoopS Source

stateLoopS :: forall s a v. Monoid v => s -> (s -> Signal v (Either s a)) -> Signal v (Maybe a)