(.module: lux (lux (control pipe) (data [bit] [number] text/format) [macro "meta/" Monad]) [//] (// [".T" runtime]) (luxc (lang (host [js #+ JS Expression Statement])))) (def: #export translate-bool (-> Bool (Meta Expression)) (|>> %b meta/wrap)) (def: low-mask Nat (dec (bit.left-shift +32 +1))) (def: #export (translate-int value) (-> Int (Meta Expression)) (let [high (|> value (bit.logical-right-shift +32) %i) low (|> value (bit.and low-mask) %i)] (meta/wrap (format runtimeT.int//new "(" high "," low ")")))) (def: #export translate-frac (-> Frac (Meta Expression)) (|>> (cond> [(f/= number.positive-infinity)] [(new> "Infinity")] [(f/= number.negative-infinity)] [(new> "-Infinity")] [(f/= number.not-a-number)] [(new> "NaN")] ## else [%f]) meta/wrap)) (def: #export translate-text (-> Text (Meta Expression)) (|>> %t meta/wrap))