[Haskell-cafe] types and number of evaluation steps

Heinrich Hördegen hoerdegen at funktional.info
Sat Feb 18 10:28:04 CET 2012

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,


hoerdegen at funktional.info


More information about the Haskell-Cafe mailing list