Thomas, Stefan,

Thanks for a most edifying exchange! i will reflect on this.

Best wishes,

--greg

On 6/28/07, Stefan Holdermans <[EMAIL PROTECTED]> wrote:

Thomas,

>   let x = ... in ...
>
> is only equal
>
>   do x <- ...; ...
>
> in the Identity monad.  Also, why would "do" be more primitive than
> "let".  That way you would have to use monads everywhere.  Also,
> let is treated specially by the type checker (IIRC) and there are
> many, many other reasons not to do that.

As you already hinted at in a later message, this has to do with let-
bindings being potentially polymorphic and monadic bindings being
necessarily monomorphic:

   import Control.Monad.Identity
   foo =               let id =          \x -> x  in        (id 'x',
id 42) -- well-typed
   bar = runIdentity $ do  id <- return (\x -> x) ;  return (id 'x',
id 42) -- ill-typed

Cheers,

   Stefan




--
L.G. Meredith
Managing Partner
Biosimilarity LLC
505 N 72nd St
Seattle, WA 98103

+1 206.650.3740

http://biosimilarity.blogspot.com
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to