[Haskell-cafe] Re: [Haskell] lazy constructors
br276 at cl.cam.ac.uk
Wed Oct 13 10:31:05 EDT 2004
Serge D. Mechveliani wrote:
> As the types are resolved before the computation, as the above
> program shows, how can addToSPair expect anything besides a string
> pair? Why tilda is not a default?
Haskell pairs are "lifted", meaning that they also include an extra
value (bottom) which doesn't match (x,y). Not everyone is convinced that
this is a good idea, but it's the way things are at present.
> The only doubt may be the matching of (xs, ys) against bottom ::
> (String, String) Is not this natural to have a result as (bottom ::
> String, bottom :: String) -- = xs = ys and compute further?
Possibly in this case, yes. But not in general, since there might be
other data constructors also.
> What will occur if all the Haskell programmers set `~' before each
> data constructor in each pattern in their existing programs?
Things won't work as you'd expect. For example, if you defined
null :: [a] -> Bool
null list =
case list of
~(x:xs) -> False
~ -> True
you would find that (null ) is False, not True, because the first
pattern matches irrefutably. Pattern matching needs to be strict so that
case statements like this work sensibly.
> As the types are recognized before the computation, the programs will
> remain safe and will become considerably faster. For example, the
> above program of g1 becomes a billion times faster. I wonder.
Actually using irrefutable patterns tends to make a program slower, not
faster, because it makes the program less strict.
More information about the Haskell-Cafe