[Haskell-cafe] types and number of evaluation steps
me at rkit.pp.ru
Sat Feb 18 13:42:57 CET 2012
+ on Int is extremely cheap. It is always faster to add again rather
than store the value.
But Integer is a different story. Addition time on this type can grow to
18.02.2012 13:28, Heinrich Hördegen пишет:
> Dear all,
> I have a question about evaluation with respect to types and currying.
> Consider this programm:
> import Debug.Trace
> -- add :: Integer -> Integer -> Integer
> add :: Int -> Int -> Int
> add x y = x + y
> f a b c = trace "b" (add x c) where x = trace "a" (add a b)
> main :: IO ()
> main = do
> print (f 1 2 3)
> print (f 1 2 4)
> Compiled with ghc-7.0.3:
> $ ghc --make Main.hs -o main -O2
> The function add has to types. When we use type Int -> Int -> Int, the
> programm produces "b a 6 b a 7" as output which shows that the x from
> the where clause in f is evaluated twice. However, when we use type
> Integer -> Integer -> Integer, this will give "b a 6 b 7" which shows
> that x is evaluated only once. This was rather unexpected to me.
> Why does the number of evaluation steps depend on a type? Can anybody
> explain this or give a hint?
> Thank you very much,
More information about the Haskell-Cafe