Hi!
For some of your ideas, let me suggest looking at CodeWorld, at
http://code.world. I use it to teach middle school students, ages around 11 to 14. It has some of the properties you are looking for. Notably:
- No type classes are defined in the standard library.
- It offers a fully polymorphic equality operator, with no type class constraint. (This is implemented with runtime-aware logic specific to GHCJS.)
- It avoids the need for many other type classes by simplifying the available types. For instance, there is one Number type so that math operators are monomorphic. Comparison operators only work on Number, and there are separate monomorphic "Show"-like functions for different types.
- The prelude is uncurried, because accidentally partially applying a function is another mistake that new programmers make that can lead to poor error messages.
- A pre-compile step enforces that function application should use parentheses around arguments. CodeWorld is designed to be used with a math-like notation -- such as "f(x)" -- rather than just "f x".
- There are post-processing rules that rewrite some error messages to be beginner-friendly.
This is likely not *exactly* what you want. For instance, there is no REPL at all, and programs are designed to be run in a web browser panel (and soon exported to Android) rather than used from the command line. But it might be a source of ideas for what is possible to accomplish on top of GHC.
Hope that helps,
Chris