[英]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.