- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大约 4 个月前,我开始在 Haskell 中编程,现在我不得不处理 Haskell 的 IO 系统。
我已经做了很多 IO 操作,并没有遇到任何我自己无法解决的问题,但是这次我搜索了将近两个小时,无济于事,以获取有关函数 readMaybe 的一些信息。所以我有以下问题要解决,我已经尝试了很多不同的方法来解决它,但我总是从我的编译器收到相同的失败消息:
No instance for (Read a0) arising from a use of `readMaybe'
The type variable `a0' is ambiguous
countNumbers :: IO Int
countNumbers = do
x <- count 0
return x where
count :: Int -> IO Int
count n = do
line <- getLine
case line of
"" -> do
return n
_ -> case readMaybe line of
Just _ -> do
x <- count (n+1)
return x
Nothing -> do
x <- count n
return x
readMaybe :: Read a => String -> Maybe aSource
Parse a string using the Read instance. Succeeds if there is exactly one valid result.
getLineInt :: IO Int
getLineInt = do
putStrLn "Please enter your guess"
line <- getLine
case readMaybe line of
Just x -> do
return x
Nothing -> do
putStrLn "Invalid number entered"
x <- getLineInt
return x
最佳答案
这与 IO 无关,所以可能你不明白编译器试图告诉你什么。有一个类型变量a
在 readMaybe
的签名; a
必须有 Read
例如,但除此之外,它可以是任何东西。编译器告诉你它没有办法确定你想要什么a
成为。
在 getLineInt
你没有这个问题,因为你正在返回 readMaybe
的结果并且类型签名说它应该是 Int
.在 countNumbers
,您没有使用 readMaybe
的结果,所以没有什么可以用来确定正确的类型。您可以通过添加显式类型签名来解决此问题(我选择了 Int
,因为您显然是在数数字):
_ -> case readMaybe line :: Maybe Int of
do
符号:它只是语法糖,你不必一直使用它。而不是
do return x
你可以简单地写
return x
, 而不是
x <- getLineInt
return x
getLineInt
getLineInt :: IO Int
getLineInt = do
putStrLn "Please enter your guess"
line <- getLine
case readMaybe line of
Just x -> return x
Nothing -> putStrLn "Invalid number entered" >> getLineInt
关于haskell - IO中如何正确使用readMaybe函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20831012/
我正在尝试使用函数 readMaybe,它应该在 Text.Read 库中,但是当我编译时,我收到以下消息: Module `Text.Read' does not export `readMayb
在使用镜头时,我偶尔需要在光学链中进行一些基本的文本解析。在我处理的一个 API 中,有一个像这样的 JSON 字段: "timespent": "0.25", 由于它被错误地编码为字符串而不是数字,
我正在学习 Haskell 并且对在 Joachim Breitner's online course CIS194 中找到的这个例子有疑问。 : import Text.Read main = pu
问题说明了一切:是否有 readMaybe对于 Text ?我似乎找不到一个包来实现它。 最佳答案 你在寻找一个函数Read a => Text -> Maybe a ?使用readMaybe . u
readMay 和 readMaybe 这两个函数具有相同的签名 Read a => String -> Maybe a。 它们之间有什么区别吗?如果是这样,它们是什么?这两个功能应该首选哪个? 最佳
我是一名优秀的程序员,十分优秀!