import "JavaBuiltin" as Java (+) = Java.iadd data Thunk a = /* forall s. */ Thunk s (s -> a) id :: a -> a id x = x runThunk :: Thunk a -> a runThunk (Thunk s f) = f s makeThunk :: a -> Thunk a makeThunk x = Thunk x id mapThunk :: (a -> b) -> Thunk a -> Thunk b mapThunk f (Thunk s g) = Thunk s (\x -> f (g x)) a = makeThunk (13 :: Integer) b = mapThunk (\x -> x+1) a main = runThunk b -- 14