Как ввести любой числовой тип с использованием ввода вывода в Haskell? - PullRequest
0 голосов
/ 03 мая 2018

В haskell для ввода строки мы используем getLine, а для ввода символа - getChar, но что используется для ввода любого целого числа или числа с плавающей запятой?

Я много искал и нашел, но он также использует getLine для целого числа. Это ссылка, по которой я нашел

Это действительно работает, как я использовал это в моем коде

Код:

main = do
   putStrLn "Enter any number : "
   num <- getLine
   putStrLn ("number is "++num)  

Выход:

F17BCSE206>main
Enter any number : 
5
number is 5
:: IO ()

Но мой разум не может удовлетворительно ввести целое число, которое мы используем getLine. Есть ли какой-либо другой более точный способ ввода целого числа и числа с плавающей запятой с использованием ввода вместо func :: Int -> Int

Может ли getInt или getFloat существовать в haskell для ввода целого числа или числа с плавающей запятой?

Может кто-нибудь знает, Так что, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете определить функцию getNum, которая идентична readLn, но ограничена типами с экземпляром Num.

getNum :: (Read a, Num a, Show a) => IO a
getNum = readLn

main = do
  putStrLn "Enter any number: "
  num <- getNum
  -- or just inline the type annotation:
  -- num <- (readLn :: (Read a, Num a, Show a) => IO a)
  putStrLn ("number is " ++ show num)

Ограничение Show просто облегчает создание строки для последнего putStrLn; это не имеет ничего общего с анализом ввода.

getNum вызовет ошибку, если readLn не сможет проанализировать входную строку как число, так что это, вероятно, наименее хороший способ сделать это, но это просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...