strict Haskell dialect
Ben Rudiak-Gould
Benjamin.Rudiak-Gould at cl.cam.ac.uk
Sat Feb 4 08:22:48 EST 2006
Wolfgang Jeltsch wrote:
> Since laziness often allows you to solve problems so elegantly, I'm really
> scared of the idea of a "Strict Haskell"! :-( Is laziness really so "unreal"
> that real-world programmers have to see it as an enemy which they have to
> fight against?
Non-strictness gives you some useful guarantees about program behavior, but
strictness also gives you useful guarantees. Strict datatypes are
inductively defined (at least in SML), which means that you can prove useful
properties of functions defined inductively over them. Consider length ::
[a] -> Int. In SML you can prove that this terminates and returns an Int for
any list. In Haskell, you can't prove anything about this function. It might
return an Int after unboundedly many reductions, or it might diverge, or it
might throw any exception whatsoever. In my experience exceptions are less
useful in Haskell than in other languages for this reason. The dynamic
execution stack that's used for exception handling isn't apparent from the
static structure of the code. Exception specifications in the style of Java
or C++ simply couldn't be made to work in Haskell.
All of the above applies only to non-strict data, though. I don't know of
any theoretical disadvantages of non-strict let/where binding, just the
usual practical problems (constant factors in the time complexity and tricky
space complexity).
Personally I'd like to see Haskell become "the world's finest strict
language" just as it's already "the world's finest imperative language". I
think I know how to mix strictness and nonstrictness at the implementation
level [1], but I don't know how best to expose it in Haskell.
-- Ben
[1] http://research.microsoft.com/Users/simonpj/papers/not-not-ml/index.htm
More information about the Haskell-prime
mailing list