pinboard 0.9.2 → 0.9.3
raw patch · 7 files changed
+494/−4 lines, 7 filesdep +profunctorsPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: profunctors
API changes (from Hackage documentation)
- Pinboard.ApiTypes: [NoteListItem] :: !Text -> !Text -> !Text -> !Int -> !UTCTime -> !UTCTime -> NoteListItem
- Pinboard.ApiTypes: [NoteList] :: !Int -> [NoteListItem] -> NoteList
- Pinboard.ApiTypes: [Note] :: !Text -> !Text -> !Text -> !Text -> !Int -> !UTCTime -> !UTCTime -> Note
- Pinboard.ApiTypes: [Popular] :: [Text] -> Suggested
- Pinboard.ApiTypes: [PostDates] :: !Text -> !Text -> [(Day, Int)] -> PostDates
- Pinboard.ApiTypes: [Post] :: !Text -> !Text -> !Text -> !Text -> !Text -> !UTCTime -> !Bool -> !Bool -> [Tag] -> Post
- Pinboard.ApiTypes: [Posts] :: !UTCTime -> !Text -> [Post] -> Posts
- Pinboard.ApiTypes: [Recommended] :: [Text] -> Suggested
- Pinboard.ApiTypes: [ToDoneResult] :: () -> DoneResult
- Pinboard.ApiTypes: [ToJsonTagMap] :: TagMap -> JsonTagMap
- Pinboard.ApiTypes: [ToTextResult] :: Text -> TextResult
- Pinboard.ApiTypes: [ToUpdateTime] :: UTCTime -> UpdateTime
- Pinboard.ApiTypes: instance Data DoneResult
- Pinboard.ApiTypes: instance Data JsonTagMap
- Pinboard.ApiTypes: instance Data Note
- Pinboard.ApiTypes: instance Data NoteList
- Pinboard.ApiTypes: instance Data NoteListItem
- Pinboard.ApiTypes: instance Data Post
- Pinboard.ApiTypes: instance Data PostDates
- Pinboard.ApiTypes: instance Data Posts
- Pinboard.ApiTypes: instance Data Suggested
- Pinboard.ApiTypes: instance Data TextResult
- Pinboard.ApiTypes: instance Data UpdateTime
- Pinboard.ApiTypes: instance Eq DoneResult
- Pinboard.ApiTypes: instance Eq JsonTagMap
- Pinboard.ApiTypes: instance Eq Note
- Pinboard.ApiTypes: instance Eq NoteList
- Pinboard.ApiTypes: instance Eq NoteListItem
- Pinboard.ApiTypes: instance Eq Post
- Pinboard.ApiTypes: instance Eq PostDates
- Pinboard.ApiTypes: instance Eq Posts
- Pinboard.ApiTypes: instance Eq Suggested
- Pinboard.ApiTypes: instance Eq TextResult
- Pinboard.ApiTypes: instance Eq UpdateTime
- Pinboard.ApiTypes: instance FromJSON DoneResult
- Pinboard.ApiTypes: instance FromJSON JsonTagMap
- Pinboard.ApiTypes: instance FromJSON Note
- Pinboard.ApiTypes: instance FromJSON NoteList
- Pinboard.ApiTypes: instance FromJSON NoteListItem
- Pinboard.ApiTypes: instance FromJSON Post
- Pinboard.ApiTypes: instance FromJSON PostDates
- Pinboard.ApiTypes: instance FromJSON Posts
- Pinboard.ApiTypes: instance FromJSON Suggested
- Pinboard.ApiTypes: instance FromJSON TextResult
- Pinboard.ApiTypes: instance FromJSON UpdateTime
- Pinboard.ApiTypes: instance Ord DoneResult
- Pinboard.ApiTypes: instance Ord Note
- Pinboard.ApiTypes: instance Ord NoteList
- Pinboard.ApiTypes: instance Ord NoteListItem
- Pinboard.ApiTypes: instance Ord Post
- Pinboard.ApiTypes: instance Ord PostDates
- Pinboard.ApiTypes: instance Ord Posts
- Pinboard.ApiTypes: instance Ord Suggested
- Pinboard.ApiTypes: instance Ord TextResult
- Pinboard.ApiTypes: instance Ord UpdateTime
- Pinboard.ApiTypes: instance Show DoneResult
- Pinboard.ApiTypes: instance Show JsonTagMap
- Pinboard.ApiTypes: instance Show Note
- Pinboard.ApiTypes: instance Show NoteList
- Pinboard.ApiTypes: instance Show NoteListItem
- Pinboard.ApiTypes: instance Show Post
- Pinboard.ApiTypes: instance Show PostDates
- Pinboard.ApiTypes: instance Show Posts
- Pinboard.ApiTypes: instance Show Suggested
- Pinboard.ApiTypes: instance Show TextResult
- Pinboard.ApiTypes: instance Show UpdateTime
- Pinboard.ApiTypes: instance ToJSON JsonTagMap
- Pinboard.ApiTypes: instance ToJSON Note
- Pinboard.ApiTypes: instance ToJSON NoteList
- Pinboard.ApiTypes: instance ToJSON NoteListItem
- Pinboard.ApiTypes: instance ToJSON Post
- Pinboard.ApiTypes: instance ToJSON PostDates
- Pinboard.ApiTypes: instance ToJSON Posts
- Pinboard.ApiTypes: instance ToJSON Suggested
- Pinboard.ApiTypes: instance ToJSON [Suggested]
- Pinboard.Client: [PinboardConfig] :: !ByteString -> PinboardConfig
- Pinboard.Error: [BadRequest] :: PinboardErrorHTTPCode
- Pinboard.Error: [ConnectionFailure] :: PinboardErrorType
- Pinboard.Error: [Forbidden] :: PinboardErrorHTTPCode
- Pinboard.Error: [HttpStatusFailure] :: PinboardErrorType
- Pinboard.Error: [NotFound] :: PinboardErrorHTTPCode
- Pinboard.Error: [ParseFailure] :: PinboardErrorType
- Pinboard.Error: [PinboardError] :: PinboardErrorType -> !Text -> Maybe PinboardErrorCode -> Maybe Text -> Maybe PinboardErrorHTTPCode -> PinboardError
- Pinboard.Error: [PinboardServerError] :: PinboardErrorHTTPCode
- Pinboard.Error: [RequestFailed] :: PinboardErrorHTTPCode
- Pinboard.Error: [TooManyRequests] :: PinboardErrorHTTPCode
- Pinboard.Error: [UnAuthorized] :: PinboardErrorHTTPCode
- Pinboard.Error: [UnknownErrorType] :: PinboardErrorType
- Pinboard.Error: [UnknownError] :: PinboardErrorCode
- Pinboard.Error: [UnknownHTTPCode] :: PinboardErrorHTTPCode
- Pinboard.Error: instance Show PinboardError
- Pinboard.Error: instance Show PinboardErrorCode
- Pinboard.Error: instance Show PinboardErrorHTTPCode
- Pinboard.Error: instance Show PinboardErrorType
- Pinboard.Types: [Count] :: !Int -> Param
- Pinboard.Types: [DateTime] :: !UTCTime -> Param
- Pinboard.Types: [Date] :: !Day -> Param
- Pinboard.Types: [Description] :: !Text -> Param
- Pinboard.Types: [Extended] :: !Text -> Param
- Pinboard.Types: [FormatJson] :: ResultFormatType
- Pinboard.Types: [FormatXml] :: ResultFormatType
- Pinboard.Types: [Format] :: !ResultFormatType -> Param
- Pinboard.Types: [FromDateTime] :: !UTCTime -> Param
- Pinboard.Types: [Meta] :: !Int -> Param
- Pinboard.Types: [New] :: !Text -> Param
- Pinboard.Types: [Old] :: !Text -> Param
- Pinboard.Types: [PinboardConfig] :: !ByteString -> PinboardConfig
- Pinboard.Types: [PinboardRequest] :: !Text -> [Param] -> PinboardRequest
- Pinboard.Types: [Replace] :: !Bool -> Param
- Pinboard.Types: [Results] :: !Int -> Param
- Pinboard.Types: [Shared] :: !Bool -> Param
- Pinboard.Types: [Start] :: !Int -> Param
- Pinboard.Types: [Tag] :: !Text -> Param
- Pinboard.Types: [Tags] :: !Text -> Param
- Pinboard.Types: [ToDateTime] :: !UTCTime -> Param
- Pinboard.Types: [ToRead] :: !Bool -> Param
- Pinboard.Types: [Url] :: !Text -> Param
- Pinboard.Types: instance Eq Param
- Pinboard.Types: instance Eq ResultFormatType
- Pinboard.Types: instance Show Param
- Pinboard.Types: instance Show PinboardConfig
- Pinboard.Types: instance Show PinboardRequest
- Pinboard.Types: instance Show ResultFormatType
+ Pinboard.ApiTypes: Note :: !Text -> !Text -> !Text -> !Text -> !Int -> !UTCTime -> !UTCTime -> Note
+ Pinboard.ApiTypes: NoteList :: !Int -> [NoteListItem] -> NoteList
+ Pinboard.ApiTypes: NoteListItem :: !Text -> !Text -> !Text -> !Int -> !UTCTime -> !UTCTime -> NoteListItem
+ Pinboard.ApiTypes: Popular :: [Text] -> Suggested
+ Pinboard.ApiTypes: Post :: !Text -> !Text -> !Text -> !Text -> !Text -> !UTCTime -> !Bool -> !Bool -> [Tag] -> Post
+ Pinboard.ApiTypes: PostDates :: !Text -> !Text -> [(Day, Int)] -> PostDates
+ Pinboard.ApiTypes: Posts :: !UTCTime -> !Text -> [Post] -> Posts
+ Pinboard.ApiTypes: Recommended :: [Text] -> Suggested
+ Pinboard.ApiTypes: ToDoneResult :: () -> DoneResult
+ Pinboard.ApiTypes: ToJsonTagMap :: TagMap -> JsonTagMap
+ Pinboard.ApiTypes: ToTextResult :: Text -> TextResult
+ Pinboard.ApiTypes: ToUpdateTime :: UTCTime -> UpdateTime
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.DoneResult
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.JsonTagMap
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.Note
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.NoteList
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.NoteListItem
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.Post
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.PostDates
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.Posts
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.Suggested
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.TextResult
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.FromJSON Pinboard.ApiTypes.UpdateTime
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON Pinboard.ApiTypes.JsonTagMap
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON Pinboard.ApiTypes.Note
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON Pinboard.ApiTypes.NoteList
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON Pinboard.ApiTypes.NoteListItem
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON Pinboard.ApiTypes.Post
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON Pinboard.ApiTypes.PostDates
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON Pinboard.ApiTypes.Posts
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON Pinboard.ApiTypes.Suggested
+ Pinboard.ApiTypes: instance Data.Aeson.Types.Class.ToJSON [Pinboard.ApiTypes.Suggested]
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.DoneResult
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.JsonTagMap
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.Note
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.NoteList
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.NoteListItem
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.Post
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.PostDates
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.Posts
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.Suggested
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.TextResult
+ Pinboard.ApiTypes: instance Data.Data.Data Pinboard.ApiTypes.UpdateTime
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.DoneResult
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.JsonTagMap
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.Note
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.NoteList
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.NoteListItem
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.Post
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.PostDates
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.Posts
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.Suggested
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.TextResult
+ Pinboard.ApiTypes: instance GHC.Classes.Eq Pinboard.ApiTypes.UpdateTime
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.DoneResult
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.Note
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.NoteList
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.NoteListItem
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.Post
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.PostDates
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.Posts
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.Suggested
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.TextResult
+ Pinboard.ApiTypes: instance GHC.Classes.Ord Pinboard.ApiTypes.UpdateTime
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.DoneResult
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.JsonTagMap
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.Note
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.NoteList
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.NoteListItem
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.Post
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.PostDates
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.Posts
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.Suggested
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.TextResult
+ Pinboard.ApiTypes: instance GHC.Show.Show Pinboard.ApiTypes.UpdateTime
+ Pinboard.ApiTypesLens: noteCreatedAtL :: Lens_' Note UTCTime
+ Pinboard.ApiTypesLens: noteHashL :: Lens_' Note Text
+ Pinboard.ApiTypesLens: noteIdL :: Lens_' Note Text
+ Pinboard.ApiTypesLens: noteLengthL :: Lens_' Note Int
+ Pinboard.ApiTypesLens: noteListCountL :: Lens_' NoteList Int
+ Pinboard.ApiTypesLens: noteListItemCreatedAtL :: Lens_' NoteListItem UTCTime
+ Pinboard.ApiTypesLens: noteListItemHashL :: Lens_' NoteListItem Text
+ Pinboard.ApiTypesLens: noteListItemIdL :: Lens_' NoteListItem Text
+ Pinboard.ApiTypesLens: noteListItemLengthL :: Lens_' NoteListItem Int
+ Pinboard.ApiTypesLens: noteListItemTitleL :: Lens_' NoteListItem Text
+ Pinboard.ApiTypesLens: noteListItemUpdatedAtL :: Lens_' NoteListItem UTCTime
+ Pinboard.ApiTypesLens: noteListItemsL :: Lens_' NoteList [NoteListItem]
+ Pinboard.ApiTypesLens: noteTextL :: Lens_' Note Text
+ Pinboard.ApiTypesLens: noteTitleL :: Lens_' Note Text
+ Pinboard.ApiTypesLens: noteUpdatedAtL :: Lens_' Note UTCTime
+ Pinboard.ApiTypesLens: popularP :: Prism_' Suggested [Text]
+ Pinboard.ApiTypesLens: postDatesCountL :: Lens_' PostDates [(Day, Int)]
+ Pinboard.ApiTypesLens: postDatesTagL :: Lens_' PostDates Text
+ Pinboard.ApiTypesLens: postDatesUserL :: Lens_' PostDates Text
+ Pinboard.ApiTypesLens: postDescriptionL :: Lens_' Post Text
+ Pinboard.ApiTypesLens: postExtendedL :: Lens_' Post Text
+ Pinboard.ApiTypesLens: postHashL :: Lens_' Post Text
+ Pinboard.ApiTypesLens: postHrefL :: Lens_' Post Text
+ Pinboard.ApiTypesLens: postMetaL :: Lens_' Post Text
+ Pinboard.ApiTypesLens: postSharedL :: Lens_' Post Bool
+ Pinboard.ApiTypesLens: postTagsL :: Lens_' Post [Tag]
+ Pinboard.ApiTypesLens: postTimeL :: Lens_' Post UTCTime
+ Pinboard.ApiTypesLens: postToReadL :: Lens_' Post Bool
+ Pinboard.ApiTypesLens: postsDateL :: Lens_' Posts UTCTime
+ Pinboard.ApiTypesLens: postsPostsL :: Lens_' Posts [Post]
+ Pinboard.ApiTypesLens: postsUserL :: Lens_' Posts Text
+ Pinboard.ApiTypesLens: recommendedP :: Prism_' Suggested [Text]
+ Pinboard.ApiTypesLens: type Lens_ s t a b = forall (f :: * -> *). Functor f => (a -> f b) -> s -> f t
+ Pinboard.ApiTypesLens: type Lens_' s a = Lens_ s s a a
+ Pinboard.ApiTypesLens: type Prism_' s a = Prism_ s s a a
+ Pinboard.ApiTypesLens: type Prism_ s t a b = forall (p :: * -> * -> *) (f :: * -> *). (Choice p, Applicative f) => p a (f b) -> p s (f t)
+ Pinboard.Client: PinboardConfig :: !ByteString -> PinboardConfig
+ Pinboard.Error: BadRequest :: PinboardErrorHTTPCode
+ Pinboard.Error: ConnectionFailure :: PinboardErrorType
+ Pinboard.Error: Forbidden :: PinboardErrorHTTPCode
+ Pinboard.Error: HttpStatusFailure :: PinboardErrorType
+ Pinboard.Error: NotFound :: PinboardErrorHTTPCode
+ Pinboard.Error: ParseFailure :: PinboardErrorType
+ Pinboard.Error: PinboardError :: PinboardErrorType -> !Text -> Maybe PinboardErrorCode -> Maybe Text -> Maybe PinboardErrorHTTPCode -> PinboardError
+ Pinboard.Error: PinboardServerError :: PinboardErrorHTTPCode
+ Pinboard.Error: RequestFailed :: PinboardErrorHTTPCode
+ Pinboard.Error: TooManyRequests :: PinboardErrorHTTPCode
+ Pinboard.Error: UnAuthorized :: PinboardErrorHTTPCode
+ Pinboard.Error: UnknownError :: PinboardErrorCode
+ Pinboard.Error: UnknownErrorType :: PinboardErrorType
+ Pinboard.Error: UnknownHTTPCode :: PinboardErrorHTTPCode
+ Pinboard.Error: instance GHC.Show.Show Pinboard.Error.PinboardError
+ Pinboard.Error: instance GHC.Show.Show Pinboard.Error.PinboardErrorCode
+ Pinboard.Error: instance GHC.Show.Show Pinboard.Error.PinboardErrorHTTPCode
+ Pinboard.Error: instance GHC.Show.Show Pinboard.Error.PinboardErrorType
+ Pinboard.Types: Count :: !Int -> Param
+ Pinboard.Types: Date :: !Day -> Param
+ Pinboard.Types: DateTime :: !UTCTime -> Param
+ Pinboard.Types: Description :: !Text -> Param
+ Pinboard.Types: Extended :: !Text -> Param
+ Pinboard.Types: Format :: !ResultFormatType -> Param
+ Pinboard.Types: FormatJson :: ResultFormatType
+ Pinboard.Types: FormatXml :: ResultFormatType
+ Pinboard.Types: FromDateTime :: !UTCTime -> Param
+ Pinboard.Types: Meta :: !Int -> Param
+ Pinboard.Types: New :: !Text -> Param
+ Pinboard.Types: Old :: !Text -> Param
+ Pinboard.Types: PinboardConfig :: !ByteString -> PinboardConfig
+ Pinboard.Types: PinboardRequest :: !Text -> [Param] -> PinboardRequest
+ Pinboard.Types: Replace :: !Bool -> Param
+ Pinboard.Types: Results :: !Int -> Param
+ Pinboard.Types: Shared :: !Bool -> Param
+ Pinboard.Types: Start :: !Int -> Param
+ Pinboard.Types: Tag :: !Text -> Param
+ Pinboard.Types: Tags :: !Text -> Param
+ Pinboard.Types: ToDateTime :: !UTCTime -> Param
+ Pinboard.Types: ToRead :: !Bool -> Param
+ Pinboard.Types: Url :: !Text -> Param
+ Pinboard.Types: instance GHC.Classes.Eq Pinboard.Types.Param
+ Pinboard.Types: instance GHC.Classes.Eq Pinboard.Types.ResultFormatType
+ Pinboard.Types: instance GHC.Show.Show Pinboard.Types.Param
+ Pinboard.Types: instance GHC.Show.Show Pinboard.Types.PinboardConfig
+ Pinboard.Types: instance GHC.Show.Show Pinboard.Types.PinboardRequest
+ Pinboard.Types: instance GHC.Show.Show Pinboard.Types.ResultFormatType
Files
- README.md +28/−0
- changelog.md +4/−0
- pinboard.cabal +4/−2
- src/Pinboard.hs +4/−0
- src/Pinboard/ApiTypes.hs +1/−1
- src/Pinboard/ApiTypesLens.hs +452/−0
- src/Pinboard/Client.hs +1/−1
README.md view
@@ -44,6 +44,30 @@ postToRead = False, postTags = ["spj", "video", "haskell", "typetheory"]}]} ```++### getPostsRecent (using Lenses)+``` {.haskell}+{-# LANGUAGE OverloadedStrings #-}++import Pinboard+import Control.Lens++main :: IO ()+main = do+ let config = fromApiToken "api token"+ result <- runPinboard config $ getPostsRecent (Just ["haskell"]) (Just 3)+ mapM_ print (result ^.. _Right . postsPostsL . traverse . postHrefL)++```++output:+```+"http://www.stephendiehl.com/posts/production.html"+"https://mail.haskell.org/mailman/listinfo"+"https://en.wikibooks.org/wiki/Haskell/Applicative_functors#A_sliding_scale_of_power"+```++ ## Modules [Pinboard.Types](https://hackage.haskell.org/package/pinboard/docs/Pinboard-Types.html)@@ -61,3 +85,7 @@ [Pinboard.ApiTypes](https://hackage.haskell.org/package/pinboard/docs/Pinboard-ApiTypes.html) Pinboard Data Structures returned by the Api++[Pinboard.ApiTypesLens](https://hackage.haskell.org/package/pinboard/docs/Pinboard-ApiTypesLens.html)++ Lens accessors for Pinboard.ApiTypes
changelog.md view
@@ -1,3 +1,7 @@+__v0.9.3__++Add lenses+ __v0.9.2__ Make data fields strict
pinboard.cabal view
@@ -1,5 +1,5 @@ name: pinboard-version: 0.9.2+version: 0.9.3 synopsis: Access to the Pinboard API license: MIT license-file: LICENSE@@ -32,6 +32,7 @@ , http-client-tls , mtl >= 2.2.1 , old-locale+ , profunctors >= 5 , network , random >= 1.1 , text@@ -41,12 +42,13 @@ , vector default-language: Haskell2010- other-modules: + other-modules: exposed-modules: Pinboard Pinboard.Api Pinboard.ApiRequest Pinboard.ApiTypes + Pinboard.ApiTypesLens Pinboard.Client Pinboard.Error Pinboard.Types
src/Pinboard.hs view
@@ -30,9 +30,13 @@ -- * Pinboard.ApiTypes -- | Pinboard Data Structures returned by the Api , module Pinboard.ApiTypes+ -- * Pinboard.ApiTypesLens+ -- | Lens accessors for Pinboard.ApiTypes+ , module Pinboard.ApiTypesLens ) where import Pinboard.Client import Pinboard.Api import Pinboard.ApiRequest import Pinboard.ApiTypes+import Pinboard.ApiTypesLens
src/Pinboard/ApiTypes.hs view
@@ -11,7 +11,7 @@ -- Maintainer : jonschoning@gmail.com -- Stability : experimental -- Portability : POSIX-module Pinboard.ApiTypes where+module Pinboard.ApiTypes where import Data.Aeson import Data.Aeson.Types (Parser)
+ src/Pinboard/ApiTypesLens.hs view
@@ -0,0 +1,452 @@+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE RankNTypes #-}++module Pinboard.ApiTypesLens where++import Pinboard.ApiTypes++import Data.Text (Text)+import Data.Time (UTCTime)+import Data.Time.Calendar (Day)++import Control.Applicative +import Data.Profunctor +import Data.Either +import Prelude hiding (words, unwords)++-- * Lens Aliases++type Lens_' s a = Lens_ s s a a+type Lens_ s t a b = forall (f :: * -> *). Functor f => (a -> f b) -> s -> f t++type Prism_' s a = Prism_ s s a a+type Prism_ s t a b = forall (p :: * -> * -> *) (f :: * -> *). (Choice p, Applicative f) => p a (f b) -> p s (f t)++-- * Posts++postsDateL :: Lens_' Posts UTCTime+postsDateL f_acx6 (Posts x1_acx7 x2_acx8 x3_acx9)+ = fmap+ (\ y1_acxa -> Posts y1_acxa x2_acx8 x3_acx9) (f_acx6 x1_acx7)+{-# INLINE postsDateL #-}+postsPostsL :: Lens_' Posts [Post]+postsPostsL f_acxb (Posts x1_acxc x2_acxd x3_acxe)+ = fmap+ (\ y1_acxf -> Posts x1_acxc x2_acxd y1_acxf) (f_acxb x3_acxe)+{-# INLINE postsPostsL #-}+postsUserL :: Lens_' Posts Text+postsUserL f_acxg (Posts x1_acxh x2_acxi x3_acxj)+ = fmap+ (\ y1_acxk -> Posts x1_acxh y1_acxk x3_acxj) (f_acxg x2_acxi)+{-# INLINE postsUserL #-}+++-- * Post++postDescriptionL :: Lens_' Post Text+postDescriptionL+ f_aczI+ (Post x1_aczJ+ x2_aczK+ x3_aczL+ x4_aczM+ x5_aczN+ x6_aczO+ x7_aczP+ x8_aczQ+ x9_aczR)+ = fmap+ (\ y1_aczS+ -> Post+ x1_aczJ+ y1_aczS+ x3_aczL+ x4_aczM+ x5_aczN+ x6_aczO+ x7_aczP+ x8_aczQ+ x9_aczR)+ (f_aczI x2_aczK)+{-# INLINE postDescriptionL #-}+postExtendedL :: Lens_' Post Text+postExtendedL+ f_aczT+ (Post x1_aczU+ x2_aczV+ x3_aczW+ x4_aczX+ x5_aczY+ x6_aczZ+ x7_acA0+ x8_acA1+ x9_acA2)+ = fmap+ (\ y1_acA3+ -> Post+ x1_aczU+ x2_aczV+ y1_acA3+ x4_aczX+ x5_aczY+ x6_aczZ+ x7_acA0+ x8_acA1+ x9_acA2)+ (f_aczT x3_aczW)+{-# INLINE postExtendedL #-}+postHashL :: Lens_' Post Text+postHashL+ f_acA4+ (Post x1_acA5+ x2_acA6+ x3_acA7+ x4_acA8+ x5_acA9+ x6_acAa+ x7_acAb+ x8_acAc+ x9_acAd)+ = fmap+ (\ y1_acAe+ -> Post+ x1_acA5+ x2_acA6+ x3_acA7+ x4_acA8+ y1_acAe+ x6_acAa+ x7_acAb+ x8_acAc+ x9_acAd)+ (f_acA4 x5_acA9)+{-# INLINE postHashL #-}+postHrefL :: Lens_' Post Text+postHrefL+ f_acAf+ (Post x1_acAg+ x2_acAh+ x3_acAi+ x4_acAj+ x5_acAk+ x6_acAl+ x7_acAm+ x8_acAn+ x9_acAo)+ = fmap+ (\ y1_acAp+ -> Post+ y1_acAp+ x2_acAh+ x3_acAi+ x4_acAj+ x5_acAk+ x6_acAl+ x7_acAm+ x8_acAn+ x9_acAo)+ (f_acAf x1_acAg)+{-# INLINE postHrefL #-}+postMetaL :: Lens_' Post Text+postMetaL+ f_acAq+ (Post x1_acAr+ x2_acAs+ x3_acAt+ x4_acAu+ x5_acAv+ x6_acAw+ x7_acAx+ x8_acAy+ x9_acAz)+ = fmap+ (\ y1_acAA+ -> Post+ x1_acAr+ x2_acAs+ x3_acAt+ y1_acAA+ x5_acAv+ x6_acAw+ x7_acAx+ x8_acAy+ x9_acAz)+ (f_acAq x4_acAu)+{-# INLINE postMetaL #-}+postSharedL :: Lens_' Post Bool+postSharedL+ f_acAB+ (Post x1_acAC+ x2_acAD+ x3_acAE+ x4_acAF+ x5_acAG+ x6_acAH+ x7_acAI+ x8_acAJ+ x9_acAK)+ = fmap+ (\ y1_acAL+ -> Post+ x1_acAC+ x2_acAD+ x3_acAE+ x4_acAF+ x5_acAG+ x6_acAH+ y1_acAL+ x8_acAJ+ x9_acAK)+ (f_acAB x7_acAI)+{-# INLINE postSharedL #-}+postTagsL :: Lens_' Post [Tag]+postTagsL+ f_acAM+ (Post x1_acAN+ x2_acAO+ x3_acAP+ x4_acAQ+ x5_acAR+ x6_acAS+ x7_acAT+ x8_acAU+ x9_acAV)+ = fmap+ (\ y1_acAW+ -> Post+ x1_acAN+ x2_acAO+ x3_acAP+ x4_acAQ+ x5_acAR+ x6_acAS+ x7_acAT+ x8_acAU+ y1_acAW)+ (f_acAM x9_acAV)+{-# INLINE postTagsL #-}+postTimeL :: Lens_' Post UTCTime+postTimeL+ f_acAX+ (Post x1_acAY+ x2_acAZ+ x3_acB0+ x4_acB1+ x5_acB2+ x6_acB3+ x7_acB4+ x8_acB5+ x9_acB6)+ = fmap+ (\ y1_acB7+ -> Post+ x1_acAY+ x2_acAZ+ x3_acB0+ x4_acB1+ x5_acB2+ y1_acB7+ x7_acB4+ x8_acB5+ x9_acB6)+ (f_acAX x6_acB3)+{-# INLINE postTimeL #-}+postToReadL :: Lens_' Post Bool+postToReadL+ f_acB8+ (Post x1_acB9+ x2_acBa+ x3_acBb+ x4_acBc+ x5_acBd+ x6_acBe+ x7_acBf+ x8_acBg+ x9_acBh)+ = fmap+ (\ y1_acBi+ -> Post+ x1_acB9+ x2_acBa+ x3_acBb+ x4_acBc+ x5_acBd+ x6_acBe+ x7_acBf+ y1_acBi+ x9_acBh)+ (f_acB8 x8_acBg)+{-# INLINE postToReadL #-}++-- * PostDates++postDatesCountL :: Lens_' PostDates [(Day, Int)]+postDatesCountL f_a1M4D (PostDates x1_a1M4E x2_a1M4F x3_a1M4G)+ = fmap+ (\ y1_a1M4H -> PostDates x1_a1M4E x2_a1M4F y1_a1M4H)+ (f_a1M4D x3_a1M4G)+{-# INLINE postDatesCountL #-}+postDatesTagL :: Lens_' PostDates Text+postDatesTagL f_a1M4I (PostDates x1_a1M4J x2_a1M4K x3_a1M4L)+ = fmap+ (\ y1_a1M4M -> PostDates x1_a1M4J y1_a1M4M x3_a1M4L)+ (f_a1M4I x2_a1M4K)+{-# INLINE postDatesTagL #-}+postDatesUserL :: Lens_' PostDates Text+postDatesUserL f_a1M4N (PostDates x1_a1M4O x2_a1M4P x3_a1M4Q)+ = fmap+ (\ y1_a1M4R -> PostDates y1_a1M4R x2_a1M4P x3_a1M4Q)+ (f_a1M4N x1_a1M4O)+{-# INLINE postDatesUserL #-}++-- * NoteList++noteListCountL :: Lens_' NoteList Int+noteListCountL f_acwZ (NoteList x1_acx0 x2_acx1)+ = fmap (\ y1_acx2 -> NoteList y1_acx2 x2_acx1) (f_acwZ x1_acx0)+{-# INLINE noteListCountL #-}+noteListItemsL :: Lens_' NoteList [NoteListItem]+noteListItemsL f_acx3 (NoteList x1_acx4 x2_acx5)+ = fmap (\ y1_acx6 -> NoteList x1_acx4 y1_acx6) (f_acx3 x2_acx5)+{-# INLINE noteListItemsL #-}+++-- * NoteListItem+++noteListItemCreatedAtL :: Lens_' NoteListItem UTCTime+noteListItemCreatedAtL+ f_acx0+ (NoteListItem x1_acx1 x2_acx2 x3_acx3 x4_acx4 x5_acx5 x6_acx6)+ = fmap+ (\ y1_acx7+ -> NoteListItem x1_acx1 x2_acx2 x3_acx3 x4_acx4 y1_acx7 x6_acx6)+ (f_acx0 x5_acx5)+{-# INLINE noteListItemCreatedAtL #-}+noteListItemHashL :: Lens_' NoteListItem Text+noteListItemHashL+ f_acx8+ (NoteListItem x1_acx9 x2_acxa x3_acxb x4_acxc x5_acxd x6_acxe)+ = fmap+ (\ y1_acxf+ -> NoteListItem x1_acx9 y1_acxf x3_acxb x4_acxc x5_acxd x6_acxe)+ (f_acx8 x2_acxa)+{-# INLINE noteListItemHashL #-}+noteListItemIdL :: Lens_' NoteListItem Text+noteListItemIdL+ f_acxg+ (NoteListItem x1_acxh x2_acxi x3_acxj x4_acxk x5_acxl x6_acxm)+ = fmap+ (\ y1_acxn+ -> NoteListItem y1_acxn x2_acxi x3_acxj x4_acxk x5_acxl x6_acxm)+ (f_acxg x1_acxh)+{-# INLINE noteListItemIdL #-}+noteListItemLengthL :: Lens_' NoteListItem Int+noteListItemLengthL+ f_acxo+ (NoteListItem x1_acxp x2_acxq x3_acxr x4_acxs x5_acxt x6_acxu)+ = fmap+ (\ y1_acxv+ -> NoteListItem x1_acxp x2_acxq x3_acxr y1_acxv x5_acxt x6_acxu)+ (f_acxo x4_acxs)+{-# INLINE noteListItemLengthL #-}+noteListItemTitleL :: Lens_' NoteListItem Text+noteListItemTitleL+ f_acxw+ (NoteListItem x1_acxx x2_acxy x3_acxz x4_acxA x5_acxB x6_acxC)+ = fmap+ (\ y1_acxD+ -> NoteListItem x1_acxx x2_acxy y1_acxD x4_acxA x5_acxB x6_acxC)+ (f_acxw x3_acxz)+{-# INLINE noteListItemTitleL #-}+noteListItemUpdatedAtL :: Lens_' NoteListItem UTCTime+noteListItemUpdatedAtL+ f_acxE+ (NoteListItem x1_acxF x2_acxG x3_acxH x4_acxI x5_acxJ x6_acxK)+ = fmap+ (\ y1_acxL+ -> NoteListItem x1_acxF x2_acxG x3_acxH x4_acxI x5_acxJ y1_acxL)+ (f_acxE x6_acxK)+{-# INLINE noteListItemUpdatedAtL #-}++noteCreatedAtL :: Lens_' Note UTCTime+noteCreatedAtL+ f_acx6+ (Note x1_acx7 x2_acx8 x3_acx9 x4_acxa x5_acxb x6_acxc x7_acxd)+ = fmap+ (\ y1_acxe+ -> Note x1_acx7 x2_acx8 x3_acx9 x4_acxa x5_acxb y1_acxe x7_acxd)+ (f_acx6 x6_acxc)+{-# INLINE noteCreatedAtL #-}+noteHashL :: Lens_' Note Text+noteHashL+ f_acxf+ (Note x1_acxg x2_acxh x3_acxi x4_acxj x5_acxk x6_acxl x7_acxm)+ = fmap+ (\ y1_acxn+ -> Note x1_acxg y1_acxn x3_acxi x4_acxj x5_acxk x6_acxl x7_acxm)+ (f_acxf x2_acxh)+{-# INLINE noteHashL #-}+noteIdL :: Lens_' Note Text+noteIdL+ f_acxo+ (Note x1_acxp x2_acxq x3_acxr x4_acxs x5_acxt x6_acxu x7_acxv)+ = fmap+ (\ y1_acxw+ -> Note y1_acxw x2_acxq x3_acxr x4_acxs x5_acxt x6_acxu x7_acxv)+ (f_acxo x1_acxp)+{-# INLINE noteIdL #-}+noteLengthL :: Lens_' Note Int+noteLengthL+ f_acxx+ (Note x1_acxy x2_acxz x3_acxA x4_acxB x5_acxC x6_acxD x7_acxE)+ = fmap+ (\ y1_acxF+ -> Note x1_acxy x2_acxz x3_acxA x4_acxB y1_acxF x6_acxD x7_acxE)+ (f_acxx x5_acxC)+{-# INLINE noteLengthL #-}+noteTextL :: Lens_' Note Text+noteTextL+ f_acxG+ (Note x1_acxH x2_acxI x3_acxJ x4_acxK x5_acxL x6_acxM x7_acxN)+ = fmap+ (\ y1_acxO+ -> Note x1_acxH x2_acxI x3_acxJ y1_acxO x5_acxL x6_acxM x7_acxN)+ (f_acxG x4_acxK)+{-# INLINE noteTextL #-}+noteTitleL :: Lens_' Note Text+noteTitleL+ f_acxP+ (Note x1_acxQ x2_acxR x3_acxS x4_acxT x5_acxU x6_acxV x7_acxW)+ = fmap+ (\ y1_acxX+ -> Note x1_acxQ x2_acxR y1_acxX x4_acxT x5_acxU x6_acxV x7_acxW)+ (f_acxP x3_acxS)+{-# INLINE noteTitleL #-}+noteUpdatedAtL :: Lens_' Note UTCTime+noteUpdatedAtL+ f_acxY+ (Note x1_acxZ x2_acy0 x3_acy1 x4_acy2 x5_acy3 x6_acy4 x7_acy5)+ = fmap+ (\ y1_acy6+ -> Note x1_acxZ x2_acy0 x3_acy1 x4_acy2 x5_acy3 x6_acy4 y1_acy6)+ (f_acxY x7_acy5)+{-# INLINE noteUpdatedAtL #-}++-- * Suggested (Prism)++popularP :: Prism_' Suggested [Text]+popularP+ = dimap (\ x_acHs -> case x_acHs of + (Popular y1_acHt) -> Right y1_acHt+ _ -> Left x_acHs) + (either pure (fmap Popular)) . right'+ ++recommendedP :: Prism_' Suggested [Text]+recommendedP+ = dimap (\ x_acHv -> case x_acHv of + (Recommended y1_acHw) -> Right y1_acHw+ _ -> Left x_acHv)+ (either pure (fmap Recommended)) . right' +
src/Pinboard/Client.hs view
@@ -155,7 +155,7 @@ buildReq url = do req <- liftIO $ parseUrl $ "https://api.pinboard.in/v1/" <> url return $ req - { requestHeaders = [("User-Agent","pinboard.hs/0.9.2")]+ { requestHeaders = [("User-Agent","pinboard.hs/0.9.3")] , checkStatus = \_ _ _ -> Nothing }