;;;; A literal arm takes its type from the arm that is not a literal, in an ;;;; if, a cond and a match alike, as a literal operand of + does. (defn g [c bool n i64] i64 (let [x (if c 4000000 n)] x)) (defn h [k i32 n i64] i64 (let [x (cond (= k 0) 5000000000 (= k 1) 7 :else n)] x)) (defn m [o (Option i64)] i64 (let [x (match o None 3 (Some v) v)] x)) (defn f32s [c bool y f32] f32 (let [x (if c 2.5 y)] x)) (defn main [] i32 (println (g true (i64 3))) (println (g false (i64 9000000000))) (println (h 0 (i64 1))) (println (h 1 (i64 1))) (println (h 2 (i64 9000000000))) (println (m None)) (println (m (Some (i64 9000000000)))) (println (f32s true (f32 1.0))) 0)