The main idea behind this book is to encourage readers to approach 
 mathematical domains from a functional programming perspective: to 
 identify the main functions and types involved and, when necessary, to 
 introduce new abstractions; to give calculational proofs; to pay 
 attention to the syntax of the mathematical expressions; and, finally, 
 to organize the resulting functions and types in domain-specific languages.
 The book is recommended for developers who are learning mathematics and 
 would like to use Haskell to make sense of definitions and theorems. It 
 is also a book for the mathematically interested who wants to explore 
 functional programming and domain-specific languages. The book helps put 
 into perspective the domains of Mathematics and Functional Programming 
 and shows how Computer Science and Mathematics are usefully taught together.