Haskell 使用Data.YAML解析一个文件中的多个YAML文档

Haskell 使用Data.YAML解析一个文件中的多个YAML文档,haskell,yaml,Haskell,Yaml,从代码开始,我得到了一些快速工作的东西,可以解析YAML文件中的todo任务项列表 但如果我再添加第二个文档,Data.Yaml.decode不再解码任何内容,只返回Nothing 像这样: --- - name: > this is a test task state: finished - name: > this is a second test task state: todo --- - name: noname

从代码开始,我得到了一些快速工作的东西,可以解析YAML文件中的todo任务项列表

但如果我再添加第二个文档,
Data.Yaml.decode
不再解码任何内容,只返回
Nothing

像这样:

---
-   name: >
        this is a test task
    state: finished

-   name: >
        this is a second test task
    state: todo
---
-   name: noname
    state: nostate
我想知道在使用Data.YAML进行解析时,是否可以使用YAML的documents特性

还是我做错了什么

代码如下:

{-# LANGUAGE OverloadedStrings #-}
import Data.Yaml
import Control.Applicative -- <$>, <*>
import Data.Maybe (fromJust)

import qualified Data.ByteString.Char8 as BS

data Task = Task {    name :: String,
                      state :: String }
                      deriving (Show)

instance FromJSON Task where
    parseJSON (Object v) = Task <$>
                           v .: "name" <*>
                           v .: "state"
    -- A non-Object value is of the wrong type, so fail.
    parseJSON _ = error "Can't parse Task from YAML/JSON"

main = do
         ymlData <- BS.readFile "/tmp/test2.yaml"
         let users = Data.Yaml.decode ymlData :: Maybe [Task]
         -- Print it, just for show
         print $ fromJust users
{-#语言重载字符串}
导入数据.Yaml
导入控件。应用程序--,
导入数据。可能(fromJust)
将符合条件的Data.ByteString.Char8作为BS导入
数据任务=任务{name::String,
状态::字符串}
派生(显示)
实例FromJSON任务,其中
parseJSON(对象v)=任务
v.:“姓名”
五..“国家”
--非对象值的类型错误,因此失败。
parseJSON=错误“无法从YAML/JSON解析任务”
main=do

ymlData您需要
来分隔文档,如下所示:

---
-   name: >
        this is a test task
    state: finished

-   name: >
        this is a second test task
    state: todo
...
---
-   name: noname
    state: nostate

我要试试这个。