docs(course): consistency pass

- m04: F# mulberry32 hints and skeleton route * and + through uint64 helpers;
  new 'F# in the browser' note on the Fable uint32 trap
- m01-m05: 'About test names' notes like m06-m11; m00 explains JS vs Scala/F# titles
- m00/m09: first build-web.sh run restores Fable; m09 JS file list (main.js is given)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas WintherandClaude Opus 5.5 committed 2026-10-29 01:17:35 +01:00
1 parent 1a80d57499
commit 82f47fb3ee
7 files changed
+26 -10

No files matched your search

+3 -3
View File
@@ -160,7 +160,7 @@ Each module tells you, in its header, which files you will edit. The map is the
| 06 | `view.js` | `View.scala` | `View.fs` |
| 07 | `io.js` | `IO.scala` | `IO.fs` |
| 08 | `stream.js` | `Stream.scala` | `Stream.fs` |
| 09 | `input.js`, `app.js`, `runtime.js` (+ `browser.js`, `main.js`) | `Input.scala`, `App.scala`, `Runtime.scala` | `Input.fs`, `App.fs`, `Runtime.fs` |
| 09 | `input.js`, `app.js`, `runtime.js`, `browser.js` (`main.js` is given) | `Input.scala`, `App.scala`, `Runtime.scala` | `Input.fs`, `App.fs`, `Runtime.fs` |
| 10 | edits `game`, `input`, `app` | same | same |
| 11 | `pong/` | `pong/` | `Pong/` |
@@ -212,7 +212,7 @@ This is expected, and it is the starting point of every module. In Scala you see
A red test is information, not a verdict. Read it in this order:
1. **The test name.** Test names are sentences written for you: `dropLast leaves its input untouched`. Fixture tests are named after the function and the fixture case: `m03 advance: advance-into-vacating-tail`.
1. **The test name.** Test names are sentences written for you: `dropLast leaves its input untouched`. Fixture tests are named after the function and the fixture case: `m03 advance: advance-into-vacating-tail`. (That is the JavaScript title; JS puts the module in front. Scala and F# print `advance: advance-into-vacating-tail`, and their other titles sometimes use their own track's vocabulary, for example `bind` instead of `flatMap`. The modules quote the JavaScript titles; each module's "About test names" note says how the other tracks differ.)
2. **The message.** `TODO: implement in m03` means you have not written that function yet. An assertion failure shows *expected* versus *actual*: compare them field by field. With game states, the difference is often in one field (`dir`, `seed`, `status`).
3. **The fixture.** For a fixture test, open `fixtures/<module>-<function>.json` and search for the case name. You will see the exact input. Draw it on paper; the boards in fixtures are deliberately tiny (3 x 2, 5 x 5) so that you can.
@@ -280,7 +280,7 @@ You can play the game once Module 9 is done. For reference, this is how:
- **JS:** `node scripts/serve.mjs` from the repository root, then open http://localhost:8000/js/
- **Scala:** `cd scala && ./build-web.sh` (the first run downloads the Scala.js linker), then serve as above and open http://localhost:8000/scala/
- **F#:** `cd fsharp && ./build-web.sh`, serve, and open http://localhost:8000/fsharp/
- **F#:** `cd fsharp && ./build-web.sh` (the first run restores the Fable compiler), serve, and open http://localhost:8000/fsharp/
## Exercises