[Haskell-beginners] Cost center annotations - where/let difference
Daniel Seidel
ds at iai.uni-bonn.de
Thu Nov 18 09:02:43 EST 2010
Thanks for the explanation :).
Cheers, Daniel.
On Thu, 2010-11-18 at 14:29 +0100, Daniel Fischer wrote:
> On Thursday 18 November 2010 11:24:24, Daniel Seidel wrote:
> > Hi,
> >
> > I was doing some heap profiles and ran into the following issue.
> >
> > Consider the program fib.hs:
> >
> > module Main where
> >
> > fib i | i == 0 || i == 1 = 1
> >
> > | i > 1 = fib (i-1) + fib (i-2)
> > | otherwise = 0
> >
> > testWhere = {-# SCC "Where" #-} res
> > where res = fib 35
> >
> > testLet = {-# SCC "Let" #-}
> > let res = fib 35
> > in res
> >
>
> >
> > Can anyone please tell me, if this is the expected behavior?
>
> I think so.
> testWhere is equivalent to
>
> testLet2 = let res = fib35 in {-# SCC "Where" #-} res
>
> so the cost centre covers only the result, not the computation.
> To get the computation into the cost centre, use
>
> testWhere = res
> where
> res = {-# SCC "Where" #-} fib 35
>
> which corresponds to
>
> let res = {-# SCC "Whatever" #-} fib 35 in res
>
> > I'm not
> > very experienced in benchmarking and was a bit irritated by that
> > difference.
> >
> > Cheers, Daniel.
>
> Ditto ;)
More information about the Beginners
mailing list