我是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")
答案 0 :(得分:3)
由于您尝试将read
字符串作为字符串,因此失败。
read
用于将String解析为对象。要将String解析为String,您需要在要解析的String周围添加显式引号。如果不这样做将导致您获得的错误。您可以在程序要求时在输入周围添加"
来测试这一点。它应该工作。
您希望code1
成为一个int吗?如果是这样的话,那就有2个问题(以及几种解决方法):
您需要告诉read
您希望它将字符串解析为什么类型。为此,请使用类型注释。在:: int
之后添加read code
。
由于您无法连接int,因此请将最后一行中的code1
更改为(show code1)
,以将其转换回字符串。
上述方法存在的问题是您要转换为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)