On Oct 6, 2010, at 5:39 AM, Simon Marlow wrote:

> A slightly different suggestion from Simon PJ and myself (we agreed on 
> something syntax-related :-) is the following:
> 
>  \case 1 -> f
>       2 -> g
> 
> where the two-token sequence '\ case' introduces a new optional layout 
> context, the body of which is exactly the same as in a case expression.  So 
> you could also write
> 
>  \case { 1 -> f; 2 -> g }
> 
> if you want.  Guards are allowed of course.

> * a bit more noisy than just \:  I'm not sure what the
>   ramifications of having \ introduce a layout context
>   on its own would be, but I suspect there would be difficulties.
>   Certainly some existing code would fail to parse, e.g.
> 
>   (case e of [] -> \x -> x+1; (x:xs) -> \x -> x+2)

\ introducing a layout context is a no-go because, as in the example given, it 
breaks too much code. However, \case as described is somewhat less powerful. In 
particular, \ with a layout context lets us have multi-argument pattern 
matching, while both \case and "case of" give only single argument pattern 
matching. I don't know if the extra functionality is that important, but I 
don't see why we can't provide for it anyway, as in:

\case (x:xs) n -> go xs; _ n -> n;

Cheers,
Sterl._______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to