Haskell异常:Prelude.read:没有解析

时间:2016-05-29 18:25:53

标签: haskell

我是Haskell的新手,自从我学习Haskell之后的2天,我想用文件做一个项目。我已经用c ++做过了,现在我也想在Haskell中做到这一点。 项目的一小部分是关于图书馆,我可以在那里注册一本书和一个人。现在我想把书代码放到file.txt中,但是把它存储为int而不是String,因为我必须在以后搜索和比较这段代码和其他代码,并且更容易比较。 这是我的代码,我收到以下错误***例外:Prelude.read:没有解析。有谁知道如何解决这个问题?

 import System.IO                      
 main = do
    putStrLn "Please put book details"
    putStr "Code: "
    code <- getLine
    let code1 = read code
    appendFile "book.txt" ("Cod:" ++ code1 ++ "\n")

1 个答案:

答案 0 :(得分:3)

由于您尝试将read字符串作为字符串,因此失败。

read用于将String解析为对象。要将String解析为String,您需要在要解析的String周围添加显式引号。如果不这样做将导致您获得的错误。您可以在程序要求时在输入周围添加"来测试这一点。它应该工作。

您希望code1成为一个int吗?如果是这样的话,那就有2个问题(以及几种解决方法):

  1. 您需要告诉read您希望它将字符串解析为什么类型。为此,请使用类型注释。在:: int之后添加read code

  2. 由于您无法连接int,因此请将最后一行中的code1更改为(show code1),以将其转换回字符串。

  3. 上述方法存在的问题是您要转换为String,然后再转换为String。您可以通过完全跳过read来保持任何转换:

    import System.IO                      
     main = do
        putStrLn "Please put book details"
        putStr "Code: "
        code <- getLine
        # Check user's input to ensure it's correct. 
        appendFile "book.txt" ("Cod:" ++ code)