[Haskell-cafe] GHC predictability
Paul Johnson
paul at cogito.org.uk
Tue May 13 14:48:18 EDT 2008
Jeff Polakow wrote:
> [...] This can be easily fixed by defining a suitable strict sum:
>
> sum' = foldl' (+) 0
>
> and now sum' has constant space. We could try to redefine mean using
> sum':
>
> mean1 xs = sum' xs / fromIntegral (length xs)
>
> but this still gobbles up memory. The reason is that xs is used twice
> and cannot be discarded as it is generated.
As an experiment I tried using "pointfree" to see if it would do
something similar.
> $ pointfree "\xs -> foldl' (+) 0 xs / fromIntegral (length xs)"
> ap ((/) . foldl' (+) 0) (fromIntegral . length)
But when I try this in GHCi 6.8.2 I get:
> Prelude Data.List Control.Monad> let mean2 = ap ((/) . foldl' (+) 0)
(fromIntegral . length)
>
> <interactive>:1:12:
> No instance for (Monad ((->) [b]))
> arising from a use of `ap' at <interactive>:1:12-58
> Possible fix: add an instance declaration for (Monad ((->) [b]))
> In the expression: ap ((/) . foldl' (+) 0) (fromIntegral . length)
> In the definition of `mean2':
> mean2 = ap ((/) . foldl' (+) 0) (fromIntegral . length)
Any ideas? Would the auto-generated pointfree version be any better if
it could be made to work?
Paul.
More information about the Haskell-Cafe
mailing list