h$7       Safe-Inferred playlistsTrue if the given Word8 is an end of line character. playlistsTrue if the given Word8 is an equal sign. playlists+Skip an equal sign and any space around it. playlistsSkip all whitespace. playlists5Skip all characters up to and including the next EOL. Safe-InferredC playlistsPlaylist formats. playlists .http://en.wikipedia.org/wiki/PLS_(file_format) playlistsM3U and M3U8. http://en.wikipedia.org/wiki/M3U playlists A list of s. playlists%A single music file or streaming URL. playlists%URL for a file or streaming resource. playlistsOptional title. playlistsOptional duration in seconds.  Safe-Inferred t Safe-Inferred  playlists.A parser that will process an entire playlist. Safe-Inferred #$ Safe-Inferred c playlists#Parser for a complete M3U playlist. Safe-Inferred  playlistsReturn the appropriate attoparsec parser for the given playlist format.  playlistsParse a playlist from a  ByteString. Parsing may fail in which case an error message is returned in Left. content <- BS.getContents case parsePlaylist M3U content of Left err -> fail $ "failed to parse playlist: " ++ err Right x -> return x  playlistsGenerate a lazy  ByteString containing playlist data from the given playlist and in the given format. -BL.putStr $ generatePlaylist M3U somePlaylist   Safe-Inferred[  playlists;Try to figure out a file's format from it's file extension.fileNameToFormat "foo.m3u"Just M3UfileNameToFormat "foo.M3U"Just M3UfileNameToFormat "foo.txt"Nothing  playlistsGiven a file name that does not have a file extension, return a file name with the appropriate extension included based on the given format.appendExtension M3U "foo" "foo.m3u"   Safe-Inferred#$  playlists If the given  contains tracks that reference remote playlists, this function will recursively download and process these playlists. Returns a flattened playlist that should not contain any references to other playlists.You supply the downloading function as the second argument. Use whichever HTTP library that makes you happy.There are two error conditions that are ignored by this function: The nesting of playlists exceeds a (hard-coded) limit. In this case no playlists beyond the limit are processed. Open a pull request if you'd like to have a resolveN function that allows you to specific the depth limit or one that returns an error.A downloaded playlist contains a syntax error. In this case the playlist is consider to have no tracks and is ignored. Open a pull request if you want a version of this function that returns some sort of an error instead of ignoring bad playlists. playlistsA 1 that may contain references to other playlists. playlistsDownloading function. This function should take a URL and return a parsed playlist.It's expected that the URL points to another playlist that needs to be parsed and possibly resolved. playlistsA fully resolved . (All tracks should be files and not links to other playlists.) Safe-Inferred         &playlists-0.5.1-5PpRRgg0JKp95PRxR6u6eP Text.Playlist!Text.Playlist.Internal.AttoparsecText.Playlist.TypesText.Playlist.PLS.WriterText.Playlist.PLS.ReaderText.Playlist.M3U.WriterText.Playlist.M3U.Reader Text.Playlist.Internal.ReadWriteText.Playlist.Internal.FormatText.Playlist.Internal.ResolveFormatPLSM3UPlaylistTracktrackURL trackTitle trackDurationparserForFormat parsePlaylistgeneratePlaylistfileNameToFormatappendExtensionresolveisEOLisEqskipEq skipSpaceskipLine writePlaylist writeTrack