Ticket #4470: FunOpt.hs

File FunOpt.hs, 523 bytes (added by choenerzs, 3 years ago)
Line 
1{-# LANGUAGE BangPatterns #-}
2
3module Main where
4
5import Criterion.Main
6
7f :: Int -> Int -> Int -> Int -> Int
8f !i !j !s !m
9  | i == 0    = s+m
10  | otherwise = f (i-1) (j-1) (s + i+1) (m + j*5)
11
12g :: Int -> Int
13g !k = f k k 0 0
14
15
16ff :: Int -> Int -> Int -> Int
17ff !i !s !m
18  | i == 0    = s+m
19  | otherwise = ff (i-1) (s + i+1) (m + i*5)
20
21gg :: Int -> Int
22gg !k = ff k 0 0
23
24
25
26{-
27main = do
28  print $ g 20
29  print $ gg 20
30-}
31
32main = defaultMain
33  [ bench " g" $ whnf g  20 -- 67.9ns
34  , bench "gg" $ whnf gg 20 -- 64.5ns
35  ]