15 Mar
2002
15 Mar
'02
4:23 a.m.
On Thu, 14 Mar 2002, Brian Huffman wrote:
In Haskell you can produce the desired behavior by using pattern guards. Since the pattern guards always get evaluated before the result does, they can be used to make things more strict. Here is the foldl example:
strict x = seq x True
foldl' :: (a -> b -> a) -> a -> [b] -> a foldl' f z [] = z foldl' f z (x:xs) | strict z = foldl' f (f z x) xs
You can make multiple arguments strict by using && or similar, e.g.:
f x y | strict x && strict y = ... f x y | all strict [x,y] = ...
Of course, with the second example x and y must have the same type. Hope this helps.
- Brian Huffman
Thanks! that looks like a great haskell idiom to use! Jay Cox