[Haskell-cafe] types and number of evaluation steps

Heinrich Hördegen hoerdegen at funktional.info
Sat Feb 18 11:56:33 CET 2012


  Hi,

this is true. The optimization only works with -O2. I'd like to have 
more details about what's going on. How can I make sure, that this 
optimization triggers?

Heinrich

On 18.02.2012 11:10, MigMit wrote:
> 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
>


-- 
--

Funktionale Programmierung Dr. Heinrich Hördegen
Gutenbergstr. 26
80638 München

FON: +49 (89) 12 59 79 49
FAX: +49 (89) 12 59 79 50

hoerdegen at funktional.info
www.funktional.info

--




More information about the Haskell-Cafe mailing list