将String转换为Number并打印到命令行

时间:2015-11-17 06:10:48

标签: string haskell ghc

我正在完成Scheme in 48 hours的第1章练习。对于问题2,我想使用read函数将字符串转换为数字,但下面的代码不起作用。

main = do
    args <- getArgs
    myNum <- read $ args !! 0
    putStrLn myNum

以下是来自ghc的错误消息:

ex2.hs:7:12:
    No instance for (Read (IO t0)) arising from a use of ‘read’
    In the expression: read
    In a stmt of a 'do' block: one <- read $ (args !! 0)
    In the expression:
      do { args <- getArgs;
           myNum <- read $ (args !! 0);
           putStrLn myNum }

1 个答案:

答案 0 :(得分:4)

这里有一些问题。

首先,要在此函数中保存变量,您需要使用let variable = "something"类型的语句而不是<-绑定运算符。这里,let myNum = read (args !! 0)采用第一个命令行参数。

接下来,我们使用readmyNum转换为任何类型,但我们还需要明确定义类型(我为此示例选择 Float )进行打印输出返回命令行。否则,您会收到错误消息,例如"Prelude.read: no parse"

从String转换为Number返回String的代码如下所示......

main = do
    -- get command line arguments
    args <- getArgs

    -- get the first indexed element; convert it from string to float
    let myNum = read (args !! 0) :: Float

    -- print this number to the command line (as a string)
    putStrLn (show myNum)