I don't mind recursive *functions*. It's recursive definition of single computed values that looked odd to me. Lazy evaluation makes all the difference. Looking at b= f a c c = f a b I was thinking, "how can it figure out what b and c need to be?" because I'm used to this meaning that it needs to come up with an actual value right now.