I would like to respond to John's note. My response is largely positive, though I disagree with a couple of points. >However, it is an independent question whether or not strictness annotations >should be applicable to function types. And this is where I disagree with >the committee. To quote `Introducing Haskell 1.3', > > Every data type, except ->, is a member of the Data class. > >In other words, in Haskell 1.3 > > FUNCTIONS ARE NOT FIRST-CLASS CITIZENS I cannot agree here. Functions are not members of the equality class either, but that does not demote them to second class citizens. However, John may be right in suggesting that people will become more reluctant to use functions as values if they cannot force their evaluation. >I see a very great cost in such a philosophical change, and I do not see >that the arguments against strictly evaluating function values are so very >compelling. > > Implementation difficulties? hbc has provided it for years, and > even under the STG machine is the problem so very much harder than handling > shared partial applications correctly? I haven't checked hbc, but I would be interested if someone would confirm that function strictify works properly. It didn't use to in LML. > Semantic difficulties? The semantics of lifted function spaces are > perfectly well defined. OK, so it's not the exponential of a CCC --- but > Haskell's tuples aren't the product either, and I note the proposal to > change that has fallen by the wayside. This is probably an important point. I see there being value in two sorts of functions: lifted and non-lifted (or equivalently boxed and unboxed). A lifted function may be expressed as a computation which delivers a function, just like lifted integers are computations which deliver integers. Under this view it would be entirely in keeping with the rest of Haskell for the standard functions to be lifted, and to leave open the possibility in the future of introducing unlifted functions. >So here's my proposal: change `Introducing Haskell 1.3' to read > > Every data type, including ->, is a member of the Data class. I am inclined to agree. Is there a problem then that every type is in Data? Not at all. The Data class indicates that forcing has been used in the body of an expression. This is valuable information that is exposed in the type. John.

- Haskell 1.3 ian
- Haskell 1.3 ian
- Haskell 1.3 ian
- Re: Haskell 1.3 kh
- Haskell 1.3 "John C. Peterson"
- Re: Haskell 1.3 John Hughes
- Re: Haskell 1.3 John Launchbury
- Re: Haskell 1.3 wadler
- Haskell 1.3 Philip Wadler
- Re: Haskell 1.3 Lennart Augustsson
- Re: Haskell 1.3 Lennart Augustsson
- Re: Haskell 1.3 Philip Wadler
- Re: Haskell 1.3 Magnus Carlsson
- Re: Haskell 1.3 Ron Wichers Schreur
- Haskell 1.3 Frank Christoph
- Re: Haskell 1.3 peterson-john