More from the list monad

Prelude Control.Monad> let truthPermutations n = replicateM n [False,True]
Prelude Control.Monad> truthPermutations 3
[[False,False,False],[False,False,True],[False,True,False],[False,True,True],
[True,False,False],[True,False,True],[True,True,False],[True,True,True]]
Prelude Control.Monad> let satisfies p [x,y,z] = p x y == z
Prelude Control.Monad> filter (satisfies (==>)) $ truthPermutations 3
[[False,False,True],[False,True,True],[True,False,False],[True,True,True]]

Try expressing truth tables so succinctly and at such a high level in an imperative language. The list monad rocks.

Leave a Reply