read-6ren">
gpt4 book ai didi

Haskell Prelude.read : no parse String

转载 作者:行者123 更新时间:2023-12-02 09:02:41 25 4
gpt4 key购买 nike

来自 haskell 示例 http://learnyouahaskell.com/types-and-typeclasses

ghci> read "5" :: Int  
5
ghci> read "5" :: Float
5.0
ghci> (read "5" :: Float) * 4
20.0
ghci> read "[1,2,3,4]" :: [Int]
[1,2,3,4]
ghci> read "(3, 'a')" :: (Int, Char)
(3, 'a')

但是当我尝试

read "asdf" :: String 

read "asdf" :: [Char]

我遇到异常

Prelude.read No Parse

我在这里做错了什么?

最佳答案

这是因为您拥有的字符串表示形式不是 String 的字符串表示形式,它需要在字符串本身中嵌入引号:

> read "\"asdf\"" :: String
"asdf"

这是为了读取。显示=== id 对于字符串:

> show "asdf"
"\"asdf\""
> read $ show "asdf" :: String
"asdf"

顺便说一句,使用 Text.Read 中的 readMaybe 函数始终是一个好主意:

> :t readMaybe
readMaybe :: Read a => String -> Maybe a
> readMaybe "asdf" :: Maybe String
Nothing
> readMaybe "\"asdf\"" :: Maybe String
Just "asdf"

这可以避免(在我看来)损坏的 read 函数,该函数会在解析失败时引发异常。

关于Haskell Prelude.read : no parse String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27947925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com