CodePlexProject Hosting for Open Source Software

F# library for creating bindable variables and dataflow computations. Computed variables can be ordered in a way that prevents unnecessary recomputations.

Overview of functions

WORK IN PROGRESS

From the sample:

let resComp = comp { let! a1, a2 = arg1num, arg2num match a1, a2 with | None, None -> return ErrorMessage "Arguments 1 and 2 are not valid integers." | None, _ -> return ErrorMessage "Argument 1 is not a valid integer." | _, None -> return ErrorMessage "Argument 2 is not a valid integer." | Some a1v, Some a2v -> let! o = op match o with | Operation.Add -> return Result (a1v + a2v) | Operation.Subs -> return Result (a1v - a2v) | Operation.Mult -> return Result (a1v * a2v) | Operation.Div -> return if a2v = 0I then ErrorMessage "Cannot divide by 0." else DivResult (a1v / a2v, a1v % a2v) | _ -> () }This computation expression creates a bound variable which does not react to changes in op (the variable containing the selected operation) by automatic desubscribing if one of the arguments is currently invalid.

FsFlow is not event-based like Rx but uses a breadth-first traversal if computations are defined in the correct order, so there are no multiple updates from a single change or batch of changes (you can delay refresh using Flow.defer()).

Current state: ALPHA

Planned: Reactive collections, optimalization, documentation

Last edited May 19, 2013 at 7:30 PM by JankoA, version 7