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 > > > > -- > -- > > [email protected] > www.funktional.info > > -- > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
