[Haskell-cafe] Type inference for lambda function

Ben Franksen ben.franksen at online.de
Mon Nov 1 07:06:16 UTC 2021


Am 01.11.21 um 06:10 schrieb Viktor Dukhovni:
> On Mon, Nov 01, 2021 at 12:54:47AM -0400, David Feuer wrote:
> 
>> It would silently change behavior of some programs, yes. It could also make
>> them slower under some circumstances. But anyone relying on the
>> monomorphism restriction to choose types for their program should change
>> their ways regardless. Top level type signatures aren't that hard to write.
> 
> It isn't just, or even primarily top level signatures.  It is more often
> let bindings that will lack a signature, and frankly I'd rather have
> the restriction in place.
> 
> When your type fails to generalise and code does not compile, the
> solution is not hard to find.  When let-bound expressions cease
> to be CAFs, and start being evaluated repeatedly, rather than
> just once, that's substantially harder to find and diagnose.
> 

Good point. I have a question, since the wording in the Haskell 2010 
Report is pretty complicated:

Is it really guaranteed that a declaration of the form

   var = closed_expr

(where closed_expr contains no free variables) without a type signature 
compiles to a CAF? I.e. is evaluated only once?

Assuming this is is the case I admit there is justification for the MR.

Other solutions are possible, though, for instance the compiler could 
issue a warning, ideally together with a hint that you may want to add a 
type signature to make your intention clear: either you want a CAF or 
the most general type; you can't have both.

Cheers
Ben
-- 
I would rather have questions that cannot be answered, than answers that
cannot be questioned.  -- Richard Feynman




More information about the Haskell-Cafe mailing list