@@ -1,4 +1,7 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DeriveFunctor #-}
3+{-# LANGUAGE DeriveFoldable #-}
4+{-# LANGUAGE DeriveTraversable #-}
2{-# LANGUAGE OverloadedStrings #-}
5{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE RankNTypes #-}
6{-# LANGUAGE RankNTypes #-}
4{-# LANGUAGE ScopedTypeVariables #-}
7{-# LANGUAGE ScopedTypeVariables #-}
@@ -23,6 +26,10 @@ import Data.Aeson.TH
23import Data.Aeson.Types
26import Data.Aeson.Types
24import qualified Data.ByteString as B
27import qualified Data.ByteString as B
25import qualified Data.ByteString.Base64 as Base64
28import qualified Data.ByteString.Base64 as Base64
29+#if !MIN_VERSION_base(4,8,0)
31+import Data.Traversable
26import qualified Data.HashMap.Strict as H
33import qualified Data.HashMap.Strict as H
27import Data.Monoid
34import Data.Monoid
28import qualified Data.Text as T
35import qualified Data.Text as T
@@ -45,7 +52,7 @@ data MandrillError = MandrillError {
45 , _merr_code :: !Int
52 , _merr_code :: !Int
46 , _merr_name :: !T.Text
53 , _merr_name :: !T.Text
47 , _merr_message :: !T.Text
54 , _merr_message :: !T.Text
48− } deriving Show
55+ } deriving (Show, Eq)
50makeLenses ''MandrillError
57makeLenses ''MandrillError
51deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillError
58deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillError
@@ -83,7 +90,7 @@ deriveJSON defaultOptions {
83-- which can be either a success or a failure.
90-- which can be either a success or a failure.
84data MandrillResponse k =
91data MandrillResponse k =
85 MandrillSuccess k
92 MandrillSuccess k
86− | MandrillFailure MandrillError deriving Show
93+ | MandrillFailure MandrillError deriving (Show, Eq, Functor, Foldable, Traversable)
88instance FromJSON k => FromJSON (MandrillResponse k) where
95instance FromJSON k => FromJSON (MandrillResponse k) where
89 parseJSON v = case (parseMaybe parseJSON v) :: Maybe k of
96 parseJSON v = case (parseMaybe parseJSON v) :: Maybe k of