我试图做一个程序,通过键盘使用由用户输入的浮点数和做的东西与它。
但是每一次我尝试解析字符串输入到一个浮动我不断收到错误。 我尝试过每一个方法失败,让我把用户输入的数据,并把它变成一个浮动,这正是我所需要的。
我的做法程序(不我试图解决实际问题)是:
main = do
putStrLn "Please input a number."
inputjar <- getLine
read :: read a => String -> a
putStrLn( read inputjar :: Int)
编辑
进一步的问题。
如何把输入的字符串,并把它变成我的东西可以在计算中使用?
例如,我怎么把输入的字符串,这样我可以像做一些事情:
(var + var) / 2
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#-}
你说(read inputjar :: Int)
在你的代码,但是你告诉我们,你想读一个Float
。 你是不是定义read
,采取线路输出。 您可以使用putStrLn
这样就可以打印出浮动,但putStrLn
需要一个String
,所以你需要show
的值。
main = do
putStrLn "Please input a number."
inputjar <- getLine
putStrLn $ show (read inputjar :: Float)
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为从未使用过,但想必你会写后这将真正使用它的一些代码。
嗯,我猜
read :: read a => String -> a
是仅仅有误?
总之,在ghci的, :t putStrLn
显示:
putStrLn :: String -> IO ()
所以putStrLn
只接受字符串作为其第一个参数,所以如果你真的想:
putStrLn( show (read inputjar :: Int))
顺便说一句, read inputjar :: int
是正确的,只是你的输出中是错误的。
这为我工作
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)?