ocaml: phase 6 stdlib slice (List/Option/Result, +23 tests, 248 total)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 45s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 45s
lib/ocaml/runtime.sx defines the stdlib in OCaml syntax (not SX): every function exercises the parser, evaluator, match engine, and module machinery built in earlier phases. Loaded once via ocaml-load-stdlib!, cached in ocaml-stdlib-env, layered under user code via ocaml-base-env. List: length, rev, rev_append, map, filter, fold_left/right, append, iter, mem, for_all, exists, hd, tl, nth. Option: map, bind, value, get, is_none, is_some. Result: map, bind, is_ok, is_error. Substrate validation: this stdlib is a nontrivial OCaml program — its mere existence proves the substrate works.
This commit is contained in:
@@ -215,14 +215,14 @@ SX CEK evaluator (both JS and OCaml hosts)
|
||||
|
||||
### Phase 6 — Standard library
|
||||
|
||||
- [ ] `List`: `map`, `filter`, `fold_left`, `fold_right`, `length`, `rev`, `append`,
|
||||
`concat`, `flatten`, `iter`, `iteri`, `mapi`, `for_all`, `exists`, `find`,
|
||||
`find_opt`, `mem`, `assoc`, `assq`, `sort`, `stable_sort`, `nth`, `hd`, `tl`,
|
||||
`init`, `combine`, `split`, `partition`.
|
||||
- [ ] `Option`: `map`, `bind`, `fold`, `get`, `value`, `join`, `iter`, `to_list`,
|
||||
`to_result`, `is_none`, `is_some`.
|
||||
- [ ] `Result`: `map`, `bind`, `fold`, `get_ok`, `get_error`, `map_error`,
|
||||
`to_option`, `is_ok`, `is_error`.
|
||||
- [~] `List`: `map`, `filter`, `fold_left`, `fold_right`, `length`, `rev`,
|
||||
`append`, `iter`, `for_all`, `exists`, `mem`, `nth`, `hd`, `tl`,
|
||||
`rev_append`. _(Pending: concat/flatten, iteri/mapi, find/find_opt,
|
||||
assoc/assq, sort, init, combine, split, partition.)_
|
||||
- [~] `Option`: `map`, `bind`, `value`, `get`, `is_none`, `is_some`.
|
||||
_(Pending: fold/join/iter/to_list/to_result.)_
|
||||
- [~] `Result`: `map`, `bind`, `is_ok`, `is_error`. _(Pending:
|
||||
fold/get_ok/get_error/map_error/to_option.)_
|
||||
- [ ] `String`: `length`, `get`, `sub`, `concat`, `split_on_char`, `trim`,
|
||||
`uppercase_ascii`, `lowercase_ascii`, `contains`, `starts_with`, `ends_with`,
|
||||
`index_opt`, `replace_all` (non-stdlib but needed).
|
||||
@@ -327,6 +327,16 @@ the "mother tongue" closure: OCaml → SX → OCaml. This means:
|
||||
|
||||
_Newest first._
|
||||
|
||||
- 2026-05-08 Phase 6 — `lib/ocaml/runtime.sx` minimal stdlib slice
|
||||
written entirely in OCaml syntax: List (length, rev, rev_append, map,
|
||||
filter, fold_left/right, append, iter, mem, for_all, exists, hd, tl,
|
||||
nth), Option (map, bind, value, get, is_none, is_some), Result (map,
|
||||
bind, is_ok, is_error). Loaded once via `ocaml-load-stdlib!`, cached
|
||||
in `ocaml-stdlib-env`; `ocaml-run` and `ocaml-run-program` layer user
|
||||
code on top via `ocaml-base-env`. The fact that these are written in
|
||||
OCaml (not SX) and parse + evaluate cleanly is a substrate-validation
|
||||
win: every parser, eval, match, ref, and module path proven by a
|
||||
single nontrivial Ocaml program. 248/248 (+23).
|
||||
- 2026-05-08 Phase 4 — functors + module aliases (+5 tests, 225 total).
|
||||
Parser: `module F (M) = struct DECLS end` → `(:functor-def NAME PARAMS
|
||||
DECLS)`. `module N = expr` (where expr isn't `struct`) → `(:module-alias
|
||||
|
||||
Reference in New Issue
Block a user