gpt4 book ai didi

haskell - "read"- 将字符串数据转换为haskell "data"类型

转载 作者:行者123 更新时间:2023-12-04 03:02:14 24 4
gpt4 key购买 nike

感谢 this excellent tutorial ,我知道如何读取字符串(在这种情况下,从位于 people.txt 的文件中直接读取类型同义词:

type Person = [Int]

像这样:
people_text <- readFile "people.txt"
let people :: [Person]
people = read people_text

我想要做的是使用数据类型(而不是类型同义词)。

关于我在这里缺少什么的任何指示?我以为我可以将字符串数据直接读入 Person - 像这样定义(来自 learnyouahaskell.com)
data Person = Person String String Int Float String String deriving (Show)

当我尝试明显的
 txt <- readFile "t.txt" (this works OK)

t.txt包含
"Buddy" "Finklestein" 43 184.2 "526-2928" "Chocolate"

我收到此错误:

No instance for (Read Person)

最佳答案

首先需要导出Read适合你的类型。

你可以想到readshow作为对立面,一种穷人的连载。 show让您转换为 String , readString 转换, 在大多数情况下 String生成的也应该是有效的 Haskell 代码,在编译时,生成的值与 read 相同。给你。

请注意,您的文件内容将无法正常工作,因为这不是 read 的默认实现所使用的格式。和 show ,即通过放置 Read 获得的实现和 Showderiving条款。

例如,鉴于此:

data Person = Person String String Int Float String String deriving (Read, Show)

buddy = Person "Buddy" "Finklestein" 43 184.2 "526-2928" "Chocolate"

然后在 GHCi 中,我们得到:
> show buddy
"Person \"Buddy\" \"Finklestein\" 43 184.2 \"526-2928\" \"Chocolate\""

引号被转义,因为那是 String值(value)。在文件中,它看起来像这样:
Person "Buddy" "Finklestein" 43 184.2 "526-2928" "Chocolate"

您会注意到它与源文件中的原始定义相同。

关于haskell - "read"- 将字符串数据转换为haskell "data"类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085640/

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