42 lines
1.3 KiB
OCaml
42 lines
1.3 KiB
OCaml
(** The milestone-2 prelude, written in Flan.
|
|
|
|
Printing is deliberately *not* a primitive (plan.org, Milestone-2
|
|
primitives): [write-stdout] is the one output primitive and everything
|
|
above it is Flan. That is what keeps a second backend cheap — a primitive
|
|
is the only thing implemented twice.
|
|
|
|
It lives here as a string rather than as a file because there is no package
|
|
loader yet; at milestone 3 it becomes an ordinary [core:] package and this
|
|
module goes away. The acceptance programs may call anything defined here.
|
|
|
|
No overloading: [print-f64] and [print-str] name the type, because
|
|
compile-time overloading before the checker is stable is how a small
|
|
language stops being one. A single [println] is milestone 5. *)
|
|
|
|
let source = {flan|
|
|
(defn print-bytes [b [u8]]
|
|
(write-stdout b))
|
|
|
|
(defn print-str [s string]
|
|
(write-stdout (bytes s)))
|
|
|
|
(defn print-f64 [x f64]
|
|
(write-stdout (f64->bytes x)))
|
|
|
|
(defn print-i64 [x i64]
|
|
(write-stdout (i64->bytes x)))
|
|
|
|
(defn newline []
|
|
(write-stdout (bytes "\n")))
|
|
|
|
;; Prints s and then a newline. Takes a string, not an Option or an any —
|
|
;; there is nothing to dispatch on yet.
|
|
(defn print-line [s string]
|
|
(print-str s)
|
|
(newline))
|
|
|flan}
|
|
|
|
let file = "<prelude>"
|
|
|
|
let forms () = Reader.read_all ~file source
|