- fixedpoint :: (node -> [node]) -> (node -> Maybe node -> s -> Maybe s) -> [node] -> s -> s

# Documentation

fixedpoint :: (node -> [node]) -> (node -> Maybe node -> s -> Maybe s) -> [node] -> s -> sSource

Solve the fixed-point of a dataflow problem.

Complexity: O(N+H*E) calls to the update function where: N = number of nodes, E = number of edges, H = maximum height of the lattice for any particular node.

Sketch for proof of complexity:
Note that the state is threaded through the entire execution.
Also note that the height of the latice at any particular node
is the number of times `update`

can return non-Nothing for a
particular node. Every call (except for the top level one)
must be caused by a non-Nothing result and each non-Nothing
result causes as many calls as it has out-going edges.
Thus any particular node, n, may cause in total at
most H*out(n) further calls. When summed over all nodes,
that is H*E. The N term of the complexity is from the initial call
when `update`

will be passed `Nothing`

.