packages feed

mailchimp 0.1.1 → 0.2.0

raw patch · 7 files changed

+225/−181 lines, 7 filesdep +generics-sopdep ~aesondep ~http-clientdep ~http-client-tlsPVP ok

version bump matches the API change (PVP)

Dependencies added: generics-sop

Dependency ranges changed: aeson, http-client, http-client-tls, servant, servant-client

API changes (from Hackage documentation)

- Web.MailChimp: Cleaned :: ListMemberStatus
- Web.MailChimp: Client :: (forall m. MonadIO m => m (Either ServantError Object)) -> (ListId -> ListClient) -> Client
- Web.MailChimp: ListClient :: ListMemberClient -> ListClient
- Web.MailChimp: ListMemberClient :: (forall m. MonadIO m => ListMemberRequest -> m (Either ServantError ListMemberResponse)) -> (forall m. MonadIO m => m (Either ServantError [ListMemberResponse])) -> (forall m. MonadIO m => ListMemberId -> m (Either ServantError ListMemberResponse)) -> (forall m. MonadIO m => ListMemberId -> ListMemberRequest -> m (Either ServantError ListMemberResponse)) -> (forall m. MonadIO m => ListMemberId -> ListMemberRequest -> m (Either ServantError ListMemberResponse)) -> (forall m. MonadIO m => ListMemberId -> m (Either ServantError String)) -> ListMemberClient
- Web.MailChimp: ListMemberRequest :: Text -> [(Text, Text)] -> ListMemberStatus -> [(Text, Value)] -> ListMemberRequest
- Web.MailChimp: ListMemberResponse :: ListMemberId -> ListMemberResponse
- Web.MailChimp: Pending :: ListMemberStatus
- Web.MailChimp: Subscribed :: ListMemberStatus
- Web.MailChimp: Unsubscribed :: ListMemberStatus
- Web.MailChimp: [addListMember] :: ListMemberClient -> forall m. MonadIO m => ListMemberRequest -> m (Either ServantError ListMemberResponse)
- Web.MailChimp: [addOrUpdateListMember] :: ListMemberClient -> forall m. MonadIO m => ListMemberId -> ListMemberRequest -> m (Either ServantError ListMemberResponse)
- Web.MailChimp: [deleteListMember] :: ListMemberClient -> forall m. MonadIO m => ListMemberId -> m (Either ServantError String)
- Web.MailChimp: [getListMember] :: ListMemberClient -> forall m. MonadIO m => ListMemberId -> m (Either ServantError ListMemberResponse)
- Web.MailChimp: [getListMembers] :: ListMemberClient -> forall m. MonadIO m => m (Either ServantError [ListMemberResponse])
- Web.MailChimp: [listMemberClient] :: ListClient -> ListMemberClient
- Web.MailChimp: [listMemberEmailAddress] :: ListMemberRequest -> Text
- Web.MailChimp: [listMemberExtra] :: ListMemberRequest -> [(Text, Value)]
- Web.MailChimp: [listMemberId] :: ListMemberResponse -> ListMemberId
- Web.MailChimp: [listMemberMergeFields] :: ListMemberRequest -> [(Text, Text)]
- Web.MailChimp: [listMemberStatus] :: ListMemberRequest -> ListMemberStatus
- Web.MailChimp: [updateListMember] :: ListMemberClient -> forall m. MonadIO m => ListMemberId -> ListMemberRequest -> m (Either ServantError ListMemberResponse)
- Web.MailChimp: data Client
- Web.MailChimp: data ListClient
- Web.MailChimp: data ListMemberClient
- Web.MailChimp: data ListMemberRequest
- Web.MailChimp: data ListMemberResponse
- Web.MailChimp: data ListMemberStatus
- Web.MailChimp: makeClient :: Manager -> Key -> Maybe Client
- Web.MailChimp: makeListMemberClient :: Manager -> Key -> ListId -> Maybe ListMemberClient
- Web.MailChimp: makeListMemberRequest :: Text -> ListMemberStatus -> ListMemberRequest
- Web.MailChimp: makeManager :: IO Manager
- Web.MailChimp: type Id = Text
- Web.MailChimp: type Key = ByteString
- Web.MailChimp: type ListId = Id
- Web.MailChimp: type ListMemberId = Id
+ Web.MailChimp: AuthClient :: ClientM Object -> ListClient -> (ListId -> ListMemberClient) -> AuthClient
+ Web.MailChimp: MainClient :: (BasicAuthData -> AuthClient) -> MainClient
+ Web.MailChimp: [makeAuthClient] :: MainClient -> BasicAuthData -> AuthClient
+ Web.MailChimp: [makeListMemberClient] :: AuthClient -> ListId -> ListMemberClient
+ Web.MailChimp: data AuthClient
+ Web.MailChimp: instance GHC.Generics.Generic Web.MailChimp.AuthClient
+ Web.MailChimp: instance GHC.Generics.Generic Web.MailChimp.MainClient
+ Web.MailChimp: instance Generics.SOP.Universe.Generic Web.MailChimp.AuthClient
+ Web.MailChimp: instance Generics.SOP.Universe.Generic Web.MailChimp.MainClient
+ Web.MailChimp: instance Servant.Client.Client Web.MailChimp.AuthApi ~ client => Servant.Client.Generic.ClientLike client Web.MailChimp.AuthClient
+ Web.MailChimp: instance Servant.Client.Client Web.MailChimp.MainApi ~ client => Servant.Client.Generic.ClientLike client Web.MailChimp.MainClient
+ Web.MailChimp: makeAuthClientWithKey :: Key -> AuthClient
+ Web.MailChimp: makeBaseUrl :: Key -> Maybe BaseUrl
+ Web.MailChimp: makeMainClient :: MainClient
+ Web.MailChimp: newtype MainClient
+ Web.MailChimp: run :: MonadIO m => Manager -> Key -> ClientM a -> m (Either ServantError a)
+ Web.MailChimp.Common: type Id = Text
+ Web.MailChimp.Extra: makeManager :: IO Manager
+ Web.MailChimp.Key: parseDataCenter :: Key -> Either String DataCenter
+ Web.MailChimp.Key: type DataCenter = ByteString
+ Web.MailChimp.Key: type Key = ByteString
+ Web.MailChimp.List: ListClient :: ClientM [String] -> ListClient
+ Web.MailChimp.List: [getLists] :: ListClient -> ClientM [String]
+ Web.MailChimp.List: data ListClient
+ Web.MailChimp.List: instance GHC.Generics.Generic Web.MailChimp.List.ListClient
+ Web.MailChimp.List: instance Generics.SOP.Universe.Generic Web.MailChimp.List.ListClient
+ Web.MailChimp.List: instance Servant.Client.Client Web.MailChimp.List.ListApi ~ client => Servant.Client.Generic.ClientLike client Web.MailChimp.List.ListClient
+ Web.MailChimp.List: type ListApi = Get '[JSON] [String]
+ Web.MailChimp.List: type ListId = Id
+ Web.MailChimp.List.Member: Cleaned :: ListMemberStatus
+ Web.MailChimp.List.Member: ListMemberClient :: (ListMemberRequest -> ClientM ListMemberResponse) -> ClientM [ListMemberResponse] -> (ListMemberId -> ClientM ListMemberResponse) -> (ListMemberId -> ListMemberRequest -> ClientM ListMemberResponse) -> (ListMemberId -> ListMemberRequest -> ClientM ListMemberResponse) -> (ListMemberId -> ClientM String) -> ListMemberClient
+ Web.MailChimp.List.Member: ListMemberRequest :: Text -> [(Text, Text)] -> ListMemberStatus -> [(Text, Value)] -> ListMemberRequest
+ Web.MailChimp.List.Member: ListMemberResponse :: ListMemberId -> ListMemberResponse
+ Web.MailChimp.List.Member: Pending :: ListMemberStatus
+ Web.MailChimp.List.Member: Subscribed :: ListMemberStatus
+ Web.MailChimp.List.Member: Unsubscribed :: ListMemberStatus
+ Web.MailChimp.List.Member: [addListMember] :: ListMemberClient -> ListMemberRequest -> ClientM ListMemberResponse
+ Web.MailChimp.List.Member: [addOrUpdateListMember] :: ListMemberClient -> ListMemberId -> ListMemberRequest -> ClientM ListMemberResponse
+ Web.MailChimp.List.Member: [deleteListMember] :: ListMemberClient -> ListMemberId -> ClientM String
+ Web.MailChimp.List.Member: [getListMember] :: ListMemberClient -> ListMemberId -> ClientM ListMemberResponse
+ Web.MailChimp.List.Member: [getListMembers] :: ListMemberClient -> ClientM [ListMemberResponse]
+ Web.MailChimp.List.Member: [listMemberEmailAddress] :: ListMemberRequest -> Text
+ Web.MailChimp.List.Member: [listMemberExtra] :: ListMemberRequest -> [(Text, Value)]
+ Web.MailChimp.List.Member: [listMemberId] :: ListMemberResponse -> ListMemberId
+ Web.MailChimp.List.Member: [listMemberMergeFields] :: ListMemberRequest -> [(Text, Text)]
+ Web.MailChimp.List.Member: [listMemberStatus] :: ListMemberRequest -> ListMemberStatus
+ Web.MailChimp.List.Member: [updateListMember] :: ListMemberClient -> ListMemberId -> ListMemberRequest -> ClientM ListMemberResponse
+ Web.MailChimp.List.Member: data ListMemberClient
+ Web.MailChimp.List.Member: data ListMemberRequest
+ Web.MailChimp.List.Member: data ListMemberResponse
+ Web.MailChimp.List.Member: data ListMemberStatus
+ Web.MailChimp.List.Member: instance Data.Aeson.Types.FromJSON.FromJSON Web.MailChimp.List.Member.ListMemberResponse
+ Web.MailChimp.List.Member: instance Data.Aeson.Types.ToJSON.ToJSON Web.MailChimp.List.Member.ListMemberRequest
+ Web.MailChimp.List.Member: instance Data.Aeson.Types.ToJSON.ToJSON Web.MailChimp.List.Member.ListMemberStatus
+ Web.MailChimp.List.Member: instance GHC.Generics.Generic Web.MailChimp.List.Member.ListMemberClient
+ Web.MailChimp.List.Member: instance GHC.Show.Show Web.MailChimp.List.Member.ListMemberRequest
+ Web.MailChimp.List.Member: instance GHC.Show.Show Web.MailChimp.List.Member.ListMemberResponse
+ Web.MailChimp.List.Member: instance GHC.Show.Show Web.MailChimp.List.Member.ListMemberStatus
+ Web.MailChimp.List.Member: instance Generics.SOP.Universe.Generic Web.MailChimp.List.Member.ListMemberClient
+ Web.MailChimp.List.Member: instance Servant.Client.Client Web.MailChimp.List.Member.ListMemberApi ~ client => Servant.Client.Generic.ClientLike client Web.MailChimp.List.Member.ListMemberClient
+ Web.MailChimp.List.Member: makeListMemberRequest :: Text -> ListMemberStatus -> ListMemberRequest
+ Web.MailChimp.List.Member: type ListMemberApi = (ReqBody '[JSON] ListMemberRequest :> Post '[JSON] ListMemberResponse) :<|> (Get '[JSON] [ListMemberResponse] :<|> ((Capture "subscriber_hash" ListMemberId :> Get '[JSON] ListMemberResponse) :<|> ((Capture "subscriber_hash" ListMemberId :> (ReqBody '[JSON] ListMemberRequest :> Patch '[JSON] ListMemberResponse)) :<|> ((Capture "subscriber_hash" ListMemberId :> (ReqBody '[JSON] ListMemberRequest :> Put '[JSON] ListMemberResponse)) :<|> (Capture "subscriber_hash" ListMemberId :> Delete '[JSON] String)))))
+ Web.MailChimp.List.Member: type ListMemberId = Id
- Web.MailChimp: [getLinks] :: Client -> forall m. MonadIO m => m (Either ServantError Object)
+ Web.MailChimp: [getLinks] :: AuthClient -> ClientM Object
- Web.MailChimp: [makeListClient] :: Client -> ListId -> ListClient
+ Web.MailChimp: [makeListClient] :: AuthClient -> ListClient

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+# 0.2.0++- Moved to Servant 0.10 (3931320)+ # 0.1.1  - Tested with GHC 8.0.1.
README.md view
@@ -2,14 +2,20 @@  [![][1]][0] -[0]: https://travis-ci.org/jpvillaisaza/mailchimp-haskell-[1]: https://travis-ci.org/jpvillaisaza/mailchimp-haskell.svg?branch=master+[0]: https://circleci.com/gh/jpvillaisaza/mailchimp-haskell+[1]: https://circleci.com/gh/jpvillaisaza/mailchimp-haskell.svg?style=svg  ![][2] ![][3]  [2]: https://www.stackage.org/package/mailchimp/badge/lts [3]: https://www.stackage.org/package/mailchimp/badge/nightly++## Coverage++- API Root+- Lists+  - Members  ## License 
mailchimp.cabal view
@@ -1,5 +1,5 @@ name: mailchimp-version: 0.1.1+version: 0.2.0  build-type: Simple cabal-version: >= 1.21@@ -33,23 +33,24 @@       src   exposed-modules:       Web.MailChimp-      Web.MailChimp.Tutorial-  other-modules:-      Paths_mailchimp       Web.MailChimp.Common       Web.MailChimp.Extra       Web.MailChimp.Key       Web.MailChimp.List       Web.MailChimp.List.Member+      Web.MailChimp.Tutorial+  other-modules:+      Paths_mailchimp   build-depends:-      aeson >= 0.11 && < 0.12+      aeson >= 1.1 && < 1.2     , attoparsec >= 0.13 && < 0.14     , base >= 4.8 && < 4.10     , bytestring-    , http-client >= 0.4 && < 0.5-    , http-client-tls >= 0.2 && < 0.3-    , servant >= 0.7 && < 0.9-    , servant-client >= 0.7 && < 0.9+    , generics-sop >= 0.2 && < 0.3+    , http-client >= 0.5 && < 0.6+    , http-client-tls >= 0.3 && < 0.4+    , servant >= 0.10 && < 0.11+    , servant-client >= 0.10 && < 0.11     , text >= 1.2 && < 1.3     , transformers   default-language:
src/Web/MailChimp.hs view
@@ -1,7 +1,10 @@ {-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-}  ----------------------------------------------------------------------@@ -14,21 +17,14 @@ ----------------------------------------------------------------------  module Web.MailChimp-  ( Key-  , Client(..)-  , makeClient-  , ListClient(..)-  , ListId-  , ListMemberClient(..)-  , makeListMemberClient-  , ListMemberRequest(..)-  , makeListMemberRequest-  , ListMemberResponse(..)-  , ListMemberId-  , ListMemberStatus(..)-  , Id+  ( MainClient (..)+  , makeMainClient+  , AuthClient (..)+  , makeAuthClientWithKey+  , run+  , makeBaseUrl   , Paths_mailchimp.version-  , makeManager+  , module X   )   where @@ -38,171 +34,175 @@ -- base import Data.Proxy (Proxy (Proxy)) import Data.Void (Void)+import GHC.Generics  -- bytestring import Data.ByteString.Char8 (unpack) +-- generics-sop+import Generics.SOP+ -- http-client import Network.HTTP.Client (Manager)  -- mailchimp import qualified Paths_mailchimp-import Web.MailChimp.Common-import Web.MailChimp.Extra-import Web.MailChimp.Key-import Web.MailChimp.List-import Web.MailChimp.List.Member+import Web.MailChimp.Common as X+import Web.MailChimp.Extra as X+import Web.MailChimp.Key as X+import Web.MailChimp.List as X+import Web.MailChimp.List.Member as X  -- servant import Servant.API  -- servant-client-import Servant.Client hiding (Client)-import qualified Servant.Client as Servant+import Servant.Client+import Servant.Client.Generic  -- transformers import Control.Monad.IO.Class-import Control.Monad.Trans.Except (ExceptT, runExceptT)   -- | -- -- The MailChimp API, version 3.0. -type Api =+type MainApi =   "3.0"     :> BasicAuth "" Void-    :> (Get '[JSON] Object :<|> ListApi)+    :> AuthApi   -- | --+--++newtype MainClient =+  MainClient+    { makeAuthClient+        :: BasicAuthData+        -> AuthClient++    }+  deriving (GHC.Generics.Generic)+++-- |+--+--+instance Generics.SOP.Generic MainClient+++-- |+--+--++instance (Client MainApi ~ client) => ClientLike client MainClient+++-- |+--+--++makeMainClient :: MainClient+makeMainClient =+  mkClient (client (Proxy :: Proxy MainApi))+++-- |+--+--++type AuthApi =+    Get '[JSON] Object+  :<|>+    "lists"+      :> ListApi+  :<|>+    "lists"+      :> Capture "list_id" ListId+      :> "members"+      :> ListMemberApi+++-- |+-- -- A client for MailChimp. -data Client =-  Client+data AuthClient =+  AuthClient     { -- |       --       --        getLinks-        :: forall m . MonadIO m-        => m (Either ServantError Object)+        :: ClientM Object        -- |       ---      -- Create a client for a list.+      -- Create a client for lists.      , makeListClient+        :: ListClient++      -- |+      --+      -- Create a client for list members.++    , makeListMemberClient         :: ListId-        -> ListClient+        -> ListMemberClient      }+  deriving (GHC.Generics.Generic)   -- | ----- Create a client for MailChimp.--makeClient-  :: Manager -- ^ A manager-  -> Key -- ^ A key-  -> Maybe Client -- ^ The client-makeClient manager key =-  case makeBaseUrl key of-    Nothing ->-      Nothing--    Just baseUrl ->-      let-        makeGetLinks :<|> client' = client (Proxy :: Proxy Api) basicAuthData--        getLinks :: MonadIO m => m (Either ServantError Object)-        getLinks = run (makeGetLinks manager baseUrl)--        makeListClient = makeListClient' manager baseUrl client'+-- -        basicAuthData = BasicAuthData "" key-      in-        Just Client {..}+instance Generics.SOP.Generic AuthClient   -- | -- -- -makeListClient'-  :: Manager-  -> BaseUrl-  -> Servant.Client ListApi-  -> ListId-  -> ListClient-makeListClient' manager baseUrl client' listId =-  let-    listMemberClient =-      makeListMemberClient' manager baseUrl (client' listId)-  in-    ListClient {..}+instance (Client AuthApi ~ client) => ClientLike client AuthClient   -- | -- -- -makeListMemberClient'-  :: Manager-  -> BaseUrl-  -> Servant.Client ListMemberApi-  -> ListMemberClient-makeListMemberClient' manager baseUrl listClient =+makeAuthClientWithKey+  :: Key+  -> AuthClient+makeAuthClientWithKey key =   let-    makeAddListMember-      :<|> md-      :<|> md2-      :<|> md3-      :<|> md4-      :<|> makeDeleteListMember = listClient--    addListMember lm = run (makeAddListMember lm manager baseUrl)--    getListMembers :: MonadIO m => m (Either ServantError [ListMemberResponse])-    getListMembers = run (md manager baseUrl)--    getListMember s = run (md2 s manager baseUrl)--    updateListMember s lm = run (md3 s lm manager baseUrl)--    addOrUpdateListMember s lm = run (md4 s lm manager baseUrl)--    deleteListMember s = run (makeDeleteListMember s manager baseUrl)+    MainClient {..} = makeMainClient   in-    ListMemberClient {..}+    makeAuthClient (BasicAuthData "" key)  + -- | -- --  run   :: MonadIO m-  => ExceptT e IO a-  -> m (Either e a)-run =-  liftIO . runExceptT----- |------ Create a client for a list members.--makeListMemberClient-  :: Manager+  => Manager   -> Key-  -> ListId-  -> Maybe ListMemberClient-makeListMemberClient manager key listId =-  listMemberClient . (`makeListClient` listId)-    <$> makeClient manager key+  -> ClientM a+  -> m (Either ServantError a)+run manager key =+  let+    Just baseUrl =+      makeBaseUrl key+  in+    liftIO . flip runClientM (ClientEnv manager baseUrl)   -- |
src/Web/MailChimp/List.hs view
@@ -1,4 +1,8 @@ {-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-}  ----------------------------------------------------------------------@@ -12,19 +16,28 @@  module Web.MailChimp.List   ( ListApi-  , ListClient(..)+  , ListClient (..)   , ListId   )   where +-- base+import GHC.Generics++-- generics-sop+import Generics.SOP+ -- mailchimp import Web.MailChimp.Common-import Web.MailChimp.List.Member  -- servant import Servant.API +-- servant-client+import Servant.Client+import Servant.Client.Generic + -- | -- -- A list ID.@@ -38,10 +51,7 @@ --  type ListApi =-  "lists"-    :> Capture "list_id" ListId-    :> "members"-    :> ListMemberApi+    Get '[JSON] [String]   -- |@@ -54,6 +64,20 @@       --       -- -      listMemberClient :: ListMemberClient+      getLists :: ClientM [String]      }+  deriving (GHC.Generics.Generic)+++-- |+--+--+instance Generics.SOP.Generic ListClient+++-- |+--+--++instance (Client ListApi ~ client) => ClientLike client ListClient
src/Web/MailChimp/List/Member.hs view
@@ -1,7 +1,10 @@ {-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RankNTypes #-} {-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-}  ----------------------------------------------------------------------@@ -15,12 +18,12 @@  module Web.MailChimp.List.Member   ( ListMemberApi-  , ListMemberClient(..)-  , ListMemberRequest(..)+  , ListMemberClient (..)+  , ListMemberRequest (..)   , makeListMemberRequest-  , ListMemberResponse(..)+  , ListMemberResponse (..)   , ListMemberId-  , ListMemberStatus(..)+  , ListMemberStatus (..)   )   where @@ -28,6 +31,12 @@ import Data.Aeson import qualified Data.Aeson as Aeson +-- base+import GHC.Generics++-- generics-sop+import Generics.SOP+ -- mailchimp import Web.MailChimp.Common @@ -36,41 +45,44 @@  -- servant-client import Servant.Client+import Servant.Client.Generic  -- text import Data.Text (Text) --- transformers-import Control.Monad.IO.Class (MonadIO) - type ListMemberId =   Id + -- | -- --  type ListMemberApi =-       ReqBody '[JSON] ListMemberRequest-         :> Post '[JSON] ListMemberResponse--  :<|> Get '[JSON] [ListMemberResponse]+    ReqBody '[JSON] ListMemberRequest+      :> Post '[JSON] ListMemberResponse -  :<|> Capture "subscriber_hash" ListMemberId-         :> Get '[JSON] ListMemberResponse+  :<|>+    Get '[JSON] [ListMemberResponse] -  :<|> Capture "subscriber_hash" ListMemberId-         :> ReqBody '[JSON] ListMemberRequest-         :> Patch '[JSON] ListMemberResponse+  :<|>+    Capture "subscriber_hash" ListMemberId+      :> Get '[JSON] ListMemberResponse -  :<|> Capture "subscriber_hash" ListMemberId-         :> ReqBody '[JSON] ListMemberRequest-         :> Put '[JSON] ListMemberResponse+  :<|>+    Capture "subscriber_hash" ListMemberId+      :> ReqBody '[JSON] ListMemberRequest+      :> Patch '[JSON] ListMemberResponse +  :<|>+    Capture "subscriber_hash" ListMemberId+      :> ReqBody '[JSON] ListMemberRequest+      :> Put '[JSON] ListMemberResponse -  :<|> Capture "subscriber_hash" ListMemberId-         :> Delete '[JSON] String+  :<|>+    Capture "subscriber_hash" ListMemberId+      :> Delete '[JSON] String   -- |@@ -84,57 +96,66 @@       -- Add a new list member.        addListMember-        :: forall m . MonadIO m-        => ListMemberRequest-        -> m (Either ServantError ListMemberResponse)+        :: ListMemberRequest+        -> ClientM ListMemberResponse        -- |       --       -- Get information about members in a list.      , getListMembers-        :: forall m . MonadIO m-        => m (Either ServantError [ListMemberResponse])+        :: ClientM [ListMemberResponse]        -- |       --       -- Get information about a specific list member.      , getListMember-        :: forall m . MonadIO m-        => ListMemberId-        -> m (Either ServantError ListMemberResponse)+        :: ListMemberId+        -> ClientM ListMemberResponse        -- |       --       -- Update a list member.      , updateListMember-        :: forall m . MonadIO m-        => ListMemberId+        :: ListMemberId         -> ListMemberRequest-        -> m (Either ServantError ListMemberResponse)+        -> ClientM ListMemberResponse        -- |       --       -- Add or update a list member.      , addOrUpdateListMember-        :: forall m . MonadIO m-        => ListMemberId+        :: ListMemberId         -> ListMemberRequest-        -> m (Either ServantError ListMemberResponse)+        -> ClientM ListMemberResponse        -- |       --       -- Remove a list member.      , deleteListMember-        :: forall m . MonadIO m-        => ListMemberId-        -> m (Either ServantError String)+        :: ListMemberId+        -> ClientM String      }+  deriving (GHC.Generics.Generic)+++-- |+--+--++instance Generics.SOP.Generic ListMemberClient+++-- |+--+--++instance (Client ListMemberApi ~ client) => ClientLike client ListMemberClient   -- |
src/Web/MailChimp/Tutorial.hs view
@@ -35,12 +35,8 @@   listId <- fmap Text.pack (getEnv "MAILCHIMP_LIST_ID")    let-    Just Client {..} =-      makeClient manager key--  let-    Just ListMemberClient {..} =-      makeListMemberClient manager key listId+    AuthClient {..} = makeAuthClientWithKey key+    ListMemberClient {..} = makeListMemberClient listId    let     member =@@ -48,16 +44,8 @@         { listMemberMergeFields = [("FNAME", "Juan")]         } -  eitherLinks <- getLinks--  case eitherLinks of-    Left err ->-      putStrLn $ "Error: " ++ show err--    Right msg ->-      print msg--  eitherAdd <- addListMember member+  eitherAdd <- run manager key (addListMember member)+--  eitherAdd <- run manager key (getLinks (BasicAuthData "" key))    case eitherAdd of     Left err ->