如何在Haskell中使用输入输出输入任何数值类型?

时间:2018-05-03 15:58:41

标签: haskell console

在haskell中输入一个String我们使用getLine并输入一个我们使用getChar的字符,但用什么来输入任何整数或浮点数?

我经常搜索并找到了,但它也使用getLine作为整数。 This is the link where I found

它确实有效,因为我在我的代码中使用了它

代码:

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

haskell中是否存在getInt或getFloat以输入整数或浮点数?

有谁知道,所以请帮助我。

1 个答案:

答案 0 :(得分:1)

您可以定义与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将引发错误,因此这可能是最不好的方法,但这很简单。