(>> 8 [expt _ 5] - [take-away _ 'monkeys] [prn _ "monkeys left"])
(def >> (parm . args) (if (no args) parm (apply >> ((car args) parm) (cdr args))))
(def >> (parm . args) ((afn (parm args) (if (no args) parm (self ((car args) parm) (cdr args)))) parm args))
-----
(def >> args (rreduce (fn (a b) a.b) rev.args))
(def >> args ; throw an error here so that user won't get ; mysterious errors in the 'reduce part (if (no args) (err "'>> requires at least one argument")) (reduce (fn (a b) b.a) args))
(def >> (val . (f . rest)) (if rest (apply >> (f val) rest) (f val)))
(>> 1 [* 20 _] prn [* 2 _] prn [/ _ 8])