Subset

Cross-product

Conclusion

Higher order functions (i.e. all, forAll)

Sections (`elem` xs) being equal to \x -> elem x xs

Infix operators such as + and `elem`, along with priorities

Beautiful syntax



Lazy evaluation can make some operators more efficient (but is not incredibly important)



As part of my PhD, one thing I've been doing recently is specifying and working with set theory operations. Haskell is the perfect language for this, because in most cases the set theory can be implemented almost directly. Let's take a few examples to show how neat Haskell is at this.I've done all the set theory in LaTeX - I guess most people who know set theory probably know LaTeX as well! I've also used xs/ys for sets, and x/y for elements from the sets. Although this isn't the way most mathematics would have been written, it does actually make it a bit more readable with some explicit typing :)Subset is defined as:xs \subset ys = \forall x \in xs, x \in yssubset xs ys = all (\x -> x `elem` ys) xssubset xs ys = all (`elem` ys) xsThe first version is the direct translation. We can of course make Haskell a bit closer to set theory with:forAll = flip allNow we have:subset xs ys = forAll xs (`elem` ys)That is a pretty direct translation of the mathematics.One operation I wanted to specify recently was:merge xs ys = { c | \exists x \in xs, \exists y \in ys, c = x <> y}(where <> is an operation I had defined myself)This time you can use Haskell's list comprehensions to obtain a translation:merge xs ys = [x <> y | xIn this case the Haskell is actually shorter the the corresponding mathematics.I could give more examples of where the mathematics and the Haskell overlap closely, but they are almost too easy.Almost every piece of set theory that I've tried to define in Haskell comes out looking very much like the original. This closeness allows me to work in mathematics, and then translate things to Haskell easily without worrying about having made mistakes in the translation.The facilities of Haskell that make the set theory translation so direct include: