why is this legal

Hal Daume III hdaume@ISI.EDU
Fri, 1 Feb 2002 15:06:06 -0800 (PST)


then, why are we allowed to rebind f in a let clause :)

--
Hal Daume III

 "Computer science is no more about computers    | hdaume@isi.edu
  than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume

On Fri, 1 Feb 2002, David Feuer wrote:

> 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.
> 
> 
> _______________________________________________
> Haskell mailing list
> Haskell@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell
>