31 lines
788 B
Haskell
31 lines
788 B
Haskell
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
|
|
module Data.Bool.Instances
|
|
() where
|
|
|
|
import ClassyPrelude
|
|
|
|
import qualified Data.Csv as Csv
|
|
import Data.CaseInsensitive (CI)
|
|
import qualified Data.CaseInsensitive as CI
|
|
import Data.CaseInsensitive.Instances ()
|
|
|
|
import qualified Data.Text as Text
|
|
|
|
import Control.Monad.Fail
|
|
|
|
|
|
instance Csv.ToField Bool where
|
|
toField True = "t"
|
|
toField False = "f"
|
|
|
|
instance Csv.FromField Bool where
|
|
parseField f = do
|
|
(CI.map Text.strip -> t :: CI Text) <- Csv.parseField f
|
|
(True <$ guard (isTrue t)) <|> (False <$ guard (isFalse t)) <|> fail "Could not decode Bool"
|
|
where
|
|
isTrue = flip elem
|
|
[ "yes", "y", "ja", "j", "wahr", "w", "true", "t", "1" ]
|
|
isFalse = flip elem
|
|
[ "no", "n", "nein", "falsch", "f", "false", "0" ]
|