簡體   English   中英

使用 Cassava 和 Attoparsec 解析自定義字段

[英]Parsing custom fields with Cassava and Attoparsec

我有一個帶有字段的 CSV,其中包含我必須解析的單位值。 作為一個簡單的例子:

data EValue = Farads Double | MicroFarads Double | PicoFarads Double

因此,我需要解析如下內容:

parseEValue = farads <|> micro <|> pico
  where farads = Farads <$> double <* string "F"
        micro  = MicroFarads <$> double <* string "µF"
        pico   = PicoFarads <$> double <* string "pF"

如何將其包含在FromField for Cassava的實例定義中?

instance FromField EValue where
  parseField = ???

你只需要在你得到的Field上運行 attoparsec ,然后把結果放在Parser monad 中,就像這樣: parseField = either fail pure . parseOnly parseEValue parseField = either fail pure . parseOnly parseEValue

為了完整起見,這里是完整的工作代碼:

{-# LANGUAGE OverloadedStrings #-}

import Control.Applicative
import Data.Attoparsec.ByteString.Char8
import Data.Csv

data EValue = Farads Double | MicroFarads Double | PicoFarads Double

parseEValue = farads <|> micro <|> pico
  where farads = Farads <$> double <* string "F"
        micro  = MicroFarads <$> double <* string "µF"
        pico   = PicoFarads <$> double <* string "pF"

instance FromField EValue where
  parseField = either fail pure . parseOnly parseEValue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM