summaryrefslogtreecommitdiff
path: root/testsuite/tests/profiling/should_run/T14257.hs
blob: af67239cb6e6d33dec661427017934de11a91089 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{-# LANGUAGE ScopedTypeVariables #-}
module Main where

eval :: forall a b. (a -> b -> b) -> b -> [a] -> b
eval f b xs = load xs []
  where
    load :: [a] -> [a] -> b
    load [] stk          = unload b stk
    load (x:xs) stk      = load xs (x : stk)

    unload :: b -> [a] -> b
    unload  v []         = v
    unload  v (x  : stk) = unload ((f $! x) $! v) stk

main :: IO ()
main = print (eval (||) False (True : replicate 10000000 False))