哈斯克尔:如何解析IO输入字符串转化成一个Float(或诠释或其他)?(Haskell: How t

2019-07-30 10:22发布

我试图做一个程序,通过键盘使用由用户输入的浮点数和做的东西与它。

但是每一次我尝试解析字符串输入到一个浮动我不断收到错误。 我尝试过每一个方法失败,让我把用户输入的数据,并把它变成一个浮动,这正是我所需要的。

我的做法程序(不我试图解决实际问题)是:

main = do
    putStrLn "Please input a number."
    inputjar <- getLine
    read :: read a => String -> a
    putStrLn( read inputjar :: Int)

编辑

进一步的问题。

如何把输入的字符串,并把它变成我的东西可以在计算中使用?

例如,我怎么把输入的字符串,这样我可以像做一些事情:

(var + var) / 2

Answer 1:

main = do
   putStrLn "Please input a number."
   inputjar <- readLn
   print (inputjar :: Int)

这是一个更好的方式,因为它会立即修复我们正在阅读的字符串:

main = do
   putStrLn "Please input a number."
   inputjar :: Int  <- readLn
   print inputjar

但它需要{-#LANGUAGE ScopedTypeVariables#-}



Answer 2:

你说(read inputjar :: Int)在你的代码,但是你告诉我们,你想读一个Float 。 你是不是定义read ,采取线路输出。 您可以使用putStrLn这样就可以打印出浮动,但putStrLn需要一个String ,所以你需要show的值。

main = do
    putStrLn "Please input a number."
    inputjar <- getLine
    putStrLn $ show (read inputjar :: Float)


Answer 3:

putStrLn打印出String S,不是Int S,所以有两种解决方案:

使用print ,打印任何实现Show

main = do
    putStrLn "Please input a number."
    inputjar <- getLine
    let n = read inputjar :: Int
    print n

..或致电putStrLn原始String您阅读

main = do
    putStrLn "Please input a number."
    inputjar <- getLine
    let n = read inputjar :: Int
    putStrLn inputjar

在后一个例子n为从未使用过,但想必你会写后这将真正使用它的一些代码。



Answer 4:

嗯,我猜

read :: read a => String -> a

是仅仅有误?

总之,在ghci的, :t putStrLn显示:

putStrLn :: String -> IO ()

所以putStrLn只接受字符串作为其第一个参数,所以如果你真的想:

putStrLn( show (read inputjar :: Int))

顺便说一句, read inputjar :: int是正确的,只是你的输出中是错误的。



Answer 5:

这为我工作

import System.IO

getNum :: IO Integer 
getNum = readLn 

--call function like this
something <- getNum
--something is type Integer


文章来源: Haskell: How to parse an IO input string into a Float (or Int or whatever)?