Module Bonsai.Arrow

val arr : ('input -> 'result) -> ('input'result) t
val first : ('input'result) t -> ('input * 'a'result * 'a) t
val second : ('input'result) t -> ('a * 'input'a * 'result) t
val split : ('i1'r1) t -> ('i2'r2) t -> ('i1 * 'i2'r1 * 'r2) t
val extend_first : ('input'result) t -> ('input'result * 'input) t
val extend_second : ('input'result) t -> ('input'input * 'result) t
val (***) : ('i1'r1) t -> ('i2'r2) t -> ('i1 * 'i2'r1 * 'r2) t
val fanout : ('input'r1) t -> ('input'r2) t -> ('input'r1 * 'r2) t
val (&&&) : ('input'r1) t -> ('input'r2) t -> ('input'r1 * 'r2) t
val (^>>) : ('i1 -> 'i2) -> ('i2'result) t -> ('i1'result) t
val (>>^) : ('input'r1) t -> ('r1 -> 'r2) -> ('input'r2) t
val partial_compose_first : ('input'shared * 'output1) t -> ('input * 'shared'output2) t -> ('input'output1 * 'output2) t
val pipe : ('input'r1) t -> into:('intermediate'r2) t -> via:('input -> 'r1 -> 'intermediate) -> finalize:('input -> 'r1 -> 'r2 -> 'r3) -> ('input'r3) t