packages feed

pinboard 0.8.5 → 0.8.6

raw patch · 4 files changed

+39/−23 lines, 4 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ Pinboard.Client.Types: runPinboardT :: PinboardEnv -> PinboardT m a -> m (Either PinboardError a)
+ Pinboard.Client.Types: type PinboardEnv = (PinboardConfig, Manager)
- Pinboard.Client: sendPinboardRequest :: MonadIO m => PinboardRequest -> PinboardConfig -> Manager -> (Response ByteString -> a) -> m a
+ Pinboard.Client: sendPinboardRequest :: MonadIO m => PinboardEnv -> PinboardRequest -> (Response ByteString -> a) -> m a
- Pinboard.Client.Types: type MonadPinboard m = (MonadIO m, MonadReader (PinboardConfig, Manager) m, MonadError PinboardError m)
+ Pinboard.Client.Types: type MonadPinboard m = (MonadIO m, MonadReader PinboardEnv m, MonadError PinboardError m)
- Pinboard.Client.Types: type PinboardT m a = ReaderT (PinboardConfig, Manager) (ExceptT PinboardError m) a
+ Pinboard.Client.Types: type PinboardT m a = ReaderT PinboardEnv (ExceptT PinboardError m) a

Files

changelog.md view
@@ -1,3 +1,7 @@+__v0.8.5__++replace Pinboard stack with PinboardT transfomer (use mtl style constraints instead of a fixed monad transformer stack)+ __v0.7.5__  replacing/removing io-streams in favor of http-client
pinboard.cabal view
@@ -1,5 +1,5 @@ name:                pinboard-version:             0.8.5+version:             0.8.6 synopsis:            Access to the Pinboard API license:             MIT license-file:        LICENSE
src/Pinboard/Client.hs view
@@ -50,7 +50,7 @@     ) where  -import Control.Exception          (catch, SomeException, try, bracket)+import Control.Exception          (catch, SomeException, try) import Control.Monad.IO.Class import Control.Monad.Reader import Control.Monad.Except@@ -91,14 +91,15 @@     => PinboardConfig     -> PinboardT m a     -> m (Either PinboardError a)-runPinboard config requests = mgrOpenRaw >>= go-  where go mgr = runExceptT $ runReaderT requests (config, mgr) +runPinboard config f = mgrOpenRaw >>= go+    where go mgr = runPinboardT (config, mgr) f + -- | Create a Pinboard value from a PinboardRequest w/ json deserialization pinboardJson :: (MonadPinboard m, FromJSON a) => PinboardRequest -> m a pinboardJson req = do -  (config, mgr)  <- ask-  res <- sendPinboardRequest (ensureResultFormatType FormatJson req) config mgr parseJSONResponse+  env <- ask+  res <- sendPinboardRequest env (ensureResultFormatType FormatJson req) parseJSONResponse   res  --------------------------------------------------------------------------------@@ -109,9 +110,8 @@     -> PinboardRequest     -> (Response LBS.ByteString -> a)     -> m (Either PinboardError a)-runPinboardSingleRaw config req handler = -  liftIO $ bracket mgrOpen return (either (mgrFail ConnectionFailure) go)-    where go mgr = (Right <$> sendPinboardRequest req config mgr handler)+runPinboardSingleRaw config req handler = liftIO $ mgrOpenRaw >>= go+  where go mgr = (Right <$> sendPinboardRequest (config, mgr) req handler)                     `catch` mgrFail UnknownErrorType  runPinboardSingleRawBS@@ -137,12 +137,11 @@  sendPinboardRequest       :: MonadIO m-      => PinboardRequest -      -> PinboardConfig -      -> Manager+      => PinboardEnv+      -> PinboardRequest        -> (Response LBS.ByteString -> a)       -> m a-sendPinboardRequest PinboardRequest{..} PinboardConfig{..} man handler = do+sendPinboardRequest (PinboardConfig{..}, man) PinboardRequest{..} handler = do    let url = T.concat [ requestPath                        , "?"                        , T.decodeUtf8 $ paramsToByteString $ ("auth_token", urlEncode False apiToken) : encodeParams requestParams ]@@ -156,7 +155,7 @@ buildReq url = do   req <- liftIO $ parseUrl $ "https://api.pinboard.in/v1/" <> url   return $ req -    { requestHeaders = [("User-Agent","pinboard.hs/0.8.5")]+    { requestHeaders = [("User-Agent","pinboard.hs/0.8.6")]     , checkStatus = \_ _ _ -> Nothing     } 
src/Pinboard/Client/Types.hs view
@@ -9,7 +9,9 @@ -- Stability   : experimental -- Portability : POSIX module Pinboard.Client.Types-  ( PinboardT+  ( PinboardEnv+  , PinboardT+  , runPinboardT   , MonadPinboard   , PinboardRequest (..)   , PinboardConfig  (..)@@ -19,26 +21,37 @@   ) where  import Control.Monad.Reader       (ReaderT)+import Control.Monad.Reader.Class (MonadReader)+import Control.Monad.Trans.Except (ExceptT, runExceptT)+import Control.Monad.Trans.Reader (runReaderT)+import Control.Monad.Error.Class  (MonadError)+import Control.Monad.IO.Class     (MonadIO)+ import Data.ByteString            (ByteString) import Data.Text                  (Text)-import Network.HTTP.Client        (Manager)-import Pinboard.Client.Error  (PinboardError (..)) import Data.Time.Calendar(Day) import Data.Time.Clock(UTCTime)-import Control.Monad.Reader.Class(MonadReader)-import Control.Monad.Error.Class(MonadError)-import Control.Monad.IO.Class(MonadIO)-import Control.Monad.Except(ExceptT)+import Network.HTTP.Client        (Manager) +import Pinboard.Client.Error  (PinboardError (..))+ ------------------------------------------------------------------------------ -type PinboardT m a = ReaderT (PinboardConfig, Manager) (ExceptT PinboardError m) a+type PinboardEnv = (PinboardConfig, Manager) +type PinboardT m a = ReaderT PinboardEnv (ExceptT PinboardError m) a++runPinboardT +  :: PinboardEnv+  -> PinboardT m a+  -> m (Either PinboardError a)+runPinboardT e f = runExceptT (runReaderT f e)+ -- |Typeclass alias for the return type of the API functions (keeps the -- signatures less verbose) type MonadPinboard m =   ( MonadIO m-  , MonadReader (PinboardConfig, Manager) m+  , MonadReader PinboardEnv m   , MonadError PinboardError m   )