why is this legal

David Feuer David_Feuer@brown.edu
Fri, 1 Feb 2002 18:03:28 -0500


Hal Daume III wondered:
> f x = f' 0 x
>     where f' acc [] = acc
>           f acc (x:xs) = f' (x+acc) xs

> why are we allowed to rebind f in the where clause?  
this is clearly a
> typo (in this instance) but it seems really strange to 
me that this would
> be allowed.

Because this definition is equivalent to

f x = let f' acc [] = acc
	  f acc (x:xs) = f' (x+acc) xs
      in f' 0 x

More generally (if I am not mistaken...)

g p1 q1 ... | c1 = ...
	    | c2 = ...
            | ....
   where <bindings>

is the same as

g p1 q1 ... = let <bindings>
	      in case () of
		    _ | c1 -> ...
		      | c2 -> ...

This message has been brought to you by the letter alpha and the number pi.