File 从文本文件Haskell加载自定义数据类型

File 从文本文件Haskell加载自定义数据类型,file,parsing,haskell,types,readfile,File,Parsing,Haskell,Types,Readfile,我有一个自定义数据类型,Person data Person = Person{ fname :: String , lname :: String , age :: Int , siblings :: [String] } deriving (Eq,Ord,Show,Read) 我还有一个文本文件,它的数据格式如下 "bob" "ro

我有一个自定义数据类型,
Person

data Person = Person{ fname :: String
                    , lname :: String
                    , age :: Int
                    , siblings :: [String]
                    } deriving (Eq,Ord,Show,Read)
我还有一个文本文件,它的数据格式如下

"bob" "ross" 60 ["sam", "ron"]
"fname" "lname" age ["sibling1", "sibling2"]
"fname" "lname" age ["sibling1", "sibling2"]
我想将文本文件中的每一行加载到我的自定义数据类型中,
Person
。因为有多行,所以它将是
[Person]

contents <- readFile "persons.txt"
let database :: [Person]
    database = read contents
我得到
***异常:Prelude.read:no parse


谢谢。

这些字符串不是有效的
Person
值,因为它们缺少构造函数。用
Person
构造函数作为前缀,然后尝试
Read
或读取每个字段并手动为每行构造
Person
值。也可以考虑使用<代码> Read Metry[/Cord]。这样,当解析失败时,你可以给出更漂亮的错误消息。文件的内容应该或多或少地像你所做的字符串“代码>显示(ListFoOf:::[HON]))。如果您想
read
解析它,那么到目前为止的讨论忽略了一个事实,即read通常不是一个好的解析器。这更适用于派生实例。这里真正的解决方案是使用众多解析器组合器库中的一个。例如,参见Parsec。
putStrLn (personsToString(database))