From: Ben Rudiak-Gould <Benjamin.Rudiak-Gould@cl.cam.ac.uk> Subject: Re: Bang patterns, ~ patterns, and lazy let
Aargh, you're right, it does mean _|_ in mine! That's not very nice.It's also not that case that !x has the same meaning in both proposals, e.g. let { !x = y ; !y = const 'a' x } in x means 'a' in the current proposal but _|_ in yours.
let { !x = const undefined y ; !y = const 'a' x } in yApplying the rules on the wiki, the first step is to translate the first expression into a tuple binding, omitting the implicit ~:
desugars in the current proposal to
let { x = const undefined y ; y = const 'a' x } in x `seq` y `seq` y
which is _|_, but absent implicit ~,
let { x = const undefined y ; y = const 'a' x } in y
had better (and does) mean 'a'.