foldr : ('a -> 'b -> 'c -> 'c) -> ('a, 'b) func -> 'c -> 'c
f x1 y1 (f x2 y2 (f x3 y3 (f ... (f xn yn a) ... )))
# let f = (1 |-> 2) (2 |=> 3);; val f : (int, int) func =# graph f;; val it : (int * int) list = [(1, 2); (2, 3)] # foldr (fun x y a -> (x,y)::a) f [];; val it : (int * int) list = [(2, 3); (1, 2)]