Jim, Does your Haskell code have the automatic enumerating of all possibilities, or is it simply checking the truth of the initial assertion of where each person lives?
The Prolog enumerates and selects by an automatic backtracking mechanism, while the Lisp I believe does an expansion on the list elements (the first let statement) and culls only those possibilities that meet the constraints.
The difference between declarative (Prolog) and functional (Lisp) programming right there.
I am bringing this up because what I am going to try to do with the ENSO analysis is write a Prolog rule that will automatically test all the lunisolar frequencies and apply biennial and yearly modulation sideband splits to those frequencies and determine where they best align with the ENSO spectra. This will use recursion as the splits can propagate.
Data analysis is often exploratory analysis and that's one of the reasons I am using a language with all the search mechanisms ready to apply.