2
- это не только Int
в Haskell, но и любой числовой тип, включая Float,Double,Integer,...
. Его тип Num a => a
- полиморфный тип, соответствующий каждому числовому типу.
Итак, вы можете использовать (2::Int)
вместо этого. Затем вы обнаружите, что (2::Int) + readLine
является ошибкой типа, поскольку readLine :: Int
неверно, мы получаем только readLine :: IO Int
.
Вы можете попробовать это вместо
useInt :: IO ()
useInt = do
i <- readLine
putStrLn . show (2 + i :: Int)