(local {: pprint} (require :lib.tableprint)) (let [{ : Either : Left : Right } (require :lib.either)] ;; either ;(print "Either Inspection") ;(pprint Either) ;; you can set and get values (let [ v :poop x (Either:new v)] (assert (= v x.value) (.. "The value is " v))) (let [r (Right:new "rain") map (r:map #(.. "b" $1)) expected :brain actual (. map :value) ] (assert (= expected actual) "You can map a Right value")) (let [l (Left:new "rain") map (l:map #(.. "b" $1)) expected :rain actual (. map :value) ] (assert (= expected actual) "You can NOT map a Left value")) (let [e (Either.of "rank") map (e:map #(.. "f" $1)) expected :frank actual (. map :value) ] (assert (= expected actual) "You can map a Either.of")) )