Funnily enough I took up trying to develop a new MUD engine from scratch in Haskell, with an embedded Lua interpreter for scripting as well.
https://github.com/agentultra/bakamud
And I often stream working on it at https://twitch.tv/agentultra
MUDs are great! Achea is another great one.
Happy gaming folks.
For the longest time MUDs were my standard "learn a new language" project. There's enough meat to expose strengths of the language but overall they're pretty simple.
I love how concise that Haskell code is! I've also started building a new MUD engine, but in Rust (previously I've written a partially complete one in Go), and this time around I'm working on implementing a MUD using an ECS (entity component system).
Some years ago I wrote Haskell bindings to libtelnet ( https://hackage.haskell.org/package/libtelnet ) and a reflex wrapper around them ( https://hackage.haskell.org/package/reflex-libtelnet ).
Perhaps they are useful to you. If you need dependency bounds relaxed or revised to work on modern GHCs, let me know and I'll take a look.