Absent loop structures , flow in Haskell programs is usually expressed as recursion. Thinking about all flow in terms of recursion takes some work , but it turns out to be just as expressive and powerful as the while and for constructs in other languages.