CLI or embedded in editor, I don’t mind either.
- Tab completion (obviously). Not only for functions/modules/bindings that are in scope, but also when you're in a string and begin typing a path, it will complete the directory names and stuff.
- You can type "h" before a module or function name to read the docs. Similarly, you can do the same with "t" to see type information.
- History of what you've executed, and also a reverse history search feature.
- Not fully "readline compatible", but some basic, standard key bindings work.
- Plenty of handy helper functions.[2]
Of course LISP is the example to look at with REPL: https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93prin...
...esp with Emacs: https://slime.common-lisp.dev/