我有一個帶有欄位的 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"
如何將其包含在 for 的實體定義FromField中Cassava?
instance FromField EValue where
parseField = ???
uj5u.com熱心網友回復:
你只需要在運行attoparsecField你,然后把結果的Parser單子,這樣的: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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/349627.html
上一篇:如何在CSV/TSV檔案中格式化文本陣列和hstore資料以匯入Postgres
下一篇:csv標題中無法識別的字符
