git.iko.soy/typeable/credit-card
on master help sign in
manual instance
commit6917d20dc78eac647cfe995dca700db8418455d8 authorVille Tirronen <ville@typeable.io> dateThu 10 Aug 2023, 09:21 (3 years ago) parent7d0f294
1 file changed+22−3
src/Data/CreditCard.hs+22−3
src/Data/CreditCard.hs+22−3
@@ -76,7 +76,6 @@ import Data.Time
7676#ifdef USE_POSTGRES
7777import Database.PostgreSQL.Simple.FromField
7878import Database.PostgreSQL.Simple.ToField
79−import Database.PostgreSQL.Simple.Newtypes
8079#endif
8180#endif
8281import Formatting as F
@@ -399,7 +398,27 @@ guessPANCardType = guessCreditCardType <=< panToBogusNumber
399398#ifdef USE_POSTGRES
400399deriving instance FromField CreditCardPAN
401400deriving instance ToField CreditCardPAN
402−deriving via (Aeson CreditCardType) instance FromField CreditCardType
403−deriving via (Aeson CreditCardType) instance ToField CreditCardType
401+instance ToField CreditCardType where
402+ toField cardType = toField $ case cardType of
403+ Visa -> "Visa"
404+ MasterCard -> "MasterCard"
405+ AmericanExpress-> "AmericanExpress"
406+ DiscoverCard -> "DiscoverCard"
407+ DinersClub -> "DinersClub"
408+ JCB -> "JCB"
409+ UnionPay -> "UnionPay" :: Text
410+
411+instance FromField CreditCardType where
412+ fromField f mbs = do
413+ txt <- fromField f mbs
414+ case T.unpack txt of
415+ "Visa" -> return Visa
416+ "MasterCard" -> return MasterCard
417+ "AmericanExpress"-> return AmericanExpress
418+ "DiscoverCard" -> return DiscoverCard
419+ "DinersClub" -> return DinersClub
420+ "JCB" -> return JCB
421+ "UnionPay" -> return UnionPay
422+ _ -> returnError ConversionFailed f ("Invalid credit card type: " ++ T.unpack txt)
404423#endif
405424#endif