Introduction to Computation : Haskell Logic and Automata