Haskell 解析iCalendar格式

Haskell 解析iCalendar格式,haskell,Haskell,我需要解析iCalendar格式,这基本上就是谷歌日历和几乎所有日历应用程序所使用的格式 我找到了这个包裹 但是我不知道如何在这个包中使用parseICalendar函数,如果有人能告诉我我做错了什么,那就太好了 主要是我不知道如何为类型DecodingFunctions parseICalendar :: DecodingFunctions -> FilePath -- ^ Used in error messages. -&g

我需要解析iCalendar格式,这基本上就是谷歌日历和几乎所有日历应用程序所使用的格式

我找到了这个包裹
但是我不知道如何在这个包中使用
parseICalendar
函数,如果有人能告诉我我做错了什么,那就太好了

主要是我不知道如何为类型
DecodingFunctions

parseICalendar :: DecodingFunctions
               -> FilePath -- ^ Used in error messages.
               -> ByteString
               -> Either String ([VCalendar], [String])
我的努力:

module CalendarReader 
( getCalendar
, getSummary
) where

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.ByteString.Lazy as B      -- package "bytestring"
import qualified Text.ICalendar as ICal         -- package "iCalendar"
import qualified Data.Map as Map                -- package "containers"
import Network.HTTP.Simple                      -- package "http-conduit"


import qualified Time                           -- local module
import Constants

getCalendar :: IO B.ByteString
getCalendar = do
    request <- parseRequest $ "GET" ++ calendarURL
    response <- httpLBS request
    return $ getResponseBody response

getSummary :: B.ByteString -> Time.DateTime -> Int -> String
getSummary cal dateTime dayOffset = summary
  where
    summary = "Event Summary"
    ((ICal.VCalendar { ICal.vcEvents = vcEvents' }), _) = ICal.parseICalendar ?missingArgument? logFile cal
模块日历读取器
(获取日历)
,获取摘要
)在哪里
{-#语言重载字符串}
将限定数据.ByteString.Lazy作为B导入--包“ByteString”
将限定的Text.ICalendar作为ICal导入--包“ICalendar”
导入符合条件的数据。映射为映射--包“containers”
import Network.HTTP.Simple--包“HTTP导管”
导入限定时间--本地模块
导入常数
getCalendar::IO B.ByteString
getCalendar=do
请求整数->字符串
getSummary cal dateTime dayOffset=摘要
哪里
summary=“事件摘要”
((ICal.VCalendar{ICal.vcEvents=vcEvents'}),)=ICal.parseICalendar?缺少辩论?日志文件校准

DecodingFunctions
应该包含一个函数,用于将
通过testring
(二进制数组)转换为
文本(表示一个unicode字符字符串),并将其转换为不区分大小写的表示形式(我想是为了进行比较)。如果您的iCalendar是“正常”的,并且是用utf-8编码的,您只需使用
解码函数的实例即可:

parseICalendar def logFile cal
(别忘了从某处导入def)

如果您的iCalendar不在Utf-8中,您必须使用来自和来自的
mk
功能。对于Utf16,您将有:

decodings = DecodingFunctions decodeUtf16LE (mk . decodeUtf16LE)

使用正确的导入。

是的,这很有效。不过,我花了额外的时间才弄明白我需要导入def的Data.default