I don't know if it technically qualifies as a REPL[1], but I really enjoy Elixir's interactive console, IEx. What I like about it:<p>- 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.<p>- 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.<p>- History of what you've executed, and also a reverse history search feature.<p>- Not fully "readline compatible", but some basic, standard key bindings work.<p>- Plenty of handy helper functions.[2]<p>[1] <a href="https://ferd.ca/repl-a-bit-more-and-less-than-that.html" rel="nofollow noreferrer">https://ferd.ca/repl-a-bit-more-and-less-than-that.html</a><p>[2] <a href="https://hexdocs.pm/iex/1.13/IEx.Helpers.html" rel="nofollow noreferrer">https://hexdocs.pm/iex/1.13/IEx.Helpers.html</a>
Ruby's IRB has always been nice to work with: <a href="https://github.com/ruby/irb#commands">https://github.com/ruby/irb#commands</a><p>Of course LISP is the example to look at with REPL: <a href="https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop#Lisp_specifics" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93prin...</a><p>...esp with Emacs: <a href="https://slime.common-lisp.dev/" rel="nofollow noreferrer">https://slime.common-lisp.dev/</a>