@@ -1,4 +1,7 @@
11{-# LANGUAGE CPP #-}
2+{-# LANGUAGE DeriveFoldable #-}
3+{-# LANGUAGE DeriveFunctor #-}
4+{-# LANGUAGE DeriveTraversable #-}
25{-# LANGUAGE OverloadedStrings #-}
36{-# LANGUAGE RankNTypes #-}
47{-# LANGUAGE ScopedTypeVariables #-}
@@ -6,9 +9,11 @@
69module Network.API.Mandrill.Types where
710
811import Control.Applicative
12+import Control.Monad (mzero)
913import Data.Char
1014import Data.Maybe
1115import Data.Time
16+import Lens.Micro.TH (makeLenses)
1217import Network.API.Mandrill.Utils
1318import Test.QuickCheck
1419import Text.Email.Validate
@@ -17,12 +22,15 @@ import Data.Time.Format (TimeLocale, defaultTimeLocale)
1722#else
1823import System.Locale (TimeLocale, defaultTimeLocale)
1924#endif
20−import Control.Lens
2125import Data.Aeson
2226import Data.Aeson.TH
2327import Data.Aeson.Types
2428import qualified Data.ByteString as B
2529import qualified Data.ByteString.Base64 as Base64
30+#if !MIN_VERSION_base(4,8,0)
31+import Data.Foldable
32+import Data.Traversable
33+#endif
2634import qualified Data.HashMap.Strict as H
2735import Data.Monoid
2836import qualified Data.Text as T
@@ -30,7 +38,7 @@ import qualified Data.Text.Encoding as TL
3038import qualified Data.Text.Lazy as TL
3139import qualified Text.Blaze.Html as Blaze
3240import qualified Text.Blaze.Html.Renderer.Text as Blaze
33−
41+import qualified Text.Email.Validate as TEV
3442
3543timeParse :: ParseTime t => TimeLocale -> String -> String -> Maybe t
3644#if MIN_VERSION_time(1,5,0)
@@ -45,7 +53,7 @@ data MandrillError = MandrillError {
4553 , _merr_code :: !Int
4654 , _merr_name :: !T.Text
4755 , _merr_message :: !T.Text
48− } deriving Show
56+ } deriving (Show, Eq)
4957
5058makeLenses ''MandrillError
5159deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillError
@@ -83,7 +91,7 @@ deriveJSON defaultOptions {
8391-- which can be either a success or a failure.
8492data MandrillResponse k =
8593 MandrillSuccess k
86− | MandrillFailure MandrillError deriving Show
94+ | MandrillFailure MandrillError deriving (Show, Eq, Functor, Foldable, Traversable)
8795
8896instance FromJSON k => FromJSON (MandrillResponse k) where
8997 parseJSON v = case (parseMaybe parseJSON v) :: Maybe k of
@@ -150,6 +158,11 @@ unsafeMkMandrillHtml = MandrillHtml . Blaze.preEscapedToHtml
150158mkMandrillHtml :: Blaze.Html -> MandrillHtml
151159mkMandrillHtml = MandrillHtml
152160
161+#if MIN_VERSION_base(4,11,0)
162+instance Semigroup MandrillHtml where
163+ MandrillHtml m1 <> MandrillHtml m2 = MandrillHtml (m1 <> m2)
164+#endif
165+
153166instance Monoid MandrillHtml where
154167 mempty = MandrillHtml mempty
155168 mappend (MandrillHtml m1) (MandrillHtml m2) = MandrillHtml (m1 <> m2)