A simple multithreded chat server in haskell
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Abhinav Sarkar 69a04ab75e Merge pull request #1 from passy/patch-1 7 years ago
app (!! 0) = head 7 years ago
src/Link Adds comments. 8 years ago
test Adds types and a basic server. 8 years ago
.gitignore Adds types and a basic server. 8 years ago
LICENSE Update LICENSE 8 years ago
README.md Adds links to the funconf presentation things. 7 years ago
Setup.hs Adds types and a basic server. 8 years ago
link.cabal Update link.cabal 8 years ago
stack.yaml Adds types and a basic server. 8 years ago


A simple mutli-threaded chat server written in Haskell with support for user-to-user private messaging and channels which users can join and chat in.

This project is the accompanying code for the presentation Introduction To Concurrency In Haskell delivered at Functional Conf 2015, Bangalore. Slides for the same are available here.


Run server:

$ link <port>

Command to the server over TCP:

$ telnet <host> <port>

Commands sent to the server:

  • LOGIN <username> Login with the username
  • QUIT Quit the server
  • MSG <username> <message> Send a private message to a user
  • JOIN <channel> Join a channel
  • LEAVE <channel> Leave a channel
  • TELL <channel> <message> Send a message to a channel
  • NAMES <channel> Get names of all users in a channel
  • PONG Reply to a ping from the server

Messages from the server:

  • LOGGEDIN <username> Confirmation of a login
  • NAMEINUSE <username> Username is already taken
  • MSG <username> <message> A private message from a user
  • NOSUCHUSER <username> You tried to send a message to a non-existent user
  • JOINED <channel> <username> A user joined the channel you have joined
  • LEFT <channel> <username> A user left the channel you have joined
  • NAMES <channel> <username> <username> ... Names of all users in a channel
  • TELL <channel> <username> <message> A message from a channel you have joined
  • PING A ping from the server. Must be replied with a PONG command or else the server will disconnect you.