Я не могу окунуться в голову, как определить тип в Haskell, который представляет рекурсивный характер HTTP Multipart MIME POST.Определение многостраничной почты HTTP как рекурсивного типа данных в Haskell
На английском языке Почта представляет собой либо список заголовков вместе с Контентом какого-либо типа, либо список Заголовков с Контентом другой Почты. Но контент также может быть списком сообщений.
Так я определил Header
таким образом:
data Header = Header { hName :: String
, hValue :: String
, hAddl :: [(String,String)] } deriving (Eq, Show)
Я думаю Content
должно быть что-то вроде:
data Content a = Content a | [Post] deriving (Eq, Show)
Очевидно, что терпит неудачу: parse error in constructor in data/newtype declaration: [Post]
Я определил, как Post
:
data Post = Post { pHeaders :: [Header]
, pContent :: [Content] } deriving (Eq, Show)
Я использую Haskell, чтобы получить другую перспективу в моей текущей задаче, последний вопрос на котором: here. Просто используя String
для Content
, я могу разобрать простые POST с помощью Parsec. Но цель состоит в том, чтобы анализировать сложные сообщения.
Ссылка выше и ссылки, найденные в этом вопросе, дают контекст для моей текущей задачи. Я поклонник Haskell, поэтому, пожалуйста, не стесняйтесь предлагать альтернативы коду, который я разместил здесь, - я не женат на этом, и я бы хотел учиться. В конечном счете, я буду использовать F #, если я не смогу выполнить поставку, и в этом случае я буду вынужден использовать C# и императивный стиль. Я приветствую любую мудрость или направление, поддерживающее функциональное решение!