0 | module ControlFlow.Edge
4 | export infix 6 ~>
, <~
14 | (<~) : a -> a -> Edge a
19 | Dest (from ~> to) = to
22 | Origin : Edge a -> a
23 | Origin (from ~> to) = from
25 | export infix 8 ~~>
, ~>>
, <~~
, <<~
29 | (~~>) : (vs : List a) -> (v : a) -> List (Edge a)
30 | vs ~~> v = map (~> v) vs
34 | (~>>) : (v : a) -> (vs : List a) -> List (Edge a)
35 | v ~>> vs = map (v ~>) vs
39 | (<~~) : (v : a) -> (vs : List a) -> List (Edge a)
44 | (<<~) : (vs : List a) -> (v : a) -> List (Edge a)
50 | collect_concat : (v : a) -> (vs, ws : List a) -> (vs ++ ws) ~~> v = vs ~~> v ++ ws ~~> v
51 | collect_concat v vs ws = map_concat {f = (~> v)} vs ws
56 | distribute_concat : (v : a) -> (vs, ws : List a) -> v ~>> (vs ++ ws) = v ~>> vs ++ v ~>> ws
57 | distribute_concat v vs ws = map_concat {f = (v ~>)} vs ws
61 | collect_append : (v : a) -> (vs : List a) -> (w : a) -> (vs ++ [w]) ~~> v = vs ~~> v ++ [w ~> v]
62 | collect_append v vs w = collect_concat v vs [w]
66 | distribute_append : (v : a) -> (vs : List a) -> (w : a) -> v ~>> (vs ++ [w]) = v ~>> vs ++ [v ~> w]
67 | distribute_append v vs w = distribute_concat v vs [w]