Just try compiling and running Animals.hs for a simple example.
It might take a long time to compile (i.e a few minutes). I'm not too sure what I can do to improve that
Based on a paper by Oleg Kiselyov (which I can't be bothered finding again). It's a bit simpler (but borrows his notation), makes excessive use of type families, and has logarithmic method lookup-time instead of the linear time that Oleg had.