首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell异常: Prelude.read:无解析

Haskell异常: Prelude.read:无解析
EN

Stack Overflow用户
提问于 2016-05-29 18:25:53
回答 1查看 3.3K关注 0票数 2

我是哈斯克尔的新手,从我学习Haskell开始大约两天,我想用文件做一个项目。我已经在c++做过了,现在我也想在Haskell做。项目的一个小部分是关于一个图书馆,在那里我可以注册一本书和一个人。现在,我想将图书代码放入一个file.txt中,但是要将其存储为int,而不是字符串,因为我必须搜索和比较这段代码,稍后再与其他代码进行比较,比较起来会更容易。这是我的代码,我收到了以下错误*异常: Prelude.read: no解析。有人知道怎么解决这个问题吗?

代码语言:javascript
复制
 import System.IO                      
 main = do
    putStrLn "Please put book details"
    putStr "Code: "
    code <- getLine
    let code1 = read code
    appendFile "book.txt" ("Cod:" ++ code1 ++ "\n")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-29 19:04:21

这将失败,因为您试图将字符串作为字符串进行read

read用于将字符串解析为对象。但是,要将字符串解析为字符串,需要在解析的字符串周围添加显式引号。如果不这样做,将导致您得到的错误。当程序要求时,您可以通过在输入周围添加"s来测试它。应该管用的。

你认为code1会是一个int吗?如果是这样的话,有两个问题(以及解决这些问题的几种方法):

  1. 您需要告诉read您希望它解析字符串的类型。要做到这一点,请使用类型注释。在:: int后面添加read code
  2. 由于不能连接int,所以将最后一行中的code1更改为(show code1),以将其转换为字符串。

以上方法的问题在于,您正在转换,然后转换为字符串。通过跳过read,可以避免任何转换,方法是将它保持为字符串:

代码语言:javascript
复制
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) 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37513423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档