26 lines
1.0 KiB
Plaintext
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)
|