Implementation of the rules of Love Letter

Latest on Hackage:

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

Apache-2.0 licensed by Jonathan M. Lange
Maintained by jml@mumak.net


Haverer is a simple implementation of the excellent card game, Love Letter.

It follows the original Japanese rules, rather than the newer American ones.


At the moment, you’ll need to compile from source, which means you’ll need to get set up with cabal. The easiest way to do this is to install the Haskell Platform.

Once you’ve done that, run the following commands:

$ git clone https://github.com/jml/haverer.git
$ cd haverer
$ cabal sandbox init
$ cabal configure
$ cabal install --dependencies-only
$ cabal run

That last command, cabal run, will run a command-line version of the game.


This code is copyright Jonathan M. Lange, 2014-2015, and is made available under the Apache License, version 2.0. See LICENSE for details.


  1. Procrastinate endlessly learning new Haskell tricks
  2. Wrap this whole thing in an API server
  3. Make that server available to the public
  4. Put a nice-ish web frontend in front


Please file issues on the Github issue tracker


Are most welcome.


The original implementation of this game is called loveletter and is written in Rust.


Thanks to the following people, who have helped with advice, kindness, or by patiently smiling and nodding while I’ve rambled on about this project:

  • metagnome
  • RAOF
  • @mithrandi
  • pjdelport
  • tomprince
  • radix
  • teh
  • simpson
  • joliette

Any infelicities are my own.

If you are one of these people and would like to be referred to in another way (perhaps you’d like me to link to your Github page?), please contact me. You know how.

Changes - 2015-06-08

  • PlayerSet moved to new module, Haverer.PlayerSet
  • PlayerSet now implements Foldable and Traversable
  • New rotate and randomize methods for PlayerSet - 2015-06-08

  • Deck uses associated types for whether or not it is complete
  • New FullType alias for Deck 'Complete
  • Burn card is the first card from the deck, rather than the first card after players have been dealt.
  • Burn card is now available for finished rounds (Haverer.Round.getBurnCard)
  • A list of survivors of each round can be obtained, once the round is over (Haverer.Round.survivors) - 2015-06-07

Initial release.

comments powered byDisqus