spotify-0.1.0.0: examples/Spotify/CheckPlaylistOverlap.hs
module Spotify.CheckPlaylistOverlap (main) where
import Spotify
import Spotify.Types.Misc
import Spotify.Types.Playlists
import Spotify.Types.Tracks
import Control.Monad (join, (<=<))
import Control.Monad.IO.Class (liftIO)
import Data.Bitraversable (Bitraversable (bitraverse))
import Data.Foldable (traverse_)
import Data.List.NonEmpty (nonEmpty)
import Data.Map qualified as Map
import Data.Text.IO qualified as T
import Data.Tuple.Extra ((&&&))
main :: (MonadSpotify m) => PlaylistID -> PlaylistID -> m ()
main =
curry $
maybe (putT "No overlap found.") ((putT "Found songs in both playlists:" >>) . traverse_ putT)
. nonEmpty
. Map.elems
. uncurry Map.intersection
<=< join
bitraverse
( pure . Map.fromList . map (((.id) &&& (.name)) . (.track))
<=< (allPages Nothing . const . pure . (.tracks))
<=< getPlaylist
)
where
putT = liftIO . T.putStrLn