[Haskell-cafe] types and number of evaluation steps

MigMit miguelimo38 at yandex.ru
Sat Feb 18 11:10:47 CET 2012


Different kinds of optimization. I expect you'd have different results even if you use one type, but different -O flags.

On 18 Feb 2012, at 13:28, Heinrich Hördegen wrote:

> 
> 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,
> Heinrich
> 
> 
> 
> -- 
> --
> 
> hoerdegen at funktional.info
> www.funktional.info
> 
> --
> 
> 
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe




More information about the Haskell-Cafe mailing list