effectfulId :: a -> a effectfulId x = x (.) :: (b -> c) -> (a -> b) -> a -> c (f . g) x = f (g x) doubleId = effectfulId . effectfulId main :: Integer main = runProc (doubleId (13 :: Integer)) -- 13