{-# LANGUAGE OverloadedStrings, FlexibleContexts #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
module Data.OFX
(
Err
, HeaderTag
, HeaderValue
, OFXHeader(..)
, TagName
, TagData
, Tag(..)
, OFXFile(..)
, find
, findPath
, tagData
, pathData
, findData
, fiName
, creditCardNumber
, bankAccountNumber
, accountNumber
, Transaction(..)
, transaction
, transactions
, TrnType(..)
, trnType
, Payee(..)
, payee
, CorrectAction(..)
, BankAcctTo(..)
, bankAcctTo
, CCAcctTo(..)
, ccAcctTo
, AcctType(..)
, acctType
, CurrencyData(..)
, currencyData
, Currency(..)
, currency
, OrigCurrency(..)
, origCurrency
, parseOfxFile
, loadOfxFile
, parseTransactions
, loadTransactions
, prettyRenderOfxFile
, prettyRenderTransactions
, ofxFile
, newline
, escChar
, header
, openingTag
, closingTag
, tag
, date
, time
, tzOffset
, pPayee
, pTransaction
, pTag
, pHeader
, pFile
, pEither
, pMaybe
, pList
, label
, pExceptional
) where
import Control.Applicative (many, optional, (<|>))
import Control.Monad (replicateM, (<=<))
import Data.Data (Data)
import Data.Maybe (listToMaybe)
import Data.Monoid ((<>))
import qualified Data.Monoid as M
import qualified Data.Time as T
import Data.Typeable (Typeable)
import GHC.Generics (Generic)
import Text.Parsec.String (Parser)
import Text.Parsec
( lookAhead, char, manyTill, anyChar, (<?>), eof,
try, digit, many1, spaces, string, choice, parse )
import qualified Text.Parsec as P
import Text.PrettyPrint
( Doc, hang, text, sep, vcat, nest, (<+>), ($$),
parens, brackets, render )
type Err = Either String
type = String
type = String
data = HeaderTag HeaderValue
deriving (OFXHeader -> OFXHeader -> Bool
(OFXHeader -> OFXHeader -> Bool)
-> (OFXHeader -> OFXHeader -> Bool) -> Eq OFXHeader
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OFXHeader -> OFXHeader -> Bool
$c/= :: OFXHeader -> OFXHeader -> Bool
== :: OFXHeader -> OFXHeader -> Bool
$c== :: OFXHeader -> OFXHeader -> Bool
Eq, Int -> OFXHeader -> ShowS
[OFXHeader] -> ShowS
OFXHeader -> [Char]
(Int -> OFXHeader -> ShowS)
-> (OFXHeader -> [Char])
-> ([OFXHeader] -> ShowS)
-> Show OFXHeader
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [OFXHeader] -> ShowS
$cshowList :: [OFXHeader] -> ShowS
show :: OFXHeader -> [Char]
$cshow :: OFXHeader -> [Char]
showsPrec :: Int -> OFXHeader -> ShowS
$cshowsPrec :: Int -> OFXHeader -> ShowS
Show, ReadPrec [OFXHeader]
ReadPrec OFXHeader
Int -> ReadS OFXHeader
ReadS [OFXHeader]
(Int -> ReadS OFXHeader)
-> ReadS [OFXHeader]
-> ReadPrec OFXHeader
-> ReadPrec [OFXHeader]
-> Read OFXHeader
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [OFXHeader]
$creadListPrec :: ReadPrec [OFXHeader]
readPrec :: ReadPrec OFXHeader
$creadPrec :: ReadPrec OFXHeader
readList :: ReadS [OFXHeader]
$creadList :: ReadS [OFXHeader]
readsPrec :: Int -> ReadS OFXHeader
$creadsPrec :: Int -> ReadS OFXHeader
Read, Typeable OFXHeader
Typeable OFXHeader
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OFXHeader -> c OFXHeader)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OFXHeader)
-> (OFXHeader -> Constr)
-> (OFXHeader -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OFXHeader))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OFXHeader))
-> ((forall b. Data b => b -> b) -> OFXHeader -> OFXHeader)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OFXHeader -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OFXHeader -> r)
-> (forall u. (forall d. Data d => d -> u) -> OFXHeader -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> OFXHeader -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader)
-> Data OFXHeader
OFXHeader -> DataType
OFXHeader -> Constr
(forall b. Data b => b -> b) -> OFXHeader -> OFXHeader
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> OFXHeader -> u
forall u. (forall d. Data d => d -> u) -> OFXHeader -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OFXHeader -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OFXHeader -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OFXHeader
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OFXHeader -> c OFXHeader
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OFXHeader)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OFXHeader)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OFXHeader -> m OFXHeader
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> OFXHeader -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> OFXHeader -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> OFXHeader -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> OFXHeader -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OFXHeader -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OFXHeader -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OFXHeader -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OFXHeader -> r
gmapT :: (forall b. Data b => b -> b) -> OFXHeader -> OFXHeader
$cgmapT :: (forall b. Data b => b -> b) -> OFXHeader -> OFXHeader
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OFXHeader)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OFXHeader)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OFXHeader)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OFXHeader)
dataTypeOf :: OFXHeader -> DataType
$cdataTypeOf :: OFXHeader -> DataType
toConstr :: OFXHeader -> Constr
$ctoConstr :: OFXHeader -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OFXHeader
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OFXHeader
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OFXHeader -> c OFXHeader
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OFXHeader -> c OFXHeader
Data, (forall x. OFXHeader -> Rep OFXHeader x)
-> (forall x. Rep OFXHeader x -> OFXHeader) -> Generic OFXHeader
forall x. Rep OFXHeader x -> OFXHeader
forall x. OFXHeader -> Rep OFXHeader x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep OFXHeader x -> OFXHeader
$cfrom :: forall x. OFXHeader -> Rep OFXHeader x
Generic, Typeable)
type TagName = String
type TagData = String
data Tag = Tag TagName (Either TagData [Tag])
deriving (Tag -> Tag -> Bool
(Tag -> Tag -> Bool) -> (Tag -> Tag -> Bool) -> Eq Tag
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Tag -> Tag -> Bool
$c/= :: Tag -> Tag -> Bool
== :: Tag -> Tag -> Bool
$c== :: Tag -> Tag -> Bool
Eq, Int -> Tag -> ShowS
[Tag] -> ShowS
Tag -> [Char]
(Int -> Tag -> ShowS)
-> (Tag -> [Char]) -> ([Tag] -> ShowS) -> Show Tag
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Tag] -> ShowS
$cshowList :: [Tag] -> ShowS
show :: Tag -> [Char]
$cshow :: Tag -> [Char]
showsPrec :: Int -> Tag -> ShowS
$cshowsPrec :: Int -> Tag -> ShowS
Show, ReadPrec [Tag]
ReadPrec Tag
Int -> ReadS Tag
ReadS [Tag]
(Int -> ReadS Tag)
-> ReadS [Tag] -> ReadPrec Tag -> ReadPrec [Tag] -> Read Tag
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Tag]
$creadListPrec :: ReadPrec [Tag]
readPrec :: ReadPrec Tag
$creadPrec :: ReadPrec Tag
readList :: ReadS [Tag]
$creadList :: ReadS [Tag]
readsPrec :: Int -> ReadS Tag
$creadsPrec :: Int -> ReadS Tag
Read, Typeable Tag
Typeable Tag
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Tag -> c Tag)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Tag)
-> (Tag -> Constr)
-> (Tag -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Tag))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Tag))
-> ((forall b. Data b => b -> b) -> Tag -> Tag)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Tag -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Tag -> r)
-> (forall u. (forall d. Data d => d -> u) -> Tag -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Tag -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag)
-> Data Tag
Tag -> DataType
Tag -> Constr
(forall b. Data b => b -> b) -> Tag -> Tag
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Tag -> u
forall u. (forall d. Data d => d -> u) -> Tag -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Tag -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Tag -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Tag
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Tag -> c Tag
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Tag)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Tag)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Tag -> m Tag
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Tag -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Tag -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Tag -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Tag -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Tag -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Tag -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Tag -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Tag -> r
gmapT :: (forall b. Data b => b -> b) -> Tag -> Tag
$cgmapT :: (forall b. Data b => b -> b) -> Tag -> Tag
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Tag)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Tag)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Tag)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Tag)
dataTypeOf :: Tag -> DataType
$cdataTypeOf :: Tag -> DataType
toConstr :: Tag -> Constr
$ctoConstr :: Tag -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Tag
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Tag
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Tag -> c Tag
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Tag -> c Tag
Data, (forall x. Tag -> Rep Tag x)
-> (forall x. Rep Tag x -> Tag) -> Generic Tag
forall x. Rep Tag x -> Tag
forall x. Tag -> Rep Tag x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Tag x -> Tag
$cfrom :: forall x. Tag -> Rep Tag x
Generic, Typeable)
data OFXFile = OFXFile
{ :: [OFXHeader]
, OFXFile -> Tag
fTag :: Tag
} deriving (OFXFile -> OFXFile -> Bool
(OFXFile -> OFXFile -> Bool)
-> (OFXFile -> OFXFile -> Bool) -> Eq OFXFile
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OFXFile -> OFXFile -> Bool
$c/= :: OFXFile -> OFXFile -> Bool
== :: OFXFile -> OFXFile -> Bool
$c== :: OFXFile -> OFXFile -> Bool
Eq, Int -> OFXFile -> ShowS
[OFXFile] -> ShowS
OFXFile -> [Char]
(Int -> OFXFile -> ShowS)
-> (OFXFile -> [Char]) -> ([OFXFile] -> ShowS) -> Show OFXFile
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [OFXFile] -> ShowS
$cshowList :: [OFXFile] -> ShowS
show :: OFXFile -> [Char]
$cshow :: OFXFile -> [Char]
showsPrec :: Int -> OFXFile -> ShowS
$cshowsPrec :: Int -> OFXFile -> ShowS
Show, ReadPrec [OFXFile]
ReadPrec OFXFile
Int -> ReadS OFXFile
ReadS [OFXFile]
(Int -> ReadS OFXFile)
-> ReadS [OFXFile]
-> ReadPrec OFXFile
-> ReadPrec [OFXFile]
-> Read OFXFile
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [OFXFile]
$creadListPrec :: ReadPrec [OFXFile]
readPrec :: ReadPrec OFXFile
$creadPrec :: ReadPrec OFXFile
readList :: ReadS [OFXFile]
$creadList :: ReadS [OFXFile]
readsPrec :: Int -> ReadS OFXFile
$creadsPrec :: Int -> ReadS OFXFile
Read, Typeable OFXFile
Typeable OFXFile
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OFXFile -> c OFXFile)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OFXFile)
-> (OFXFile -> Constr)
-> (OFXFile -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OFXFile))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OFXFile))
-> ((forall b. Data b => b -> b) -> OFXFile -> OFXFile)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OFXFile -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OFXFile -> r)
-> (forall u. (forall d. Data d => d -> u) -> OFXFile -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> OFXFile -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile)
-> Data OFXFile
OFXFile -> DataType
OFXFile -> Constr
(forall b. Data b => b -> b) -> OFXFile -> OFXFile
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> OFXFile -> u
forall u. (forall d. Data d => d -> u) -> OFXFile -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OFXFile -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OFXFile -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OFXFile
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OFXFile -> c OFXFile
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OFXFile)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OFXFile)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OFXFile -> m OFXFile
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> OFXFile -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> OFXFile -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> OFXFile -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> OFXFile -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OFXFile -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OFXFile -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OFXFile -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OFXFile -> r
gmapT :: (forall b. Data b => b -> b) -> OFXFile -> OFXFile
$cgmapT :: (forall b. Data b => b -> b) -> OFXFile -> OFXFile
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OFXFile)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OFXFile)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OFXFile)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OFXFile)
dataTypeOf :: OFXFile -> DataType
$cdataTypeOf :: OFXFile -> DataType
toConstr :: OFXFile -> Constr
$ctoConstr :: OFXFile -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OFXFile
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OFXFile
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OFXFile -> c OFXFile
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OFXFile -> c OFXFile
Data, (forall x. OFXFile -> Rep OFXFile x)
-> (forall x. Rep OFXFile x -> OFXFile) -> Generic OFXFile
forall x. Rep OFXFile x -> OFXFile
forall x. OFXFile -> Rep OFXFile x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep OFXFile x -> OFXFile
$cfrom :: forall x. OFXFile -> Rep OFXFile x
Generic, Typeable)
newline :: Parser ()
newline :: Parser ()
newline = () () -> ParsecT [Char] () Identity Char -> Parser ()
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'\n' Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> () () -> ParsecT [Char] () Identity Char -> Parser ()
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'\r' ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity Char
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'\n')
Parser () -> [Char] -> Parser ()
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"newline"
escChar :: Parser Char
escChar :: ParsecT [Char] () Identity Char
escChar =
do
Char
c <- ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
anyChar
case Char
c of
Char
'&' -> do
let mkParser :: (a, [Char]) -> ParsecT s u m a
mkParser (a
ch, [Char]
str) = ParsecT s u m a -> ParsecT s u m a
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (a
ch a -> ParsecT s u m [Char] -> ParsecT s u m a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ [Char] -> ParsecT s u m [Char]
forall s (m :: * -> *) u.
Stream s m Char =>
[Char] -> ParsecT s u m [Char]
string [Char]
str)
Char
ent <- [ParsecT [Char] () Identity Char]
-> ParsecT [Char] () Identity Char
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
choice (((Char, [Char]) -> ParsecT [Char] () Identity Char)
-> [(Char, [Char])] -> [ParsecT [Char] () Identity Char]
forall a b. (a -> b) -> [a] -> [b]
map (Char, [Char]) -> ParsecT [Char] () Identity Char
forall {s} {m :: * -> *} {a} {u}.
Stream s m Char =>
(a, [Char]) -> ParsecT s u m a
mkParser
[(Char
'<', [Char]
"lt"), (Char
'>', [Char]
"gt"), (Char
'&', [Char]
"amp")])
ParsecT [Char] () Identity Char
-> [Char] -> ParsecT [Char] () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> ( [Char]
"entity (\"lt\", \"gt\", or \"amp\")\n"
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"some banks create broken OFX files. Try\n"
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"removing the ampersands from the file and\n"
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"trying again.")
Char
_ <- Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
';'
Char -> ParsecT [Char] () Identity Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
ent
Char
_ -> Char -> ParsecT [Char] () Identity Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
c
ParsecT [Char] () Identity Char
-> [Char] -> ParsecT [Char] () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"character"
header :: Parser OFXHeader
= [Char] -> [Char] -> OFXHeader
OFXHeader
([Char] -> [Char] -> OFXHeader)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity ([Char] -> OFXHeader)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
anyChar (Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
':')
ParsecT [Char] () Identity ([Char] -> OFXHeader)
-> ParsecT [Char] () Identity (Maybe [Char])
-> ParsecT [Char] () Identity ([Char] -> OFXHeader)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity (Maybe [Char])
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
' '))
ParsecT [Char] () Identity ([Char] -> OFXHeader)
-> ParsecT [Char] () Identity [Char] -> Parser OFXHeader
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ParsecT [Char] () Identity Char
-> Parser () -> ParsecT [Char] () Identity [Char]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
anyChar Parser ()
newline
Parser OFXHeader -> [Char] -> Parser OFXHeader
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"OFX header"
openingTag :: Parser TagName
openingTag :: ParsecT [Char] () Identity [Char]
openingTag =
do
Char
_ <- Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'<'
[Char]
cs <- ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT [Char] () Identity Char
escChar (Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'>')
case [Char]
cs of
[] -> [Char] -> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail [Char]
"opening tag with empty name"
Char
x:[Char]
_ ->
if Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'/'
then [Char] -> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail [Char]
"this is a closing tag"
else [Char] -> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
cs
ParsecT [Char] () Identity [Char]
-> [Char] -> ParsecT [Char] () Identity [Char]
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"opening tag"
closingTag :: TagName -> Parser ()
closingTag :: [Char] -> Parser ()
closingTag [Char]
n =
do
Char
_ <- Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'<'
Char
_ <- Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'/'
[Char]
cs <- ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT [Char] () Identity Char
escChar (Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'>')
if [Char]
cs [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
n
then () -> Parser ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
else [Char] -> Parser ()
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> Parser ()) -> [Char] -> Parser ()
forall a b. (a -> b) -> a -> b
$ [Char]
"expecting closing tag named " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
n
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"; saw closing tag named " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
cs
Parser () -> [Char] -> Parser ()
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"closing tag named " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
n
tag :: Parser Tag
tag :: Parser Tag
tag =
do
[Char]
n <- ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (ParsecT [Char] () Identity [Char]
openingTag ParsecT [Char] () Identity [Char]
-> Parser () -> ParsecT [Char] () Identity [Char]
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces)
[Tag]
children <- Parser Tag -> ParsecT [Char] () Identity [Tag]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many Parser Tag
tag
if [Tag] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Tag]
children
then [Char] -> Either [Char] [Tag] -> Tag
Tag [Char]
n (Either [Char] [Tag] -> Tag)
-> ([Char] -> Either [Char] [Tag]) -> [Char] -> Tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Either [Char] [Tag]
forall a b. a -> Either a b
Left
([Char] -> Tag) -> ParsecT [Char] () Identity [Char] -> Parser Tag
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT [Char] () Identity Char
-> Parser () -> ParsecT [Char] () Identity [Char]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT [Char] () Identity Char
escChar
(Parser ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser () -> Parser ()
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
lookAhead (() () -> ParsecT [Char] () Identity Char -> Parser ()
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'<') Parser () -> Parser () -> Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser ()
newline)
Parser Tag -> Parser () -> Parser Tag
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
Parser Tag -> ParsecT [Char] () Identity (Maybe ()) -> Parser Tag
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser () -> ParsecT [Char] () Identity (Maybe ())
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser () -> Parser ()
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try ([Char] -> Parser ()
closingTag [Char]
n))
Parser Tag -> Parser () -> Parser Tag
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
else [Char] -> Either [Char] [Tag] -> Tag
Tag [Char]
n ([Tag] -> Either [Char] [Tag]
forall a b. b -> Either a b
Right [Tag]
children) Tag -> Parser () -> Parser Tag
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ()
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces Parser Tag -> Parser () -> Parser Tag
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* [Char] -> Parser ()
closingTag [Char]
n
Parser Tag -> Parser () -> Parser Tag
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
Parser Tag -> [Char] -> Parser Tag
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"OFX tag"
ofxFile :: Parser OFXFile
ofxFile :: Parser OFXFile
ofxFile
= [OFXHeader] -> Tag -> OFXFile
OFXFile
([OFXHeader] -> Tag -> OFXFile)
-> ParsecT [Char] () Identity [OFXHeader]
-> ParsecT [Char] () Identity (Tag -> OFXFile)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser OFXHeader
-> Parser () -> ParsecT [Char] () Identity [OFXHeader]
forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill Parser OFXHeader
header Parser ()
newline
ParsecT [Char] () Identity (Tag -> OFXFile)
-> Parser Tag -> Parser OFXFile
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Tag
tag
Parser OFXFile -> Parser () -> Parser OFXFile
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
Parser OFXFile -> Parser () -> Parser OFXFile
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
Parser OFXFile -> [Char] -> Parser OFXFile
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"OFX file"
parseDate :: String -> Err T.ZonedTime
parseDate :: [Char] -> Err ZonedTime
parseDate [Char]
s = case Parsec [Char] () ZonedTime
-> [Char] -> [Char] -> Either ParseError ZonedTime
forall s t a.
Stream s Identity t =>
Parsec s () a -> [Char] -> s -> Either ParseError a
P.parse Parsec [Char] () ZonedTime
date [Char]
"" [Char]
s of
Left ParseError
e -> [Char] -> Err ZonedTime
forall a b. a -> Either a b
Left ([Char] -> Err ZonedTime) -> [Char] -> Err ZonedTime
forall a b. (a -> b) -> a -> b
$ [Char]
"could not parse date: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
s [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
": "
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ ParseError -> [Char]
forall a. Show a => a -> [Char]
show ParseError
e
Right ZonedTime
g -> ZonedTime -> Err ZonedTime
forall (m :: * -> *) a. Monad m => a -> m a
return ZonedTime
g
date :: Parser T.ZonedTime
date :: Parsec [Char] () ZonedTime
date =
do
Integer
ys <- ([Char] -> Integer)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Integer
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Char] -> Integer
forall a. Read a => [Char] -> a
read (ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Integer)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Integer
forall a b. (a -> b) -> a -> b
$ Int
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
4 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Int
ms <- ([Char] -> Int)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Char] -> Int
forall a. Read a => [Char] -> a
read (ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int
forall a b. (a -> b) -> a -> b
$ Int
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
2 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Int
ds <- ([Char] -> Int)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Char] -> Int
forall a. Read a => [Char] -> a
read (ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int
forall a b. (a -> b) -> a -> b
$ Int
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
2 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Day
day <- case Integer -> Int -> Int -> Maybe Day
T.fromGregorianValid Integer
ys Int
ms Int
ds of
Maybe Day
Nothing -> [Char] -> ParsecT [Char] () Identity Day
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> ParsecT [Char] () Identity Day)
-> [Char] -> ParsecT [Char] () Identity Day
forall a b. (a -> b) -> a -> b
$ [Char]
"invalid date: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ Integer -> [Char]
forall a. Show a => a -> [Char]
show Integer
ys
[Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"-" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> [Char]
forall a. Show a => a -> [Char]
show Int
ms [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"-" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> [Char]
forall a. Show a => a -> [Char]
show Int
ds
Just Day
d -> Day -> ParsecT [Char] () Identity Day
forall (m :: * -> *) a. Monad m => a -> m a
return Day
d
Maybe (TimeOfDay, TimeZone)
mayTime <- ParsecT [Char] () Identity (TimeOfDay, TimeZone)
-> ParsecT [Char] () Identity (Maybe (TimeOfDay, TimeZone))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional ParsecT [Char] () Identity (TimeOfDay, TimeZone)
time
case Maybe (TimeOfDay, TimeZone)
mayTime of
Maybe (TimeOfDay, TimeZone)
Nothing ->
let localTime :: LocalTime
localTime = Day -> TimeOfDay -> LocalTime
T.LocalTime Day
day TimeOfDay
T.midnight
in ZonedTime -> Parsec [Char] () ZonedTime
forall (m :: * -> *) a. Monad m => a -> m a
return (ZonedTime -> Parsec [Char] () ZonedTime)
-> ZonedTime -> Parsec [Char] () ZonedTime
forall a b. (a -> b) -> a -> b
$ LocalTime -> TimeZone -> ZonedTime
T.ZonedTime LocalTime
localTime TimeZone
T.utc
Just (TimeOfDay
t, TimeZone
z) -> ZonedTime -> Parsec [Char] () ZonedTime
forall (m :: * -> *) a. Monad m => a -> m a
return (ZonedTime -> Parsec [Char] () ZonedTime)
-> ZonedTime -> Parsec [Char] () ZonedTime
forall a b. (a -> b) -> a -> b
$ LocalTime -> TimeZone -> ZonedTime
T.ZonedTime (Day -> TimeOfDay -> LocalTime
T.LocalTime Day
day TimeOfDay
t) TimeZone
z
Parsec [Char] () ZonedTime -> [Char] -> Parsec [Char] () ZonedTime
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"date"
time :: Parser (T.TimeOfDay, T.TimeZone)
time :: ParsecT [Char] () Identity (TimeOfDay, TimeZone)
time =
do
Int
h <- ([Char] -> Int)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Char] -> Int
forall a. Read a => [Char] -> a
read (ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int
forall a b. (a -> b) -> a -> b
$ Int
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
2 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Int
m <- ([Char] -> Int)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Char] -> Int
forall a. Read a => [Char] -> a
read (ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Int
forall a b. (a -> b) -> a -> b
$ Int
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
2 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Pico
s <- ([Char] -> Pico)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Pico
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [Char] -> Pico
forall a. Read a => [Char] -> a
read (ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Pico)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Pico
forall a b. (a -> b) -> a -> b
$ Int
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
2 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
(Pico
milli, TimeZone
tz) <- do
Maybe Char
mayDot <- ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity (Maybe Char)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'.')
case Maybe Char
mayDot of
Maybe Char
Nothing -> (Pico, TimeZone) -> ParsecT [Char] () Identity (Pico, TimeZone)
forall (m :: * -> *) a. Monad m => a -> m a
return (Pico
0, TimeZone
T.utc)
Just Char
_ -> do
Pico
mil <- ([Char] -> Pico)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Pico
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Pico -> Pico -> Pico
forall a. Fractional a => a -> a -> a
/ Pico
1000) (Pico -> Pico) -> ([Char] -> Pico) -> [Char] -> Pico
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Pico
forall a. Read a => [Char] -> a
read) (ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Pico)
-> ParsecT [Char] () Identity [Char]
-> ParsecT [Char] () Identity Pico
forall a b. (a -> b) -> a -> b
$ Int
-> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
3 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Maybe TimeZone
mayTz <- ParsecT [Char] () Identity TimeZone
-> ParsecT [Char] () Identity (Maybe TimeZone)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional ParsecT [Char] () Identity TimeZone
tzOffset
case Maybe TimeZone
mayTz of
Maybe TimeZone
Nothing -> (Pico, TimeZone) -> ParsecT [Char] () Identity (Pico, TimeZone)
forall (m :: * -> *) a. Monad m => a -> m a
return (Pico
mil, TimeZone
T.utc)
Just TimeZone
t -> (Pico, TimeZone) -> ParsecT [Char] () Identity (Pico, TimeZone)
forall (m :: * -> *) a. Monad m => a -> m a
return (Pico
mil, TimeZone
t)
let sec :: Pico
sec = Pico
s Pico -> Pico -> Pico
forall a. Num a => a -> a -> a
+ Pico
milli
(TimeOfDay, TimeZone)
-> ParsecT [Char] () Identity (TimeOfDay, TimeZone)
forall (m :: * -> *) a. Monad m => a -> m a
return (Int -> Int -> Pico -> TimeOfDay
T.TimeOfDay Int
h Int
m Pico
sec, TimeZone
tz)
ParsecT [Char] () Identity (TimeOfDay, TimeZone)
-> [Char] -> ParsecT [Char] () Identity (TimeOfDay, TimeZone)
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"time"
tzOffset :: Parser T.TimeZone
tzOffset :: ParsecT [Char] () Identity TimeZone
tzOffset =
do
Char
_ <- Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'['
Int -> Int
sn <- ParsecT [Char] () Identity (Int -> Int)
forall {u}. ParsecT [Char] u Identity (Int -> Int)
parseSign
[Char]
whole <- ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Maybe Char
mayDot <- ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity (Maybe Char)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'.')
[Char]
frac <- case Maybe Char
mayDot of
Maybe Char
Nothing -> [Char] -> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
"0"
Just Char
_ -> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
Maybe Char
mayColon <- ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity (Maybe Char)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
':')
[Char]
name <- case Maybe Char
mayColon of
Maybe Char
Nothing -> [Char] -> ParsecT [Char] () Identity [Char]
forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
""
Just Char
_ -> ParsecT [Char] () Identity Char
-> ParsecT [Char] () Identity [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 ParsecT [Char] () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
P.letter
Char
_ <- Char -> ParsecT [Char] () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
']'
let off :: Int
off = Int -> Int
sn (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ Double -> Int
forall a b. (RealFrac a, Integral b) => a -> b
round (([Char] -> Double
forall a. Read a => [Char] -> a
read ([Char]
whole [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
"." [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
frac))
Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
60 :: Double))
TimeZone -> ParsecT [Char] () Identity TimeZone
forall (m :: * -> *) a. Monad m => a -> m a
return (TimeZone -> ParsecT [Char] () Identity TimeZone)
-> TimeZone -> ParsecT [Char] () Identity TimeZone
forall a b. (a -> b) -> a -> b
$ Int -> Bool -> [Char] -> TimeZone
T.TimeZone Int
off Bool
False [Char]
name
ParsecT [Char] () Identity TimeZone
-> [Char] -> ParsecT [Char] () Identity TimeZone
forall s u (m :: * -> *) a.
ParsecT s u m a -> [Char] -> ParsecT s u m a
<?> [Char]
"time zone offset"
where
parseSign :: ParsecT [Char] u Identity (Int -> Int)
parseSign = do
Maybe Char
mayMinus <- ParsecT [Char] u Identity Char
-> ParsecT [Char] u Identity (Maybe Char)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Char -> ParsecT [Char] u Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'-')
case Maybe Char
mayMinus of
Maybe Char
Nothing -> do
Maybe Char
mayPlus <- ParsecT [Char] u Identity Char
-> ParsecT [Char] u Identity (Maybe Char)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Char -> ParsecT [Char] u Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'+')
(Int -> Int) -> ParsecT [Char] u Identity (Int -> Int)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Int -> Int) -> ParsecT [Char] u Identity (Int -> Int))
-> (Int -> Int) -> ParsecT [Char] u Identity (Int -> Int)
forall a b. (a -> b) -> a -> b
$ case Maybe Char
mayPlus of
Maybe Char
Nothing -> Int -> Int
forall a. a -> a
id
Just Char
_ -> Int -> Int
forall a. Num a => a -> a
negate
Just Char
_ -> (Int -> Int) -> ParsecT [Char] u Identity (Int -> Int)
forall (m :: * -> *) a. Monad m => a -> m a
return Int -> Int
forall a. Num a => a -> a
negate
find :: TagName -> Tag -> [Tag]
find :: [Char] -> Tag -> [Tag]
find [Char]
n t :: Tag
t@(Tag [Char]
x Either [Char] [Tag]
p)
| [Char]
n [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
x = [Tag
t]
| Bool
otherwise = case Either [Char] [Tag]
p of
Left [Char]
_ -> []
Right [Tag]
ts -> (Tag -> [Tag]) -> [Tag] -> [Tag]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap ([Char] -> Tag -> [Tag]
find [Char]
n) [Tag]
ts
findPath :: [TagName] -> Tag -> Maybe Tag
findPath :: [[Char]] -> Tag -> Maybe Tag
findPath [] Tag
t = Tag -> Maybe Tag
forall a. a -> Maybe a
Just Tag
t
findPath ([Char]
n:[[Char]]
ns) Tag
t = case [Tag] -> Maybe Tag
forall a. [a] -> Maybe a
listToMaybe ([Char] -> Tag -> [Tag]
find [Char]
n Tag
t) of
Maybe Tag
Nothing -> Maybe Tag
forall a. Maybe a
Nothing
Just Tag
r -> [[Char]] -> Tag -> Maybe Tag
findPath [[Char]]
ns Tag
r
tagData :: Tag -> Maybe TagData
tagData :: Tag -> Maybe [Char]
tagData (Tag [Char]
_ Either [Char] [Tag]
ei) = ([Char] -> Maybe [Char])
-> ([Tag] -> Maybe [Char]) -> Either [Char] [Tag] -> Maybe [Char]
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either [Char] -> Maybe [Char]
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe [Char] -> [Tag] -> Maybe [Char]
forall a b. a -> b -> a
const Maybe [Char]
forall a. Maybe a
Nothing) Either [Char] [Tag]
ei
pathData :: [TagName] -> OFXFile -> Maybe TagData
pathData :: [[Char]] -> OFXFile -> Maybe [Char]
pathData [[Char]]
p (OFXFile [OFXHeader]
_ Tag
t) = [[Char]] -> Tag -> Maybe Tag
findPath [[Char]]
p Tag
t Maybe Tag -> (Tag -> Maybe [Char]) -> Maybe [Char]
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Tag -> Maybe [Char]
tagData
fiName :: OFXFile -> Maybe TagData
fiName :: OFXFile -> Maybe [Char]
fiName = [[Char]] -> OFXFile -> Maybe [Char]
pathData [[Char]
"SIGNONMSGSRSV1", [Char]
"SONRS", [Char]
"FI", [Char]
"ORG"]
creditCardNumber :: OFXFile -> Maybe TagData
creditCardNumber :: OFXFile -> Maybe [Char]
creditCardNumber =
[[Char]] -> OFXFile -> Maybe [Char]
pathData [ [Char]
"CREDITCARDMSGSRSV1", [Char]
"CCSTMTTRNRS", [Char]
"CCSTMTRS",
[Char]
"CCACCTFROM", [Char]
"ACCTID" ]
bankAccountNumber :: OFXFile -> Maybe TagData
bankAccountNumber :: OFXFile -> Maybe [Char]
bankAccountNumber =
[[Char]] -> OFXFile -> Maybe [Char]
pathData [ [Char]
"BANKMSGSRSV1", [Char]
"STMTTRNRS", [Char]
"STMTRS",
[Char]
"BANKACCTFROM", [Char]
"ACCTID" ]
accountNumber :: OFXFile -> Maybe TagData
accountNumber :: OFXFile -> Maybe [Char]
accountNumber OFXFile
f = OFXFile -> Maybe [Char]
creditCardNumber OFXFile
f Maybe [Char] -> Maybe [Char] -> Maybe [Char]
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> OFXFile -> Maybe [Char]
bankAccountNumber OFXFile
f
findData :: TagName -> Tag -> Maybe TagData
findData :: [Char] -> Tag -> Maybe [Char]
findData [Char]
n (Tag [Char]
tn Either [Char] [Tag]
e) = case Either [Char] [Tag]
e of
Left [Char]
d -> if [Char]
tn [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
n then [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
d else Maybe [Char]
forall a. Maybe a
Nothing
Right [Tag]
ts -> First [Char] -> Maybe [Char]
forall a. First a -> Maybe a
M.getFirst (First [Char] -> Maybe [Char])
-> ([Tag] -> First [Char]) -> [Tag] -> Maybe [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [First [Char]] -> First [Char]
forall a. Monoid a => [a] -> a
M.mconcat ([First [Char]] -> First [Char])
-> ([Tag] -> [First [Char]]) -> [Tag] -> First [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Maybe [Char] -> First [Char]) -> [Maybe [Char]] -> [First [Char]]
forall a b. (a -> b) -> [a] -> [b]
map Maybe [Char] -> First [Char]
forall a. Maybe a -> First a
M.First
([Maybe [Char]] -> [First [Char]])
-> ([Tag] -> [Maybe [Char]]) -> [Tag] -> [First [Char]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Tag -> Maybe [Char]) -> [Tag] -> [Maybe [Char]]
forall a b. (a -> b) -> [a] -> [b]
map ([Char] -> Tag -> Maybe [Char]
findData [Char]
n) ([Tag] -> Maybe [Char]) -> [Tag] -> Maybe [Char]
forall a b. (a -> b) -> a -> b
$ [Tag]
ts
required :: TagName -> Tag -> Err TagData
required :: [Char] -> Tag -> Err [Char]
required [Char]
n Tag
t = case [Char] -> Tag -> Maybe [Char]
findData [Char]
n Tag
t of
Maybe [Char]
Nothing -> [Char] -> Err [Char]
forall a b. a -> Either a b
Left ([Char] -> Err [Char]) -> [Char] -> Err [Char]
forall a b. (a -> b) -> a -> b
$ [Char]
"required tag missing: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
n
Just [Char]
r -> [Char] -> Err [Char]
forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
r
data TrnType
= TCREDIT
| TDEBIT
| TINT
| TDIV
| TFEE
| TSRVCHG
| TDEP
| TATM
| TPOS
| TXFER
| TCHECK
| TPAYMENT
| TCASH
| TDIRECTDEP
| TDIRECTDEBIT
| TREPEATPMT
| TOTHER
deriving (TrnType -> TrnType -> Bool
(TrnType -> TrnType -> Bool)
-> (TrnType -> TrnType -> Bool) -> Eq TrnType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TrnType -> TrnType -> Bool
$c/= :: TrnType -> TrnType -> Bool
== :: TrnType -> TrnType -> Bool
$c== :: TrnType -> TrnType -> Bool
Eq, Eq TrnType
Eq TrnType
-> (TrnType -> TrnType -> Ordering)
-> (TrnType -> TrnType -> Bool)
-> (TrnType -> TrnType -> Bool)
-> (TrnType -> TrnType -> Bool)
-> (TrnType -> TrnType -> Bool)
-> (TrnType -> TrnType -> TrnType)
-> (TrnType -> TrnType -> TrnType)
-> Ord TrnType
TrnType -> TrnType -> Bool
TrnType -> TrnType -> Ordering
TrnType -> TrnType -> TrnType
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TrnType -> TrnType -> TrnType
$cmin :: TrnType -> TrnType -> TrnType
max :: TrnType -> TrnType -> TrnType
$cmax :: TrnType -> TrnType -> TrnType
>= :: TrnType -> TrnType -> Bool
$c>= :: TrnType -> TrnType -> Bool
> :: TrnType -> TrnType -> Bool
$c> :: TrnType -> TrnType -> Bool
<= :: TrnType -> TrnType -> Bool
$c<= :: TrnType -> TrnType -> Bool
< :: TrnType -> TrnType -> Bool
$c< :: TrnType -> TrnType -> Bool
compare :: TrnType -> TrnType -> Ordering
$ccompare :: TrnType -> TrnType -> Ordering
Ord, Int -> TrnType -> ShowS
[TrnType] -> ShowS
TrnType -> [Char]
(Int -> TrnType -> ShowS)
-> (TrnType -> [Char]) -> ([TrnType] -> ShowS) -> Show TrnType
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [TrnType] -> ShowS
$cshowList :: [TrnType] -> ShowS
show :: TrnType -> [Char]
$cshow :: TrnType -> [Char]
showsPrec :: Int -> TrnType -> ShowS
$cshowsPrec :: Int -> TrnType -> ShowS
Show, ReadPrec [TrnType]
ReadPrec TrnType
Int -> ReadS TrnType
ReadS [TrnType]
(Int -> ReadS TrnType)
-> ReadS [TrnType]
-> ReadPrec TrnType
-> ReadPrec [TrnType]
-> Read TrnType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [TrnType]
$creadListPrec :: ReadPrec [TrnType]
readPrec :: ReadPrec TrnType
$creadPrec :: ReadPrec TrnType
readList :: ReadS [TrnType]
$creadList :: ReadS [TrnType]
readsPrec :: Int -> ReadS TrnType
$creadsPrec :: Int -> ReadS TrnType
Read, Typeable TrnType
Typeable TrnType
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> TrnType -> c TrnType)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c TrnType)
-> (TrnType -> Constr)
-> (TrnType -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c TrnType))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c TrnType))
-> ((forall b. Data b => b -> b) -> TrnType -> TrnType)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> TrnType -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> TrnType -> r)
-> (forall u. (forall d. Data d => d -> u) -> TrnType -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> TrnType -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType)
-> Data TrnType
TrnType -> DataType
TrnType -> Constr
(forall b. Data b => b -> b) -> TrnType -> TrnType
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> TrnType -> u
forall u. (forall d. Data d => d -> u) -> TrnType -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> TrnType -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> TrnType -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c TrnType
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> TrnType -> c TrnType
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c TrnType)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c TrnType)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> TrnType -> m TrnType
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> TrnType -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> TrnType -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> TrnType -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> TrnType -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> TrnType -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> TrnType -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> TrnType -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> TrnType -> r
gmapT :: (forall b. Data b => b -> b) -> TrnType -> TrnType
$cgmapT :: (forall b. Data b => b -> b) -> TrnType -> TrnType
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c TrnType)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c TrnType)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c TrnType)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c TrnType)
dataTypeOf :: TrnType -> DataType
$cdataTypeOf :: TrnType -> DataType
toConstr :: TrnType -> Constr
$ctoConstr :: TrnType -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c TrnType
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c TrnType
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> TrnType -> c TrnType
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> TrnType -> c TrnType
Data, (forall x. TrnType -> Rep TrnType x)
-> (forall x. Rep TrnType x -> TrnType) -> Generic TrnType
forall x. Rep TrnType x -> TrnType
forall x. TrnType -> Rep TrnType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TrnType x -> TrnType
$cfrom :: forall x. TrnType -> Rep TrnType x
Generic, Typeable)
data Transaction = Transaction
{ Transaction -> TrnType
txTRNTYPE :: TrnType
, Transaction -> ZonedTime
txDTPOSTED :: T.ZonedTime
, Transaction -> Maybe ZonedTime
txDTUSER :: Maybe T.ZonedTime
, Transaction -> Maybe ZonedTime
txDTAVAIL :: Maybe T.ZonedTime
, Transaction -> [Char]
txTRNAMT :: String
, Transaction -> [Char]
txFITID :: String
, Transaction -> Maybe [Char]
txCORRECTFITID :: Maybe String
, Transaction -> Maybe CorrectAction
txCORRECTACTION :: Maybe CorrectAction
, Transaction -> Maybe [Char]
txSRVRTID :: Maybe String
, Transaction -> Maybe [Char]
txCHECKNUM :: Maybe String
, Transaction -> Maybe [Char]
txREFNUM :: Maybe String
, Transaction -> Maybe [Char]
txSIC :: Maybe String
, Transaction -> Maybe [Char]
txPAYEEID :: Maybe String
, Transaction -> Maybe (Either [Char] Payee)
txPayeeInfo :: Maybe (Either String Payee)
, Transaction -> Maybe (Either BankAcctTo CCAcctTo)
txAccountTo :: Maybe (Either BankAcctTo CCAcctTo)
, Transaction -> Maybe [Char]
txMEMO :: Maybe String
, Transaction -> Maybe (Either Currency OrigCurrency)
txCurrency :: Maybe (Either Currency OrigCurrency)
} deriving (Int -> Transaction -> ShowS
[Transaction] -> ShowS
Transaction -> [Char]
(Int -> Transaction -> ShowS)
-> (Transaction -> [Char])
-> ([Transaction] -> ShowS)
-> Show Transaction
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Transaction] -> ShowS
$cshowList :: [Transaction] -> ShowS
show :: Transaction -> [Char]
$cshow :: Transaction -> [Char]
showsPrec :: Int -> Transaction -> ShowS
$cshowsPrec :: Int -> Transaction -> ShowS
Show, ReadPrec [Transaction]
ReadPrec Transaction
Int -> ReadS Transaction
ReadS [Transaction]
(Int -> ReadS Transaction)
-> ReadS [Transaction]
-> ReadPrec Transaction
-> ReadPrec [Transaction]
-> Read Transaction
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Transaction]
$creadListPrec :: ReadPrec [Transaction]
readPrec :: ReadPrec Transaction
$creadPrec :: ReadPrec Transaction
readList :: ReadS [Transaction]
$creadList :: ReadS [Transaction]
readsPrec :: Int -> ReadS Transaction
$creadsPrec :: Int -> ReadS Transaction
Read, Typeable Transaction
Typeable Transaction
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Transaction -> c Transaction)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Transaction)
-> (Transaction -> Constr)
-> (Transaction -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Transaction))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Transaction))
-> ((forall b. Data b => b -> b) -> Transaction -> Transaction)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Transaction -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Transaction -> r)
-> (forall u. (forall d. Data d => d -> u) -> Transaction -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> Transaction -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction)
-> Data Transaction
Transaction -> DataType
Transaction -> Constr
(forall b. Data b => b -> b) -> Transaction -> Transaction
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Transaction -> u
forall u. (forall d. Data d => d -> u) -> Transaction -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Transaction -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Transaction -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Transaction
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Transaction -> c Transaction
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Transaction)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Transaction)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Transaction -> m Transaction
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Transaction -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Transaction -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Transaction -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Transaction -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Transaction -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Transaction -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Transaction -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Transaction -> r
gmapT :: (forall b. Data b => b -> b) -> Transaction -> Transaction
$cgmapT :: (forall b. Data b => b -> b) -> Transaction -> Transaction
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Transaction)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Transaction)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Transaction)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Transaction)
dataTypeOf :: Transaction -> DataType
$cdataTypeOf :: Transaction -> DataType
toConstr :: Transaction -> Constr
$ctoConstr :: Transaction -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Transaction
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Transaction
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Transaction -> c Transaction
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Transaction -> c Transaction
Data, (forall x. Transaction -> Rep Transaction x)
-> (forall x. Rep Transaction x -> Transaction)
-> Generic Transaction
forall x. Rep Transaction x -> Transaction
forall x. Transaction -> Rep Transaction x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Transaction x -> Transaction
$cfrom :: forall x. Transaction -> Rep Transaction x
Generic, Typeable)
data Payee = Payee
{ Payee -> [Char]
peNAME :: String
, Payee -> [Char]
peADDR1 :: String
, Payee -> Maybe [Char]
peADDR2 :: Maybe String
, Payee -> Maybe [Char]
peADDR3 :: Maybe String
, Payee -> [Char]
peCITY :: String
, Payee -> [Char]
peSTATE :: String
, Payee -> [Char]
pePOSTALCODE :: String
, Payee -> Maybe [Char]
peCOUNTRY :: Maybe String
, Payee -> [Char]
pePHONE :: String
} deriving (Payee -> Payee -> Bool
(Payee -> Payee -> Bool) -> (Payee -> Payee -> Bool) -> Eq Payee
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Payee -> Payee -> Bool
$c/= :: Payee -> Payee -> Bool
== :: Payee -> Payee -> Bool
$c== :: Payee -> Payee -> Bool
Eq, Int -> Payee -> ShowS
[Payee] -> ShowS
Payee -> [Char]
(Int -> Payee -> ShowS)
-> (Payee -> [Char]) -> ([Payee] -> ShowS) -> Show Payee
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Payee] -> ShowS
$cshowList :: [Payee] -> ShowS
show :: Payee -> [Char]
$cshow :: Payee -> [Char]
showsPrec :: Int -> Payee -> ShowS
$cshowsPrec :: Int -> Payee -> ShowS
Show, ReadPrec [Payee]
ReadPrec Payee
Int -> ReadS Payee
ReadS [Payee]
(Int -> ReadS Payee)
-> ReadS [Payee]
-> ReadPrec Payee
-> ReadPrec [Payee]
-> Read Payee
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Payee]
$creadListPrec :: ReadPrec [Payee]
readPrec :: ReadPrec Payee
$creadPrec :: ReadPrec Payee
readList :: ReadS [Payee]
$creadList :: ReadS [Payee]
readsPrec :: Int -> ReadS Payee
$creadsPrec :: Int -> ReadS Payee
Read, Typeable Payee
Typeable Payee
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Payee -> c Payee)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Payee)
-> (Payee -> Constr)
-> (Payee -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Payee))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Payee))
-> ((forall b. Data b => b -> b) -> Payee -> Payee)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Payee -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Payee -> r)
-> (forall u. (forall d. Data d => d -> u) -> Payee -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Payee -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee)
-> Data Payee
Payee -> DataType
Payee -> Constr
(forall b. Data b => b -> b) -> Payee -> Payee
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Payee -> u
forall u. (forall d. Data d => d -> u) -> Payee -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Payee -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Payee -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Payee
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Payee -> c Payee
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Payee)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Payee)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Payee -> m Payee
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Payee -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Payee -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Payee -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Payee -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Payee -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Payee -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Payee -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Payee -> r
gmapT :: (forall b. Data b => b -> b) -> Payee -> Payee
$cgmapT :: (forall b. Data b => b -> b) -> Payee -> Payee
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Payee)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Payee)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Payee)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Payee)
dataTypeOf :: Payee -> DataType
$cdataTypeOf :: Payee -> DataType
toConstr :: Payee -> Constr
$ctoConstr :: Payee -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Payee
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Payee
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Payee -> c Payee
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Payee -> c Payee
Data, (forall x. Payee -> Rep Payee x)
-> (forall x. Rep Payee x -> Payee) -> Generic Payee
forall x. Rep Payee x -> Payee
forall x. Payee -> Rep Payee x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Payee x -> Payee
$cfrom :: forall x. Payee -> Rep Payee x
Generic, Typeable)
data CorrectAction
= REPLACE
| DELETE
deriving (CorrectAction -> CorrectAction -> Bool
(CorrectAction -> CorrectAction -> Bool)
-> (CorrectAction -> CorrectAction -> Bool) -> Eq CorrectAction
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CorrectAction -> CorrectAction -> Bool
$c/= :: CorrectAction -> CorrectAction -> Bool
== :: CorrectAction -> CorrectAction -> Bool
$c== :: CorrectAction -> CorrectAction -> Bool
Eq, Int -> CorrectAction -> ShowS
[CorrectAction] -> ShowS
CorrectAction -> [Char]
(Int -> CorrectAction -> ShowS)
-> (CorrectAction -> [Char])
-> ([CorrectAction] -> ShowS)
-> Show CorrectAction
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CorrectAction] -> ShowS
$cshowList :: [CorrectAction] -> ShowS
show :: CorrectAction -> [Char]
$cshow :: CorrectAction -> [Char]
showsPrec :: Int -> CorrectAction -> ShowS
$cshowsPrec :: Int -> CorrectAction -> ShowS
Show, ReadPrec [CorrectAction]
ReadPrec CorrectAction
Int -> ReadS CorrectAction
ReadS [CorrectAction]
(Int -> ReadS CorrectAction)
-> ReadS [CorrectAction]
-> ReadPrec CorrectAction
-> ReadPrec [CorrectAction]
-> Read CorrectAction
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CorrectAction]
$creadListPrec :: ReadPrec [CorrectAction]
readPrec :: ReadPrec CorrectAction
$creadPrec :: ReadPrec CorrectAction
readList :: ReadS [CorrectAction]
$creadList :: ReadS [CorrectAction]
readsPrec :: Int -> ReadS CorrectAction
$creadsPrec :: Int -> ReadS CorrectAction
Read, Typeable CorrectAction
Typeable CorrectAction
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CorrectAction -> c CorrectAction)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CorrectAction)
-> (CorrectAction -> Constr)
-> (CorrectAction -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CorrectAction))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c CorrectAction))
-> ((forall b. Data b => b -> b) -> CorrectAction -> CorrectAction)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CorrectAction -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CorrectAction -> r)
-> (forall u. (forall d. Data d => d -> u) -> CorrectAction -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> CorrectAction -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction)
-> Data CorrectAction
CorrectAction -> DataType
CorrectAction -> Constr
(forall b. Data b => b -> b) -> CorrectAction -> CorrectAction
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> CorrectAction -> u
forall u. (forall d. Data d => d -> u) -> CorrectAction -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CorrectAction -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CorrectAction -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CorrectAction
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CorrectAction -> c CorrectAction
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CorrectAction)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c CorrectAction)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CorrectAction -> m CorrectAction
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CorrectAction -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CorrectAction -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> CorrectAction -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> CorrectAction -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CorrectAction -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CorrectAction -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CorrectAction -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CorrectAction -> r
gmapT :: (forall b. Data b => b -> b) -> CorrectAction -> CorrectAction
$cgmapT :: (forall b. Data b => b -> b) -> CorrectAction -> CorrectAction
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c CorrectAction)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c CorrectAction)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CorrectAction)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CorrectAction)
dataTypeOf :: CorrectAction -> DataType
$cdataTypeOf :: CorrectAction -> DataType
toConstr :: CorrectAction -> Constr
$ctoConstr :: CorrectAction -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CorrectAction
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CorrectAction
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CorrectAction -> c CorrectAction
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CorrectAction -> c CorrectAction
Data, (forall x. CorrectAction -> Rep CorrectAction x)
-> (forall x. Rep CorrectAction x -> CorrectAction)
-> Generic CorrectAction
forall x. Rep CorrectAction x -> CorrectAction
forall x. CorrectAction -> Rep CorrectAction x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CorrectAction x -> CorrectAction
$cfrom :: forall x. CorrectAction -> Rep CorrectAction x
Generic, Typeable)
data BankAcctTo = BankAcctTo
{ BankAcctTo -> [Char]
btBANKID :: String
, BankAcctTo -> Maybe [Char]
btBRANCHID :: Maybe String
, BankAcctTo -> [Char]
btACCTID :: String
, BankAcctTo -> AcctType
btACCTTYPE :: AcctType
, BankAcctTo -> Maybe [Char]
btACCTKEY :: Maybe String
} deriving (Int -> BankAcctTo -> ShowS
[BankAcctTo] -> ShowS
BankAcctTo -> [Char]
(Int -> BankAcctTo -> ShowS)
-> (BankAcctTo -> [Char])
-> ([BankAcctTo] -> ShowS)
-> Show BankAcctTo
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [BankAcctTo] -> ShowS
$cshowList :: [BankAcctTo] -> ShowS
show :: BankAcctTo -> [Char]
$cshow :: BankAcctTo -> [Char]
showsPrec :: Int -> BankAcctTo -> ShowS
$cshowsPrec :: Int -> BankAcctTo -> ShowS
Show, ReadPrec [BankAcctTo]
ReadPrec BankAcctTo
Int -> ReadS BankAcctTo
ReadS [BankAcctTo]
(Int -> ReadS BankAcctTo)
-> ReadS [BankAcctTo]
-> ReadPrec BankAcctTo
-> ReadPrec [BankAcctTo]
-> Read BankAcctTo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [BankAcctTo]
$creadListPrec :: ReadPrec [BankAcctTo]
readPrec :: ReadPrec BankAcctTo
$creadPrec :: ReadPrec BankAcctTo
readList :: ReadS [BankAcctTo]
$creadList :: ReadS [BankAcctTo]
readsPrec :: Int -> ReadS BankAcctTo
$creadsPrec :: Int -> ReadS BankAcctTo
Read, Typeable BankAcctTo
Typeable BankAcctTo
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BankAcctTo -> c BankAcctTo)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BankAcctTo)
-> (BankAcctTo -> Constr)
-> (BankAcctTo -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BankAcctTo))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c BankAcctTo))
-> ((forall b. Data b => b -> b) -> BankAcctTo -> BankAcctTo)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BankAcctTo -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BankAcctTo -> r)
-> (forall u. (forall d. Data d => d -> u) -> BankAcctTo -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> BankAcctTo -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo)
-> Data BankAcctTo
BankAcctTo -> DataType
BankAcctTo -> Constr
(forall b. Data b => b -> b) -> BankAcctTo -> BankAcctTo
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> BankAcctTo -> u
forall u. (forall d. Data d => d -> u) -> BankAcctTo -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BankAcctTo -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BankAcctTo -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BankAcctTo
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BankAcctTo -> c BankAcctTo
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BankAcctTo)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BankAcctTo)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BankAcctTo -> m BankAcctTo
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> BankAcctTo -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> BankAcctTo -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> BankAcctTo -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> BankAcctTo -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BankAcctTo -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BankAcctTo -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BankAcctTo -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BankAcctTo -> r
gmapT :: (forall b. Data b => b -> b) -> BankAcctTo -> BankAcctTo
$cgmapT :: (forall b. Data b => b -> b) -> BankAcctTo -> BankAcctTo
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BankAcctTo)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BankAcctTo)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BankAcctTo)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BankAcctTo)
dataTypeOf :: BankAcctTo -> DataType
$cdataTypeOf :: BankAcctTo -> DataType
toConstr :: BankAcctTo -> Constr
$ctoConstr :: BankAcctTo -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BankAcctTo
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BankAcctTo
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BankAcctTo -> c BankAcctTo
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BankAcctTo -> c BankAcctTo
Data, (forall x. BankAcctTo -> Rep BankAcctTo x)
-> (forall x. Rep BankAcctTo x -> BankAcctTo) -> Generic BankAcctTo
forall x. Rep BankAcctTo x -> BankAcctTo
forall x. BankAcctTo -> Rep BankAcctTo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BankAcctTo x -> BankAcctTo
$cfrom :: forall x. BankAcctTo -> Rep BankAcctTo x
Generic, Typeable)
data CCAcctTo = CCAcctTo
{ CCAcctTo -> [Char]
ctACCTID :: String
, CCAcctTo -> Maybe [Char]
ctACCTKEY :: Maybe String
} deriving (CCAcctTo -> CCAcctTo -> Bool
(CCAcctTo -> CCAcctTo -> Bool)
-> (CCAcctTo -> CCAcctTo -> Bool) -> Eq CCAcctTo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CCAcctTo -> CCAcctTo -> Bool
$c/= :: CCAcctTo -> CCAcctTo -> Bool
== :: CCAcctTo -> CCAcctTo -> Bool
$c== :: CCAcctTo -> CCAcctTo -> Bool
Eq, Int -> CCAcctTo -> ShowS
[CCAcctTo] -> ShowS
CCAcctTo -> [Char]
(Int -> CCAcctTo -> ShowS)
-> (CCAcctTo -> [Char]) -> ([CCAcctTo] -> ShowS) -> Show CCAcctTo
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CCAcctTo] -> ShowS
$cshowList :: [CCAcctTo] -> ShowS
show :: CCAcctTo -> [Char]
$cshow :: CCAcctTo -> [Char]
showsPrec :: Int -> CCAcctTo -> ShowS
$cshowsPrec :: Int -> CCAcctTo -> ShowS
Show, ReadPrec [CCAcctTo]
ReadPrec CCAcctTo
Int -> ReadS CCAcctTo
ReadS [CCAcctTo]
(Int -> ReadS CCAcctTo)
-> ReadS [CCAcctTo]
-> ReadPrec CCAcctTo
-> ReadPrec [CCAcctTo]
-> Read CCAcctTo
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CCAcctTo]
$creadListPrec :: ReadPrec [CCAcctTo]
readPrec :: ReadPrec CCAcctTo
$creadPrec :: ReadPrec CCAcctTo
readList :: ReadS [CCAcctTo]
$creadList :: ReadS [CCAcctTo]
readsPrec :: Int -> ReadS CCAcctTo
$creadsPrec :: Int -> ReadS CCAcctTo
Read, Typeable CCAcctTo
Typeable CCAcctTo
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CCAcctTo -> c CCAcctTo)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CCAcctTo)
-> (CCAcctTo -> Constr)
-> (CCAcctTo -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CCAcctTo))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CCAcctTo))
-> ((forall b. Data b => b -> b) -> CCAcctTo -> CCAcctTo)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CCAcctTo -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CCAcctTo -> r)
-> (forall u. (forall d. Data d => d -> u) -> CCAcctTo -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> CCAcctTo -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo)
-> Data CCAcctTo
CCAcctTo -> DataType
CCAcctTo -> Constr
(forall b. Data b => b -> b) -> CCAcctTo -> CCAcctTo
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> CCAcctTo -> u
forall u. (forall d. Data d => d -> u) -> CCAcctTo -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CCAcctTo -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CCAcctTo -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CCAcctTo
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CCAcctTo -> c CCAcctTo
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CCAcctTo)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CCAcctTo)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CCAcctTo -> m CCAcctTo
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CCAcctTo -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CCAcctTo -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> CCAcctTo -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> CCAcctTo -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CCAcctTo -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CCAcctTo -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CCAcctTo -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CCAcctTo -> r
gmapT :: (forall b. Data b => b -> b) -> CCAcctTo -> CCAcctTo
$cgmapT :: (forall b. Data b => b -> b) -> CCAcctTo -> CCAcctTo
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CCAcctTo)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CCAcctTo)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CCAcctTo)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CCAcctTo)
dataTypeOf :: CCAcctTo -> DataType
$cdataTypeOf :: CCAcctTo -> DataType
toConstr :: CCAcctTo -> Constr
$ctoConstr :: CCAcctTo -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CCAcctTo
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CCAcctTo
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CCAcctTo -> c CCAcctTo
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CCAcctTo -> c CCAcctTo
Data, (forall x. CCAcctTo -> Rep CCAcctTo x)
-> (forall x. Rep CCAcctTo x -> CCAcctTo) -> Generic CCAcctTo
forall x. Rep CCAcctTo x -> CCAcctTo
forall x. CCAcctTo -> Rep CCAcctTo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CCAcctTo x -> CCAcctTo
$cfrom :: forall x. CCAcctTo -> Rep CCAcctTo x
Generic, Typeable)
data AcctType
= ACHECKING
| ASAVINGS
| AMONEYMRKT
| ACREDITLINE
deriving (AcctType -> AcctType -> Bool
(AcctType -> AcctType -> Bool)
-> (AcctType -> AcctType -> Bool) -> Eq AcctType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AcctType -> AcctType -> Bool
$c/= :: AcctType -> AcctType -> Bool
== :: AcctType -> AcctType -> Bool
$c== :: AcctType -> AcctType -> Bool
Eq, Int -> AcctType -> ShowS
[AcctType] -> ShowS
AcctType -> [Char]
(Int -> AcctType -> ShowS)
-> (AcctType -> [Char]) -> ([AcctType] -> ShowS) -> Show AcctType
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [AcctType] -> ShowS
$cshowList :: [AcctType] -> ShowS
show :: AcctType -> [Char]
$cshow :: AcctType -> [Char]
showsPrec :: Int -> AcctType -> ShowS
$cshowsPrec :: Int -> AcctType -> ShowS
Show, Eq AcctType
Eq AcctType
-> (AcctType -> AcctType -> Ordering)
-> (AcctType -> AcctType -> Bool)
-> (AcctType -> AcctType -> Bool)
-> (AcctType -> AcctType -> Bool)
-> (AcctType -> AcctType -> Bool)
-> (AcctType -> AcctType -> AcctType)
-> (AcctType -> AcctType -> AcctType)
-> Ord AcctType
AcctType -> AcctType -> Bool
AcctType -> AcctType -> Ordering
AcctType -> AcctType -> AcctType
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: AcctType -> AcctType -> AcctType
$cmin :: AcctType -> AcctType -> AcctType
max :: AcctType -> AcctType -> AcctType
$cmax :: AcctType -> AcctType -> AcctType
>= :: AcctType -> AcctType -> Bool
$c>= :: AcctType -> AcctType -> Bool
> :: AcctType -> AcctType -> Bool
$c> :: AcctType -> AcctType -> Bool
<= :: AcctType -> AcctType -> Bool
$c<= :: AcctType -> AcctType -> Bool
< :: AcctType -> AcctType -> Bool
$c< :: AcctType -> AcctType -> Bool
compare :: AcctType -> AcctType -> Ordering
$ccompare :: AcctType -> AcctType -> Ordering
Ord, ReadPrec [AcctType]
ReadPrec AcctType
Int -> ReadS AcctType
ReadS [AcctType]
(Int -> ReadS AcctType)
-> ReadS [AcctType]
-> ReadPrec AcctType
-> ReadPrec [AcctType]
-> Read AcctType
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [AcctType]
$creadListPrec :: ReadPrec [AcctType]
readPrec :: ReadPrec AcctType
$creadPrec :: ReadPrec AcctType
readList :: ReadS [AcctType]
$creadList :: ReadS [AcctType]
readsPrec :: Int -> ReadS AcctType
$creadsPrec :: Int -> ReadS AcctType
Read, Typeable AcctType
Typeable AcctType
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AcctType -> c AcctType)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AcctType)
-> (AcctType -> Constr)
-> (AcctType -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AcctType))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AcctType))
-> ((forall b. Data b => b -> b) -> AcctType -> AcctType)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AcctType -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AcctType -> r)
-> (forall u. (forall d. Data d => d -> u) -> AcctType -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> AcctType -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType)
-> Data AcctType
AcctType -> DataType
AcctType -> Constr
(forall b. Data b => b -> b) -> AcctType -> AcctType
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> AcctType -> u
forall u. (forall d. Data d => d -> u) -> AcctType -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AcctType -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AcctType -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AcctType
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AcctType -> c AcctType
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AcctType)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AcctType)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> AcctType -> m AcctType
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> AcctType -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> AcctType -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> AcctType -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> AcctType -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AcctType -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> AcctType -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AcctType -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> AcctType -> r
gmapT :: (forall b. Data b => b -> b) -> AcctType -> AcctType
$cgmapT :: (forall b. Data b => b -> b) -> AcctType -> AcctType
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AcctType)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c AcctType)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AcctType)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c AcctType)
dataTypeOf :: AcctType -> DataType
$cdataTypeOf :: AcctType -> DataType
toConstr :: AcctType -> Constr
$ctoConstr :: AcctType -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AcctType
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c AcctType
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AcctType -> c AcctType
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> AcctType -> c AcctType
Data, (forall x. AcctType -> Rep AcctType x)
-> (forall x. Rep AcctType x -> AcctType) -> Generic AcctType
forall x. Rep AcctType x -> AcctType
forall x. AcctType -> Rep AcctType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AcctType x -> AcctType
$cfrom :: forall x. AcctType -> Rep AcctType x
Generic, Typeable)
acctType :: String -> Err AcctType
acctType :: [Char] -> Err AcctType
acctType [Char]
s
| [Char]
s [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"CHECKING" = AcctType -> Err AcctType
forall (m :: * -> *) a. Monad m => a -> m a
return AcctType
ACHECKING
| [Char]
s [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"SAVINGS" = AcctType -> Err AcctType
forall (m :: * -> *) a. Monad m => a -> m a
return AcctType
ASAVINGS
| [Char]
s [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"MONEYMRKT" = AcctType -> Err AcctType
forall (m :: * -> *) a. Monad m => a -> m a
return AcctType
AMONEYMRKT
| [Char]
s [Char] -> [Char] -> Bool
forall a. Eq a => a -> a -> Bool
== [Char]
"CREDITLINE" = AcctType -> Err AcctType
forall (m :: * -> *) a. Monad m => a -> m a
return AcctType
ACREDITLINE
| Bool
otherwise = [Char] -> Err AcctType
forall a b. a -> Either a b
Left ([Char] -> Err AcctType) -> [Char] -> Err AcctType
forall a b. (a -> b) -> a -> b
$ [Char]
"unrecognized account type: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
s
data CurrencyData = CurrencyData
{ CurrencyData -> [Char]
cdCURRATE :: String
, CurrencyData -> [Char]
cdCURSYM :: String
} deriving (CurrencyData -> CurrencyData -> Bool
(CurrencyData -> CurrencyData -> Bool)
-> (CurrencyData -> CurrencyData -> Bool) -> Eq CurrencyData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CurrencyData -> CurrencyData -> Bool
$c/= :: CurrencyData -> CurrencyData -> Bool
== :: CurrencyData -> CurrencyData -> Bool
$c== :: CurrencyData -> CurrencyData -> Bool
Eq, Int -> CurrencyData -> ShowS
[CurrencyData] -> ShowS
CurrencyData -> [Char]
(Int -> CurrencyData -> ShowS)
-> (CurrencyData -> [Char])
-> ([CurrencyData] -> ShowS)
-> Show CurrencyData
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [CurrencyData] -> ShowS
$cshowList :: [CurrencyData] -> ShowS
show :: CurrencyData -> [Char]
$cshow :: CurrencyData -> [Char]
showsPrec :: Int -> CurrencyData -> ShowS
$cshowsPrec :: Int -> CurrencyData -> ShowS
Show, ReadPrec [CurrencyData]
ReadPrec CurrencyData
Int -> ReadS CurrencyData
ReadS [CurrencyData]
(Int -> ReadS CurrencyData)
-> ReadS [CurrencyData]
-> ReadPrec CurrencyData
-> ReadPrec [CurrencyData]
-> Read CurrencyData
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CurrencyData]
$creadListPrec :: ReadPrec [CurrencyData]
readPrec :: ReadPrec CurrencyData
$creadPrec :: ReadPrec CurrencyData
readList :: ReadS [CurrencyData]
$creadList :: ReadS [CurrencyData]
readsPrec :: Int -> ReadS CurrencyData
$creadsPrec :: Int -> ReadS CurrencyData
Read, Typeable CurrencyData
Typeable CurrencyData
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CurrencyData -> c CurrencyData)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CurrencyData)
-> (CurrencyData -> Constr)
-> (CurrencyData -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CurrencyData))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c CurrencyData))
-> ((forall b. Data b => b -> b) -> CurrencyData -> CurrencyData)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CurrencyData -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CurrencyData -> r)
-> (forall u. (forall d. Data d => d -> u) -> CurrencyData -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> CurrencyData -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData)
-> Data CurrencyData
CurrencyData -> DataType
CurrencyData -> Constr
(forall b. Data b => b -> b) -> CurrencyData -> CurrencyData
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> CurrencyData -> u
forall u. (forall d. Data d => d -> u) -> CurrencyData -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CurrencyData -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CurrencyData -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CurrencyData
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CurrencyData -> c CurrencyData
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CurrencyData)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c CurrencyData)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> CurrencyData -> m CurrencyData
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CurrencyData -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> CurrencyData -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> CurrencyData -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> CurrencyData -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CurrencyData -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> CurrencyData -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CurrencyData -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> CurrencyData -> r
gmapT :: (forall b. Data b => b -> b) -> CurrencyData -> CurrencyData
$cgmapT :: (forall b. Data b => b -> b) -> CurrencyData -> CurrencyData
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c CurrencyData)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c CurrencyData)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CurrencyData)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c CurrencyData)
dataTypeOf :: CurrencyData -> DataType
$cdataTypeOf :: CurrencyData -> DataType
toConstr :: CurrencyData -> Constr
$ctoConstr :: CurrencyData -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CurrencyData
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c CurrencyData
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CurrencyData -> c CurrencyData
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> CurrencyData -> c CurrencyData
Data, (forall x. CurrencyData -> Rep CurrencyData x)
-> (forall x. Rep CurrencyData x -> CurrencyData)
-> Generic CurrencyData
forall x. Rep CurrencyData x -> CurrencyData
forall x. CurrencyData -> Rep CurrencyData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CurrencyData x -> CurrencyData
$cfrom :: forall x. CurrencyData -> Rep CurrencyData x
Generic, Typeable)
data Currency = Currency CurrencyData
deriving (Currency -> Currency -> Bool
(Currency -> Currency -> Bool)
-> (Currency -> Currency -> Bool) -> Eq Currency
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Currency -> Currency -> Bool
$c/= :: Currency -> Currency -> Bool
== :: Currency -> Currency -> Bool
$c== :: Currency -> Currency -> Bool
Eq, Int -> Currency -> ShowS
[Currency] -> ShowS
Currency -> [Char]
(Int -> Currency -> ShowS)
-> (Currency -> [Char]) -> ([Currency] -> ShowS) -> Show Currency
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [Currency] -> ShowS
$cshowList :: [Currency] -> ShowS
show :: Currency -> [Char]
$cshow :: Currency -> [Char]
showsPrec :: Int -> Currency -> ShowS
$cshowsPrec :: Int -> Currency -> ShowS
Show, ReadPrec [Currency]
ReadPrec Currency
Int -> ReadS Currency
ReadS [Currency]
(Int -> ReadS Currency)
-> ReadS [Currency]
-> ReadPrec Currency
-> ReadPrec [Currency]
-> Read Currency
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Currency]
$creadListPrec :: ReadPrec [Currency]
readPrec :: ReadPrec Currency
$creadPrec :: ReadPrec Currency
readList :: ReadS [Currency]
$creadList :: ReadS [Currency]
readsPrec :: Int -> ReadS Currency
$creadsPrec :: Int -> ReadS Currency
Read, Typeable Currency
Typeable Currency
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Currency -> c Currency)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Currency)
-> (Currency -> Constr)
-> (Currency -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Currency))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Currency))
-> ((forall b. Data b => b -> b) -> Currency -> Currency)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Currency -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Currency -> r)
-> (forall u. (forall d. Data d => d -> u) -> Currency -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Currency -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency)
-> Data Currency
Currency -> DataType
Currency -> Constr
(forall b. Data b => b -> b) -> Currency -> Currency
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> Currency -> u
forall u. (forall d. Data d => d -> u) -> Currency -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Currency -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Currency -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Currency
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Currency -> c Currency
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Currency)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Currency)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Currency -> m Currency
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Currency -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Currency -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Currency -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Currency -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Currency -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Currency -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Currency -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Currency -> r
gmapT :: (forall b. Data b => b -> b) -> Currency -> Currency
$cgmapT :: (forall b. Data b => b -> b) -> Currency -> Currency
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Currency)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Currency)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Currency)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Currency)
dataTypeOf :: Currency -> DataType
$cdataTypeOf :: Currency -> DataType
toConstr :: Currency -> Constr
$ctoConstr :: Currency -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Currency
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Currency
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Currency -> c Currency
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Currency -> c Currency
Data, (forall x. Currency -> Rep Currency x)
-> (forall x. Rep Currency x -> Currency) -> Generic Currency
forall x. Rep Currency x -> Currency
forall x. Currency -> Rep Currency x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Currency x -> Currency
$cfrom :: forall x. Currency -> Rep Currency x
Generic, Typeable)
data OrigCurrency = OrigCurrency CurrencyData
deriving (OrigCurrency -> OrigCurrency -> Bool
(OrigCurrency -> OrigCurrency -> Bool)
-> (OrigCurrency -> OrigCurrency -> Bool) -> Eq OrigCurrency
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OrigCurrency -> OrigCurrency -> Bool
$c/= :: OrigCurrency -> OrigCurrency -> Bool
== :: OrigCurrency -> OrigCurrency -> Bool
$c== :: OrigCurrency -> OrigCurrency -> Bool
Eq, Int -> OrigCurrency -> ShowS
[OrigCurrency] -> ShowS
OrigCurrency -> [Char]
(Int -> OrigCurrency -> ShowS)
-> (OrigCurrency -> [Char])
-> ([OrigCurrency] -> ShowS)
-> Show OrigCurrency
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [OrigCurrency] -> ShowS
$cshowList :: [OrigCurrency] -> ShowS
show :: OrigCurrency -> [Char]
$cshow :: OrigCurrency -> [Char]
showsPrec :: Int -> OrigCurrency -> ShowS
$cshowsPrec :: Int -> OrigCurrency -> ShowS
Show, ReadPrec [OrigCurrency]
ReadPrec OrigCurrency
Int -> ReadS OrigCurrency
ReadS [OrigCurrency]
(Int -> ReadS OrigCurrency)
-> ReadS [OrigCurrency]
-> ReadPrec OrigCurrency
-> ReadPrec [OrigCurrency]
-> Read OrigCurrency
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [OrigCurrency]
$creadListPrec :: ReadPrec [OrigCurrency]
readPrec :: ReadPrec OrigCurrency
$creadPrec :: ReadPrec OrigCurrency
readList :: ReadS [OrigCurrency]
$creadList :: ReadS [OrigCurrency]
readsPrec :: Int -> ReadS OrigCurrency
$creadsPrec :: Int -> ReadS OrigCurrency
Read, Typeable OrigCurrency
Typeable OrigCurrency
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OrigCurrency -> c OrigCurrency)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OrigCurrency)
-> (OrigCurrency -> Constr)
-> (OrigCurrency -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OrigCurrency))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c OrigCurrency))
-> ((forall b. Data b => b -> b) -> OrigCurrency -> OrigCurrency)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OrigCurrency -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OrigCurrency -> r)
-> (forall u. (forall d. Data d => d -> u) -> OrigCurrency -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> OrigCurrency -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency)
-> Data OrigCurrency
OrigCurrency -> DataType
OrigCurrency -> Constr
(forall b. Data b => b -> b) -> OrigCurrency -> OrigCurrency
forall a.
Typeable a
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> OrigCurrency -> u
forall u. (forall d. Data d => d -> u) -> OrigCurrency -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OrigCurrency -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OrigCurrency -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OrigCurrency
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OrigCurrency -> c OrigCurrency
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OrigCurrency)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c OrigCurrency)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OrigCurrency -> m OrigCurrency
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> OrigCurrency -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> OrigCurrency -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> OrigCurrency -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> OrigCurrency -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OrigCurrency -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OrigCurrency -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OrigCurrency -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OrigCurrency -> r
gmapT :: (forall b. Data b => b -> b) -> OrigCurrency -> OrigCurrency
$cgmapT :: (forall b. Data b => b -> b) -> OrigCurrency -> OrigCurrency
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c OrigCurrency)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c OrigCurrency)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OrigCurrency)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OrigCurrency)
dataTypeOf :: OrigCurrency -> DataType
$cdataTypeOf :: OrigCurrency -> DataType
toConstr :: OrigCurrency -> Constr
$ctoConstr :: OrigCurrency -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OrigCurrency
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OrigCurrency
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OrigCurrency -> c OrigCurrency
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OrigCurrency -> c OrigCurrency
Data, (forall x. OrigCurrency -> Rep OrigCurrency x)
-> (forall x. Rep OrigCurrency x -> OrigCurrency)
-> Generic OrigCurrency
forall x. Rep OrigCurrency x -> OrigCurrency
forall x. OrigCurrency -> Rep OrigCurrency x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep OrigCurrency x -> OrigCurrency
$cfrom :: forall x. OrigCurrency -> Rep OrigCurrency x
Generic, Typeable)
trnType :: TagData -> Maybe TrnType
trnType :: [Char] -> Maybe TrnType
trnType [Char]
d = case [Char]
d of
[Char]
"CREDIT" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TCREDIT
[Char]
"DEBIT" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TDEBIT
[Char]
"INT" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TINT
[Char]
"DIV" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TDIV
[Char]
"FEE" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TFEE
[Char]
"SRVCHG" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TSRVCHG
[Char]
"DEP" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TDEP
[Char]
"ATM" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TATM
[Char]
"POS" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TPOS
[Char]
"XFER" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TXFER
[Char]
"CHECK" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TCHECK
[Char]
"PAYMENT" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TPAYMENT
[Char]
"CASH" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TCASH
[Char]
"DIRECTDEP" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TDIRECTDEP
[Char]
"DIRECTDEBIT" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TDIRECTDEBIT
[Char]
"REPEATPMT" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TREPEATPMT
[Char]
"OTHER" -> TrnType -> Maybe TrnType
forall a. a -> Maybe a
Just TrnType
TOTHER
[Char]
_ -> Maybe TrnType
forall a. Maybe a
Nothing
transaction :: Tag -> Err Transaction
transaction :: Tag -> Err Transaction
transaction Tag
t = do
let fromMaybe :: a -> Maybe b -> Either a b
fromMaybe a
e = Either a b -> (b -> Either a b) -> Maybe b -> Either a b
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (a -> Either a b
forall a b. a -> Either a b
Left a
e) b -> Either a b
forall a b. b -> Either a b
Right
[Char]
trntyStr <- [Char] -> Tag -> Err [Char]
required [Char]
"TRNTYPE" Tag
t
TrnType
trnTy <- [Char] -> Maybe TrnType -> Either [Char] TrnType
forall {a} {b}. a -> Maybe b -> Either a b
fromMaybe ([Char]
"could not parse transaction type: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
trntyStr)
(Maybe TrnType -> Either [Char] TrnType)
-> Maybe TrnType -> Either [Char] TrnType
forall a b. (a -> b) -> a -> b
$ [Char] -> Maybe TrnType
trnType [Char]
trntyStr
[Char]
dtpStr <- [Char] -> Tag -> Err [Char]
required [Char]
"DTPOSTED" Tag
t
ZonedTime
dtp <- [Char] -> Err ZonedTime
parseDate [Char]
dtpStr
let mayDtuStr :: Maybe [Char]
mayDtuStr = [Char] -> Tag -> Maybe [Char]
findData [Char]
"DTUSER" Tag
t
Maybe ZonedTime
dtu <- Either [Char] (Maybe ZonedTime)
-> ([Char] -> Either [Char] (Maybe ZonedTime))
-> Maybe [Char]
-> Either [Char] (Maybe ZonedTime)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Maybe ZonedTime -> Either [Char] (Maybe ZonedTime)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe ZonedTime
forall a. Maybe a
Nothing) ((ZonedTime -> Maybe ZonedTime)
-> Err ZonedTime -> Either [Char] (Maybe ZonedTime)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ZonedTime -> Maybe ZonedTime
forall a. a -> Maybe a
Just (Err ZonedTime -> Either [Char] (Maybe ZonedTime))
-> ([Char] -> Err ZonedTime)
-> [Char]
-> Either [Char] (Maybe ZonedTime)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Err ZonedTime
parseDate) Maybe [Char]
mayDtuStr
let mayDtAvail :: Maybe [Char]
mayDtAvail = [Char] -> Tag -> Maybe [Char]
findData [Char]
"DTAVAIL" Tag
t
Maybe ZonedTime
dta <- Either [Char] (Maybe ZonedTime)
-> ([Char] -> Either [Char] (Maybe ZonedTime))
-> Maybe [Char]
-> Either [Char] (Maybe ZonedTime)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Maybe ZonedTime -> Either [Char] (Maybe ZonedTime)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe ZonedTime
forall a. Maybe a
Nothing) ((ZonedTime -> Maybe ZonedTime)
-> Err ZonedTime -> Either [Char] (Maybe ZonedTime)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ZonedTime -> Maybe ZonedTime
forall a. a -> Maybe a
Just (Err ZonedTime -> Either [Char] (Maybe ZonedTime))
-> ([Char] -> Err ZonedTime)
-> [Char]
-> Either [Char] (Maybe ZonedTime)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Err ZonedTime
parseDate) Maybe [Char]
mayDtAvail
[Char]
amt <- [Char] -> Tag -> Err [Char]
required [Char]
"TRNAMT" Tag
t
[Char]
fitid <- [Char] -> Tag -> Err [Char]
required [Char]
"FITID" Tag
t
let correctFitId :: Maybe [Char]
correctFitId = [Char] -> Tag -> Maybe [Char]
findData [Char]
"CORRECTFITID" Tag
t
Maybe CorrectAction
correctAct <-
case [Char] -> Tag -> Maybe [Char]
findData [Char]
"CORRECTACTION" Tag
t of
Maybe [Char]
Nothing -> Maybe CorrectAction -> Either [Char] (Maybe CorrectAction)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe CorrectAction
forall a. Maybe a
Nothing
Just [Char]
d ->
Either [Char] (Maybe CorrectAction)
-> (Maybe (Maybe CorrectAction)
-> Either [Char] (Maybe CorrectAction))
-> Maybe (Maybe (Maybe CorrectAction))
-> Either [Char] (Maybe CorrectAction)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Maybe CorrectAction -> Either [Char] (Maybe CorrectAction)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe CorrectAction
forall a. Maybe a
Nothing)
([Char]
-> Maybe (Maybe CorrectAction)
-> Either [Char] (Maybe CorrectAction)
forall {a} {b}. a -> Maybe b -> Either a b
fromMaybe ([Char]
"could not parse correct action: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
d))
(Maybe (Maybe (Maybe CorrectAction))
-> Either [Char] (Maybe CorrectAction))
-> ([Char] -> Maybe (Maybe (Maybe CorrectAction)))
-> [Char]
-> Either [Char] (Maybe CorrectAction)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Maybe (Maybe (Maybe CorrectAction))
forall a. Read a => [Char] -> Maybe a
safeRead
([Char] -> Either [Char] (Maybe CorrectAction))
-> [Char] -> Either [Char] (Maybe CorrectAction)
forall a b. (a -> b) -> a -> b
$ [Char]
d
let srvrtid :: Maybe [Char]
srvrtid = [Char] -> Tag -> Maybe [Char]
findData [Char]
"SRVRTID" Tag
t
checknum :: Maybe [Char]
checknum = [Char] -> Tag -> Maybe [Char]
findData [Char]
"CHECKNUM" Tag
t
refnum :: Maybe [Char]
refnum = [Char] -> Tag -> Maybe [Char]
findData [Char]
"REFNUM" Tag
t
sic :: Maybe [Char]
sic = [Char] -> Tag -> Maybe [Char]
findData [Char]
"SIC" Tag
t
payeeId :: Maybe [Char]
payeeId = [Char] -> Tag -> Maybe [Char]
findData [Char]
"PAYEEID" Tag
t
let mayPyeInfo :: Maybe (Either [Char] (Either [Char] Payee))
mayPyeInfo = ([Char] -> Either [Char] (Either [Char] Payee))
-> Maybe [Char] -> Maybe (Either [Char] (Either [Char] Payee))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Either [Char] Payee -> Either [Char] (Either [Char] Payee)
forall (m :: * -> *) a. Monad m => a -> m a
return (Either [Char] Payee -> Either [Char] (Either [Char] Payee))
-> ([Char] -> Either [Char] Payee)
-> [Char]
-> Either [Char] (Either [Char] Payee)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Either [Char] Payee
forall a b. a -> Either a b
Left) ([Char] -> Tag -> Maybe [Char]
findData [Char]
"NAME" Tag
t)
Maybe (Either [Char] (Either [Char] Payee))
-> Maybe (Either [Char] (Either [Char] Payee))
-> Maybe (Either [Char] (Either [Char] Payee))
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Either [Char] Payee -> Either [Char] (Either [Char] Payee))
-> Maybe (Either [Char] Payee)
-> Maybe (Either [Char] (Either [Char] Payee))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Payee -> Either [Char] Payee)
-> Either [Char] Payee -> Either [Char] (Either [Char] Payee)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Payee -> Either [Char] Payee
forall a b. b -> Either a b
Right) (Tag -> Maybe (Either [Char] Payee)
payee Tag
t)
Maybe (Either [Char] Payee)
pyeInfo <- Either [Char] (Maybe (Either [Char] Payee))
-> (Either [Char] (Either [Char] Payee)
-> Either [Char] (Maybe (Either [Char] Payee)))
-> Maybe (Either [Char] (Either [Char] Payee))
-> Either [Char] (Maybe (Either [Char] Payee))
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Maybe (Either [Char] Payee)
-> Either [Char] (Maybe (Either [Char] Payee))
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (Either [Char] Payee)
forall a. Maybe a
Nothing) ((Either [Char] Payee -> Maybe (Either [Char] Payee))
-> Either [Char] (Either [Char] Payee)
-> Either [Char] (Maybe (Either [Char] Payee))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Either [Char] Payee -> Maybe (Either [Char] Payee)
forall a. a -> Maybe a
Just) Maybe (Either [Char] (Either [Char] Payee))
mayPyeInfo
let mayAcctTo :: Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
mayAcctTo = ((Either [Char] BankAcctTo
-> Either [Char] (Either BankAcctTo CCAcctTo))
-> Maybe (Either [Char] BankAcctTo)
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((BankAcctTo -> Either BankAcctTo CCAcctTo)
-> Either [Char] BankAcctTo
-> Either [Char] (Either BankAcctTo CCAcctTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap BankAcctTo -> Either BankAcctTo CCAcctTo
forall a b. a -> Either a b
Left) (Maybe (Either [Char] BankAcctTo)
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo)))
-> Maybe (Either [Char] BankAcctTo)
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
forall a b. (a -> b) -> a -> b
$ Tag -> Maybe (Either [Char] BankAcctTo)
bankAcctTo Tag
t)
Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ((Either [Char] CCAcctTo
-> Either [Char] (Either BankAcctTo CCAcctTo))
-> Maybe (Either [Char] CCAcctTo)
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((CCAcctTo -> Either BankAcctTo CCAcctTo)
-> Either [Char] CCAcctTo
-> Either [Char] (Either BankAcctTo CCAcctTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CCAcctTo -> Either BankAcctTo CCAcctTo
forall a b. b -> Either a b
Right) (Maybe (Either [Char] CCAcctTo)
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo)))
-> Maybe (Either [Char] CCAcctTo)
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
forall a b. (a -> b) -> a -> b
$ Tag -> Maybe (Either [Char] CCAcctTo)
ccAcctTo Tag
t)
mayCcy :: Maybe (Either [Char] (Either Currency OrigCurrency))
mayCcy = ((Either [Char] Currency
-> Either [Char] (Either Currency OrigCurrency))
-> Maybe (Either [Char] Currency)
-> Maybe (Either [Char] (Either Currency OrigCurrency))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Currency -> Either Currency OrigCurrency)
-> Either [Char] Currency
-> Either [Char] (Either Currency OrigCurrency)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Currency -> Either Currency OrigCurrency
forall a b. a -> Either a b
Left) (Maybe (Either [Char] Currency)
-> Maybe (Either [Char] (Either Currency OrigCurrency)))
-> Maybe (Either [Char] Currency)
-> Maybe (Either [Char] (Either Currency OrigCurrency))
forall a b. (a -> b) -> a -> b
$ Tag -> Maybe (Either [Char] Currency)
currency Tag
t)
Maybe (Either [Char] (Either Currency OrigCurrency))
-> Maybe (Either [Char] (Either Currency OrigCurrency))
-> Maybe (Either [Char] (Either Currency OrigCurrency))
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ((Either [Char] OrigCurrency
-> Either [Char] (Either Currency OrigCurrency))
-> Maybe (Either [Char] OrigCurrency)
-> Maybe (Either [Char] (Either Currency OrigCurrency))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((OrigCurrency -> Either Currency OrigCurrency)
-> Either [Char] OrigCurrency
-> Either [Char] (Either Currency OrigCurrency)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap OrigCurrency -> Either Currency OrigCurrency
forall a b. b -> Either a b
Right) (Maybe (Either [Char] OrigCurrency)
-> Maybe (Either [Char] (Either Currency OrigCurrency)))
-> Maybe (Either [Char] OrigCurrency)
-> Maybe (Either [Char] (Either Currency OrigCurrency))
forall a b. (a -> b) -> a -> b
$ Tag -> Maybe (Either [Char] OrigCurrency)
origCurrency Tag
t)
Maybe (Either BankAcctTo CCAcctTo)
acctTo <- Either [Char] (Maybe (Either BankAcctTo CCAcctTo))
-> (Either [Char] (Either BankAcctTo CCAcctTo)
-> Either [Char] (Maybe (Either BankAcctTo CCAcctTo)))
-> Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
-> Either [Char] (Maybe (Either BankAcctTo CCAcctTo))
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Maybe (Either BankAcctTo CCAcctTo)
-> Either [Char] (Maybe (Either BankAcctTo CCAcctTo))
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (Either BankAcctTo CCAcctTo)
forall a. Maybe a
Nothing) ((Either BankAcctTo CCAcctTo -> Maybe (Either BankAcctTo CCAcctTo))
-> Either [Char] (Either BankAcctTo CCAcctTo)
-> Either [Char] (Maybe (Either BankAcctTo CCAcctTo))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Either BankAcctTo CCAcctTo -> Maybe (Either BankAcctTo CCAcctTo)
forall a. a -> Maybe a
Just) Maybe (Either [Char] (Either BankAcctTo CCAcctTo))
mayAcctTo
Maybe (Either Currency OrigCurrency)
ccy <- Either [Char] (Maybe (Either Currency OrigCurrency))
-> (Either [Char] (Either Currency OrigCurrency)
-> Either [Char] (Maybe (Either Currency OrigCurrency)))
-> Maybe (Either [Char] (Either Currency OrigCurrency))
-> Either [Char] (Maybe (Either Currency OrigCurrency))
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (Maybe (Either Currency OrigCurrency)
-> Either [Char] (Maybe (Either Currency OrigCurrency))
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe (Either Currency OrigCurrency)
forall a. Maybe a
Nothing) ((Either Currency OrigCurrency
-> Maybe (Either Currency OrigCurrency))
-> Either [Char] (Either Currency OrigCurrency)
-> Either [Char] (Maybe (Either Currency OrigCurrency))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Either Currency OrigCurrency
-> Maybe (Either Currency OrigCurrency)
forall a. a -> Maybe a
Just) Maybe (Either [Char] (Either Currency OrigCurrency))
mayCcy
let memo :: Maybe [Char]
memo = [Char] -> Tag -> Maybe [Char]
findData [Char]
"MEMO" Tag
t
Transaction -> Err Transaction
forall (m :: * -> *) a. Monad m => a -> m a
return Transaction :: TrnType
-> ZonedTime
-> Maybe ZonedTime
-> Maybe ZonedTime
-> [Char]
-> [Char]
-> Maybe [Char]
-> Maybe CorrectAction
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe [Char]
-> Maybe (Either [Char] Payee)
-> Maybe (Either BankAcctTo CCAcctTo)
-> Maybe [Char]
-> Maybe (Either Currency OrigCurrency)
-> Transaction
Transaction
{ txTRNTYPE :: TrnType
txTRNTYPE = TrnType
trnTy
, txDTPOSTED :: ZonedTime
txDTPOSTED = ZonedTime
dtp
, txDTUSER :: Maybe ZonedTime
txDTUSER = Maybe ZonedTime
dtu
, txDTAVAIL :: Maybe ZonedTime
txDTAVAIL = Maybe ZonedTime
dta
, txTRNAMT :: [Char]
txTRNAMT = [Char]
amt
, txFITID :: [Char]
txFITID = [Char]
fitid
, txCORRECTFITID :: Maybe [Char]
txCORRECTFITID = Maybe [Char]
correctFitId
, txCORRECTACTION :: Maybe CorrectAction
txCORRECTACTION = Maybe CorrectAction
correctAct
, txSRVRTID :: Maybe [Char]
txSRVRTID = Maybe [Char]
srvrtid
, txCHECKNUM :: Maybe [Char]
txCHECKNUM = Maybe [Char]
checknum
, txREFNUM :: Maybe [Char]
txREFNUM = Maybe [Char]
refnum
, txSIC :: Maybe [Char]
txSIC = Maybe [Char]
sic
, txPAYEEID :: Maybe [Char]
txPAYEEID = Maybe [Char]
payeeId
, txPayeeInfo :: Maybe (Either [Char] Payee)
txPayeeInfo = Maybe (Either [Char] Payee)
pyeInfo
, txAccountTo :: Maybe (Either BankAcctTo CCAcctTo)
txAccountTo = Maybe (Either BankAcctTo CCAcctTo)
acctTo
, txMEMO :: Maybe [Char]
txMEMO = Maybe [Char]
memo
, txCurrency :: Maybe (Either Currency OrigCurrency)
txCurrency = Maybe (Either Currency OrigCurrency)
ccy
}
payee
:: Tag
-> Maybe (Err Payee)
payee :: Tag -> Maybe (Either [Char] Payee)
payee = (Tag -> Either [Char] Payee)
-> Maybe Tag -> Maybe (Either [Char] Payee)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Tag -> Either [Char] Payee
getPayee (Maybe Tag -> Maybe (Either [Char] Payee))
-> (Tag -> Maybe Tag) -> Tag -> Maybe (Either [Char] Payee)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Maybe Tag
forall a. [a] -> Maybe a
listToMaybe ([Tag] -> Maybe Tag) -> (Tag -> [Tag]) -> Tag -> Maybe Tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Tag -> [Tag]
find [Char]
"PAYEE"
where
getPayee :: Tag -> Either [Char] Payee
getPayee Tag
t = [Char]
-> [Char]
-> Maybe [Char]
-> Maybe [Char]
-> [Char]
-> [Char]
-> [Char]
-> Maybe [Char]
-> [Char]
-> Payee
Payee
([Char]
-> [Char]
-> Maybe [Char]
-> Maybe [Char]
-> [Char]
-> [Char]
-> [Char]
-> Maybe [Char]
-> [Char]
-> Payee)
-> Err [Char]
-> Either
[Char]
([Char]
-> Maybe [Char]
-> Maybe [Char]
-> [Char]
-> [Char]
-> [Char]
-> Maybe [Char]
-> [Char]
-> Payee)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> Tag -> Err [Char]
required [Char]
"NAME" Tag
t
Either
[Char]
([Char]
-> Maybe [Char]
-> Maybe [Char]
-> [Char]
-> [Char]
-> [Char]
-> Maybe [Char]
-> [Char]
-> Payee)
-> Err [Char]
-> Either
[Char]
(Maybe [Char]
-> Maybe [Char]
-> [Char]
-> [Char]
-> [Char]
-> Maybe [Char]
-> [Char]
-> Payee)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Tag -> Err [Char]
required [Char]
"ADDR1" Tag
t
Either
[Char]
(Maybe [Char]
-> Maybe [Char]
-> [Char]
-> [Char]
-> [Char]
-> Maybe [Char]
-> [Char]
-> Payee)
-> Either [Char] (Maybe [Char])
-> Either
[Char]
(Maybe [Char]
-> [Char] -> [Char] -> [Char] -> Maybe [Char] -> [Char] -> Payee)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe [Char] -> Either [Char] (Maybe [Char])
forall (f :: * -> *) a. Applicative f => a -> f a
pure ([Char] -> Tag -> Maybe [Char]
findData [Char]
"ADDR2" Tag
t)
Either
[Char]
(Maybe [Char]
-> [Char] -> [Char] -> [Char] -> Maybe [Char] -> [Char] -> Payee)
-> Either [Char] (Maybe [Char])
-> Either
[Char]
([Char] -> [Char] -> [Char] -> Maybe [Char] -> [Char] -> Payee)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe [Char] -> Either [Char] (Maybe [Char])
forall (f :: * -> *) a. Applicative f => a -> f a
pure ([Char] -> Tag -> Maybe [Char]
findData [Char]
"ADDR3" Tag
t)
Either
[Char]
([Char] -> [Char] -> [Char] -> Maybe [Char] -> [Char] -> Payee)
-> Err [Char]
-> Either
[Char] ([Char] -> [Char] -> Maybe [Char] -> [Char] -> Payee)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Tag -> Err [Char]
required [Char]
"CITY" Tag
t
Either [Char] ([Char] -> [Char] -> Maybe [Char] -> [Char] -> Payee)
-> Err [Char]
-> Either [Char] ([Char] -> Maybe [Char] -> [Char] -> Payee)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Tag -> Err [Char]
required [Char]
"STATE" Tag
t
Either [Char] ([Char] -> Maybe [Char] -> [Char] -> Payee)
-> Err [Char] -> Either [Char] (Maybe [Char] -> [Char] -> Payee)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Tag -> Err [Char]
required [Char]
"POSTALCODE" Tag
t
Either [Char] (Maybe [Char] -> [Char] -> Payee)
-> Either [Char] (Maybe [Char]) -> Either [Char] ([Char] -> Payee)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe [Char] -> Either [Char] (Maybe [Char])
forall (f :: * -> *) a. Applicative f => a -> f a
pure ([Char] -> Tag -> Maybe [Char]
findData [Char]
"COUNTRY" Tag
t)
Either [Char] ([Char] -> Payee)
-> Err [Char] -> Either [Char] Payee
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Tag -> Err [Char]
required [Char]
"PHONE" Tag
t
currency :: Tag -> Maybe (Err Currency)
currency :: Tag -> Maybe (Either [Char] Currency)
currency
= (Either [Char] CurrencyData -> Either [Char] Currency)
-> Maybe (Either [Char] CurrencyData)
-> Maybe (Either [Char] Currency)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((CurrencyData -> Currency)
-> Either [Char] CurrencyData -> Either [Char] Currency
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CurrencyData -> Currency
Currency)
(Maybe (Either [Char] CurrencyData)
-> Maybe (Either [Char] Currency))
-> (Tag -> Maybe (Either [Char] CurrencyData))
-> Tag
-> Maybe (Either [Char] Currency)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Tag -> Either [Char] CurrencyData)
-> Maybe Tag -> Maybe (Either [Char] CurrencyData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Tag -> Either [Char] CurrencyData
currencyData
(Maybe Tag -> Maybe (Either [Char] CurrencyData))
-> (Tag -> Maybe Tag) -> Tag -> Maybe (Either [Char] CurrencyData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Maybe Tag
forall a. [a] -> Maybe a
listToMaybe
([Tag] -> Maybe Tag) -> (Tag -> [Tag]) -> Tag -> Maybe Tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Tag -> [Tag]
find [Char]
"CURRENCY"
origCurrency :: Tag -> Maybe (Err OrigCurrency)
origCurrency :: Tag -> Maybe (Either [Char] OrigCurrency)
origCurrency
= (Either [Char] CurrencyData -> Either [Char] OrigCurrency)
-> Maybe (Either [Char] CurrencyData)
-> Maybe (Either [Char] OrigCurrency)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((CurrencyData -> OrigCurrency)
-> Either [Char] CurrencyData -> Either [Char] OrigCurrency
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CurrencyData -> OrigCurrency
OrigCurrency)
(Maybe (Either [Char] CurrencyData)
-> Maybe (Either [Char] OrigCurrency))
-> (Tag -> Maybe (Either [Char] CurrencyData))
-> Tag
-> Maybe (Either [Char] OrigCurrency)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Tag -> Either [Char] CurrencyData)
-> Maybe Tag -> Maybe (Either [Char] CurrencyData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Tag -> Either [Char] CurrencyData
currencyData
(Maybe Tag -> Maybe (Either [Char] CurrencyData))
-> (Tag -> Maybe Tag) -> Tag -> Maybe (Either [Char] CurrencyData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Maybe Tag
forall a. [a] -> Maybe a
listToMaybe
([Tag] -> Maybe Tag) -> (Tag -> [Tag]) -> Tag -> Maybe Tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Tag -> [Tag]
find [Char]
"ORIGCURRENCY"
currencyData
:: Tag
-> Err CurrencyData
currencyData :: Tag -> Either [Char] CurrencyData
currencyData Tag
t = [Char] -> [Char] -> CurrencyData
CurrencyData
([Char] -> [Char] -> CurrencyData)
-> Err [Char] -> Either [Char] ([Char] -> CurrencyData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> Tag -> Err [Char]
required [Char]
"CURRATE" Tag
t
Either [Char] ([Char] -> CurrencyData)
-> Err [Char] -> Either [Char] CurrencyData
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Tag -> Err [Char]
required [Char]
"CURSYM" Tag
t
bankAcctTo :: Tag -> Maybe (Err BankAcctTo)
bankAcctTo :: Tag -> Maybe (Either [Char] BankAcctTo)
bankAcctTo = (Tag -> Either [Char] BankAcctTo)
-> Maybe Tag -> Maybe (Either [Char] BankAcctTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Tag -> Either [Char] BankAcctTo
getTo (Maybe Tag -> Maybe (Either [Char] BankAcctTo))
-> (Tag -> Maybe Tag) -> Tag -> Maybe (Either [Char] BankAcctTo)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Maybe Tag
forall a. [a] -> Maybe a
listToMaybe ([Tag] -> Maybe Tag) -> (Tag -> [Tag]) -> Tag -> Maybe Tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Tag -> [Tag]
find [Char]
"BANKACCTTO"
where
getTo :: Tag -> Either [Char] BankAcctTo
getTo Tag
t = [Char]
-> Maybe [Char] -> [Char] -> AcctType -> Maybe [Char] -> BankAcctTo
BankAcctTo
([Char]
-> Maybe [Char]
-> [Char]
-> AcctType
-> Maybe [Char]
-> BankAcctTo)
-> Err [Char]
-> Either
[Char]
(Maybe [Char] -> [Char] -> AcctType -> Maybe [Char] -> BankAcctTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> Tag -> Err [Char]
required [Char]
"BANKID" Tag
t
Either
[Char]
(Maybe [Char] -> [Char] -> AcctType -> Maybe [Char] -> BankAcctTo)
-> Either [Char] (Maybe [Char])
-> Either [Char] ([Char] -> AcctType -> Maybe [Char] -> BankAcctTo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe [Char] -> Either [Char] (Maybe [Char])
forall (f :: * -> *) a. Applicative f => a -> f a
pure ([Char] -> Tag -> Maybe [Char]
findData [Char]
"BRANCHID" Tag
t)
Either [Char] ([Char] -> AcctType -> Maybe [Char] -> BankAcctTo)
-> Err [Char]
-> Either [Char] (AcctType -> Maybe [Char] -> BankAcctTo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Tag -> Err [Char]
required [Char]
"ACCTID" Tag
t
Either [Char] (AcctType -> Maybe [Char] -> BankAcctTo)
-> Err AcctType -> Either [Char] (Maybe [Char] -> BankAcctTo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ([Char] -> Tag -> Err [Char]
required [Char]
"ACCTTYPE" Tag
t Err [Char] -> ([Char] -> Err AcctType) -> Err AcctType
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [Char] -> Err AcctType
acctType)
Either [Char] (Maybe [Char] -> BankAcctTo)
-> Either [Char] (Maybe [Char]) -> Either [Char] BankAcctTo
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe [Char] -> Either [Char] (Maybe [Char])
forall (f :: * -> *) a. Applicative f => a -> f a
pure ([Char] -> Tag -> Maybe [Char]
findData [Char]
"ACCTKEY" Tag
t)
ccAcctTo :: Tag -> Maybe (Err CCAcctTo)
ccAcctTo :: Tag -> Maybe (Either [Char] CCAcctTo)
ccAcctTo = (Tag -> Either [Char] CCAcctTo)
-> Maybe Tag -> Maybe (Either [Char] CCAcctTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Tag -> Either [Char] CCAcctTo
getTo (Maybe Tag -> Maybe (Either [Char] CCAcctTo))
-> (Tag -> Maybe Tag) -> Tag -> Maybe (Either [Char] CCAcctTo)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Tag] -> Maybe Tag
forall a. [a] -> Maybe a
listToMaybe ([Tag] -> Maybe Tag) -> (Tag -> [Tag]) -> Tag -> Maybe Tag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Tag -> [Tag]
find [Char]
"CCACCTTO"
where
getTo :: Tag -> Either [Char] CCAcctTo
getTo Tag
t = [Char] -> Maybe [Char] -> CCAcctTo
CCAcctTo
([Char] -> Maybe [Char] -> CCAcctTo)
-> Err [Char] -> Either [Char] (Maybe [Char] -> CCAcctTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> Tag -> Err [Char]
required [Char]
"ACCTID" Tag
t
Either [Char] (Maybe [Char] -> CCAcctTo)
-> Either [Char] (Maybe [Char]) -> Either [Char] CCAcctTo
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe [Char] -> Either [Char] (Maybe [Char])
forall (f :: * -> *) a. Applicative f => a -> f a
pure ([Char] -> Tag -> Maybe [Char]
findData [Char]
"ACCTKEY" Tag
t)
safeRead :: Read a => String -> Maybe a
safeRead :: forall a. Read a => [Char] -> Maybe a
safeRead [Char]
s = case ReadS a
forall a. Read a => ReadS a
reads [Char]
s of
(a
x, [Char]
""):[] -> a -> Maybe a
forall a. a -> Maybe a
Just a
x
[(a, [Char])]
_ -> Maybe a
forall a. Maybe a
Nothing
transactions :: OFXFile -> Err [Transaction]
transactions :: OFXFile -> Err [Transaction]
transactions = (Tag -> Err Transaction) -> [Tag] -> Err [Transaction]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM Tag -> Err Transaction
transaction ([Tag] -> Err [Transaction])
-> (OFXFile -> [Tag]) -> OFXFile -> Err [Transaction]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Tag -> [Tag]
find [Char]
"STMTTRN" (Tag -> [Tag]) -> (OFXFile -> Tag) -> OFXFile -> [Tag]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OFXFile -> Tag
fTag
pPayee :: Payee -> Doc
pPayee :: Payee -> Doc
pPayee Payee
p = Doc -> Int -> Doc -> Doc
hang Doc
"Payee:" Int
2 Doc
ls
where
ls :: Doc
ls = [Doc] -> Doc
sep [ [Char] -> Doc -> Doc
label [Char]
"Name" ([Char] -> Doc
text ([Char] -> Doc) -> (Payee -> [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> [Char]
peNAME (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
, [Char] -> Doc -> Doc
label [Char]
"Addr1" ([Char] -> Doc
text ([Char] -> Doc) -> (Payee -> [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> [Char]
peADDR1 (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
, [Char] -> Doc -> Doc
label [Char]
"Addr2" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc) -> (Payee -> Maybe [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> Maybe [Char]
peADDR2 (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
, [Char] -> Doc -> Doc
label [Char]
"Addr3" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc) -> (Payee -> Maybe [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> Maybe [Char]
peADDR3 (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
, [Char] -> Doc -> Doc
label [Char]
"City" ([Char] -> Doc
text ([Char] -> Doc) -> (Payee -> [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> [Char]
peCITY (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
, [Char] -> Doc -> Doc
label [Char]
"State" ([Char] -> Doc
text ([Char] -> Doc) -> (Payee -> [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> [Char]
peSTATE (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
, [Char] -> Doc -> Doc
label [Char]
"Postal" ([Char] -> Doc
text ([Char] -> Doc) -> (Payee -> [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> [Char]
pePOSTALCODE (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
, [Char] -> Doc -> Doc
label [Char]
"Country" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc) -> (Payee -> Maybe [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> Maybe [Char]
peCOUNTRY (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
, [Char] -> Doc -> Doc
label [Char]
"Phone" ([Char] -> Doc
text ([Char] -> Doc) -> (Payee -> [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> [Char]
pePHONE (Payee -> Doc) -> Payee -> Doc
forall a b. (a -> b) -> a -> b
$ Payee
p)
]
pTransaction :: Transaction -> Doc
pTransaction :: Transaction -> Doc
pTransaction Transaction
a = Doc -> Int -> Doc -> Doc
hang Doc
"Transaction:" Int
2 Doc
ls
where
ls :: Doc
ls = [Doc] -> Doc
sep [ [Char] -> Doc -> Doc
label [Char]
"TRNTYPE" ([Char] -> Doc
text ([Char] -> Doc) -> (Transaction -> [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TrnType -> [Char]
forall a. Show a => a -> [Char]
show (TrnType -> [Char])
-> (Transaction -> TrnType) -> Transaction -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> TrnType
txTRNTYPE (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"DTPOSTED" ([Char] -> Doc
text ([Char] -> Doc) -> (Transaction -> [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ZonedTime -> [Char]
forall a. Show a => a -> [Char]
show (ZonedTime -> [Char])
-> (Transaction -> ZonedTime) -> Transaction -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> ZonedTime
txDTPOSTED (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"DTUSER" ([Char] -> Doc
text ([Char] -> Doc) -> (Transaction -> [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe ZonedTime -> [Char]
forall a. Show a => a -> [Char]
show (Maybe ZonedTime -> [Char])
-> (Transaction -> Maybe ZonedTime) -> Transaction -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe ZonedTime
txDTUSER (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"DTAVAIL" ([Char] -> Doc
text ([Char] -> Doc) -> (Transaction -> [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe ZonedTime -> [Char]
forall a. Show a => a -> [Char]
show (Maybe ZonedTime -> [Char])
-> (Transaction -> Maybe ZonedTime) -> Transaction -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe ZonedTime
txDTAVAIL (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"TRNAMT" ([Char] -> Doc
text ([Char] -> Doc) -> (Transaction -> [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> [Char]
txTRNAMT (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"FITID" ([Char] -> Doc
text ([Char] -> Doc) -> (Transaction -> [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> [Char]
txFITID (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"CORRECTFITID"
(([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc)
-> (Transaction -> Maybe [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe [Char]
txCORRECTFITID (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"CORRECTACTION"
([Char] -> Doc
text ([Char] -> Doc) -> (Transaction -> [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Maybe CorrectAction -> [Char]
forall a. Show a => a -> [Char]
show (Maybe CorrectAction -> [Char])
-> (Transaction -> Maybe CorrectAction) -> Transaction -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe CorrectAction
txCORRECTACTION (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"SRVRTID" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc)
-> (Transaction -> Maybe [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe [Char]
txSRVRTID (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"CHECKNUM" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc)
-> (Transaction -> Maybe [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe [Char]
txCHECKNUM (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"REFNUM" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc)
-> (Transaction -> Maybe [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe [Char]
txREFNUM (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"SIC" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc)
-> (Transaction -> Maybe [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe [Char]
txSIC (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"PAYEEID" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc)
-> (Transaction -> Maybe [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe [Char]
txPAYEEID (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"PAYEEINFO"
((Either [Char] Payee -> Doc) -> Maybe (Either [Char] Payee) -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe (([Char] -> Doc) -> (Payee -> Doc) -> Either [Char] Payee -> Doc
forall a b. (a -> Doc) -> (b -> Doc) -> Either a b -> Doc
pEither [Char] -> Doc
text ([Char] -> Doc
text ([Char] -> Doc) -> (Payee -> [Char]) -> Payee -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Payee -> [Char]
forall a. Show a => a -> [Char]
show)) (Maybe (Either [Char] Payee) -> Doc)
-> (Transaction -> Maybe (Either [Char] Payee))
-> Transaction
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe (Either [Char] Payee)
txPayeeInfo (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"ACCOUNTTO"
((Doc -> Doc) -> Maybe Doc -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe Doc -> Doc
forall a. a -> a
id (Maybe Doc -> Doc)
-> (Transaction -> Maybe Doc) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Either BankAcctTo CCAcctTo -> Doc)
-> Maybe (Either BankAcctTo CCAcctTo) -> Maybe Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ([Char] -> Doc
text ([Char] -> Doc)
-> (Either BankAcctTo CCAcctTo -> [Char])
-> Either BankAcctTo CCAcctTo
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Either BankAcctTo CCAcctTo -> [Char]
forall a. Show a => a -> [Char]
show)
(Maybe (Either BankAcctTo CCAcctTo) -> Maybe Doc)
-> (Transaction -> Maybe (Either BankAcctTo CCAcctTo))
-> Transaction
-> Maybe Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe (Either BankAcctTo CCAcctTo)
txAccountTo (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"MEMO" (([Char] -> Doc) -> Maybe [Char] -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe [Char] -> Doc
text (Maybe [Char] -> Doc)
-> (Transaction -> Maybe [Char]) -> Transaction -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe [Char]
txMEMO (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
, [Char] -> Doc -> Doc
label [Char]
"CURRENCY"
((Either Currency OrigCurrency -> Doc)
-> Maybe (Either Currency OrigCurrency) -> Doc
forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe ([Char] -> Doc
text ([Char] -> Doc)
-> (Either Currency OrigCurrency -> [Char])
-> Either Currency OrigCurrency
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Either Currency OrigCurrency -> [Char]
forall a. Show a => a -> [Char]
show) (Maybe (Either Currency OrigCurrency) -> Doc)
-> (Transaction -> Maybe (Either Currency OrigCurrency))
-> Transaction
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Transaction -> Maybe (Either Currency OrigCurrency)
txCurrency (Transaction -> Doc) -> Transaction -> Doc
forall a b. (a -> b) -> a -> b
$ Transaction
a)
]
pTag :: Tag -> Doc
pTag :: Tag -> Doc
pTag (Tag [Char]
n Either [Char] [Tag]
ei) = case Either [Char] [Tag]
ei of
Left [Char]
d -> Doc
"<" Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> [Char] -> Doc
text [Char]
n Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
">" Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> [Char] -> Doc
text [Char]
d
Right [Tag]
ts -> [Doc] -> Doc
vcat ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ Doc
"<" Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> [Char] -> Doc
text [Char]
n Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
">"
Doc -> [Doc] -> [Doc]
forall a. a -> [a] -> [a]
: (Tag -> Doc) -> [Tag] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> Doc -> Doc
nest Int
2 (Doc -> Doc) -> (Tag -> Doc) -> Tag -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Tag -> Doc
pTag) [Tag]
ts
[Doc] -> [Doc] -> [Doc]
forall a. [a] -> [a] -> [a]
++ [Doc
"</" Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> [Char] -> Doc
text [Char]
n Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
">"]
pHeader :: OFXHeader -> Doc
(OFXHeader [Char]
t [Char]
v) = [Char] -> Doc
text [Char]
t Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
": " Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> [Char] -> Doc
text [Char]
v
pFile :: OFXFile -> Doc
pFile :: OFXFile -> Doc
pFile (OFXFile [OFXHeader]
hs Tag
t)
= Doc
"OFX file:"
Doc -> Doc -> Doc
$$ Int -> Doc -> Doc
nest Int
2 ([Doc] -> Doc
vcat [ [Doc] -> Doc
pList ([Doc] -> Doc) -> ([OFXHeader] -> [Doc]) -> [OFXHeader] -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (OFXHeader -> Doc) -> [OFXHeader] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map OFXHeader -> Doc
pHeader ([OFXHeader] -> Doc) -> [OFXHeader] -> Doc
forall a b. (a -> b) -> a -> b
$ [OFXHeader]
hs
, Doc
forall a. Monoid a => a
mempty
, Tag -> Doc
pTag Tag
t ])
pEither :: (a -> Doc) -> (b -> Doc) -> Either a b -> Doc
pEither :: forall a b. (a -> Doc) -> (b -> Doc) -> Either a b -> Doc
pEither a -> Doc
fa b -> Doc
fb = (a -> Doc) -> (b -> Doc) -> Either a b -> Doc
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (\a
l -> Doc
"Left" Doc -> Doc -> Doc
<+> Doc -> Doc
parens (a -> Doc
fa a
l))
(\b
r -> Doc
"Right" Doc -> Doc -> Doc
<+> Doc -> Doc
parens (b -> Doc
fb b
r))
pMaybe :: (a -> Doc) -> Maybe a -> Doc
pMaybe :: forall a. (a -> Doc) -> Maybe a -> Doc
pMaybe a -> Doc
f = Doc -> (a -> Doc) -> Maybe a -> Doc
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Doc
"Nothing" (\a
x -> Doc
"Just" Doc -> Doc -> Doc
<+> Doc -> Doc
parens (a -> Doc
f a
x))
pList :: [Doc] -> Doc
pList :: [Doc] -> Doc
pList [Doc]
ds = case [Doc]
ds of
[] -> Doc
"[]"
Doc
x:[] -> Doc -> Doc
brackets Doc
x
Doc
x:[Doc]
xs -> [Doc] -> Doc
sep ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ Doc -> Int -> Doc -> Doc
hang Doc
"[" Int
2 Doc
x
Doc -> [Doc] -> [Doc]
forall a. a -> [a] -> [a]
: (Doc -> Doc) -> [Doc] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (\Doc
d -> Doc -> Int -> Doc -> Doc
hang Doc
"," Int
2 Doc
d) [Doc]
xs
[Doc] -> [Doc] -> [Doc]
forall a. [a] -> [a] -> [a]
++ [ Doc
"]" ]
label :: String -> Doc -> Doc
label :: [Char] -> Doc -> Doc
label [Char]
s = Doc -> Int -> Doc -> Doc
hang ([Char] -> Doc
text ([Char]
s [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
":")) ([Char] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [Char]
s Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
2)
pExceptional
:: (e -> Doc)
-> (a -> Doc)
-> Either e a
-> Doc
pExceptional :: forall a b. (a -> Doc) -> (b -> Doc) -> Either a b -> Doc
pExceptional e -> Doc
fe a -> Doc
fa =
(e -> Doc) -> (a -> Doc) -> Either e a -> Doc
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (\e
e -> Doc -> Int -> Doc -> Doc
hang Doc
"Exception:" Int
2 (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ Doc -> Doc
parens (e -> Doc
fe e
e))
(\a
g -> Doc -> Int -> Doc -> Doc
hang Doc
"Success:" Int
2 (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ Doc -> Doc
parens (a -> Doc
fa a
g))
parseOfxFile :: String -> Err OFXFile
parseOfxFile :: [Char] -> Err OFXFile
parseOfxFile = (ParseError -> Err OFXFile)
-> (OFXFile -> Err OFXFile)
-> Either ParseError OFXFile
-> Err OFXFile
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either ([Char] -> Err OFXFile
forall a b. a -> Either a b
Left ([Char] -> Err OFXFile)
-> (ParseError -> [Char]) -> ParseError -> Err OFXFile
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ParseError -> [Char]
forall a. Show a => a -> [Char]
show) (OFXFile -> Err OFXFile
forall a b. b -> Either a b
Right (OFXFile -> Err OFXFile)
-> (OFXFile -> OFXFile) -> OFXFile -> Err OFXFile
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OFXFile -> OFXFile
forall a. a -> a
id) (Either ParseError OFXFile -> Err OFXFile)
-> ([Char] -> Either ParseError OFXFile) -> [Char] -> Err OFXFile
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser OFXFile -> [Char] -> [Char] -> Either ParseError OFXFile
forall s t a.
Stream s Identity t =>
Parsec s () a -> [Char] -> s -> Either ParseError a
parse Parser OFXFile
ofxFile [Char]
""
parseTransactions :: String -> Err [Transaction]
parseTransactions :: [Char] -> Err [Transaction]
parseTransactions = OFXFile -> Err [Transaction]
transactions (OFXFile -> Err [Transaction])
-> ([Char] -> Err OFXFile) -> [Char] -> Err [Transaction]
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< [Char] -> Err OFXFile
parseOfxFile
loadOfxFile :: FilePath -> IO OFXFile
loadOfxFile :: [Char] -> IO OFXFile
loadOfxFile [Char]
fp = do
[Char]
txt <- [Char] -> IO [Char]
readFile [Char]
fp
case [Char] -> Err OFXFile
parseOfxFile [Char]
txt of
Left [Char]
e -> [Char] -> IO OFXFile
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail [Char]
e
Right OFXFile
g -> OFXFile -> IO OFXFile
forall (m :: * -> *) a. Monad m => a -> m a
return OFXFile
g
loadTransactions :: FilePath -> IO [Transaction]
loadTransactions :: [Char] -> IO [Transaction]
loadTransactions [Char]
fp = do
[Char]
txt <- [Char] -> IO [Char]
readFile [Char]
fp
case [Char] -> Err [Transaction]
parseTransactions [Char]
txt of
Left [Char]
e -> [Char] -> IO [Transaction]
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail [Char]
e
Right [Transaction]
g -> [Transaction] -> IO [Transaction]
forall (m :: * -> *) a. Monad m => a -> m a
return [Transaction]
g
prettyRenderOfxFile
:: String
-> String
prettyRenderOfxFile :: ShowS
prettyRenderOfxFile
= Doc -> [Char]
render
(Doc -> [Char]) -> ([Char] -> Doc) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> Doc) -> (OFXFile -> Doc) -> Err OFXFile -> Doc
forall a b. (a -> Doc) -> (b -> Doc) -> Either a b -> Doc
pExceptional [Char] -> Doc
text OFXFile -> Doc
pFile
(Err OFXFile -> Doc) -> ([Char] -> Err OFXFile) -> [Char] -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Err OFXFile
parseOfxFile
prettyRenderTransactions
:: String
-> String
prettyRenderTransactions :: ShowS
prettyRenderTransactions
= Doc -> [Char]
render
(Doc -> [Char]) -> ([Char] -> Doc) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char] -> Doc)
-> ([Transaction] -> Doc) -> Err [Transaction] -> Doc
forall a b. (a -> Doc) -> (b -> Doc) -> Either a b -> Doc
pExceptional [Char] -> Doc
text ([Doc] -> Doc
pList ([Doc] -> Doc) -> ([Transaction] -> [Doc]) -> [Transaction] -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Transaction -> Doc) -> [Transaction] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map Transaction -> Doc
pTransaction)
(Err [Transaction] -> Doc)
-> ([Char] -> Err [Transaction]) -> [Char] -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Err [Transaction]
parseTransactions