Shameless self promotion: I made a toy CBPV language in TypeScript. It's purely for pedagogy. The idea is that the implementation is essentially an executable small step semantics, and the interop between language and machine is real purdy.
https://github.com/gatlin/precursor-ts
https://github.com/gatlin/precursor-ts/blob/main/src/ceskm.t...