-- 1. Define the pure logic as a polymorphic, standalone function triangular :: Integral a => a -> a triangular n = n * (n + 1) `div` 2 -- 2. Keep the IO pipeline trivially simple main :: IO () main = interact $ (++ "\n") . show . triangular . read