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))
|