flan/test/programs/dyn-opened.flan

26 lines
1.0 KiB
Plaintext

;;;; A dyn beside a typed value is compared, added and joined as a dyn, in
;;;; either order, whichever conversion asking for the typed value would have
;;;; opened it with — a bool compared with a dyn int is false, not a trap.
(defn as-dyn [d dyn] dyn d)
(defn eqb [b bool d dyn] bool (= b d))
(defn eqi [b i64 d dyn] bool (= b d))
(defn addf [b f64 d dyn] dyn (+ b d))
(defn addi [b i64 d dyn] dyn (+ b d))
(defn mb [o (Option i32) b bool d dyn] dyn (let [v (match o (Some q) b None d)] v))
(defn mb2 [o (Option i32) b bool d dyn] dyn (let [v (match o None d (Some q) b)] v))
(defn ib [c bool b bool d dyn] dyn (let [v (if c b d)] v))
(defn ib2 [c bool b bool d dyn] dyn (let [v (if c d b)] v))
(defn main [] i32
(println (eqb true (as-dyn 1)))
(println (eqb true (as-dyn true)))
(println (eqi 1 (as-dyn 1.0)))
(println (addi 1 (as-dyn 1.5)))
(println (addf 1.0 (as-dyn 2)))
(println (mb None true (as-dyn 5)))
(println (mb2 None true (as-dyn 5)))
(println (ib false true (as-dyn 5)))
(println (ib2 true true (as-dyn 5)))
0)