úÎÁXµˆ°      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯ Haskell 98alphabsinclai@turing.une.edu.au°±²³´µ¶°±²³´µ¶°±²³´µ¶+not Haskell 98 (uses MultiParamTypeClasses)alphabsinclai@turing.une.edu.au%4The MPD monad is basically a reader and error monad  combined. To use the error throwing/catching capabilities:   import Control.Monad.Error (To run IO actions within the MPD monad:  import Control.Monad.Trans ·¸A response is either an  or some result. +Represents various MPD errors (aka. ACKs). An unknown ACK (aka. bug) File already exists (ACK 56)  An operation requiring playback  got interrupted (ACK 55)  Update already running (ACK 54) !Playlist loading failed (ACK 53) A system error (ACK 52) "Playlist at maximum size (ACK 51) $File or directory not found ACK 50) Unknown command (ACK 5)  Authentication required (ACK 4) "Invalid password supplied (ACK 3)  Invalid argument passed (ACK 2) BThe MPDError type is used to signal errors, both from the MPD and  otherwise.  ACK type and a message from the  server Used for misc. errors %MPD returned an unexpected response. ) This is a bug, either in the library or  in MPD itself. The connection timed out MPD not responding ¹º»¼½¾Refresh a connection. <Kill the server. Obviously, the connection is then invalid. Close an MPD connection. ¿1Send a command to the MPD and return the result. ÀÁÂÃ!·¸ ¹º»¼½¾¿!·¸·¸   ¹º»¼½¾º»¼½¾¿ Haskell 98alphabsinclai@turing.une.edu.au$Run an MPD action against a server.  Host name.  Port number. #An action that supplies passwords. The action to run. ÄÅÆÇÈÉ Haskell 98alphabsinclai@turing.une.edu.auAContainer for MPD status. A percentage (0-100) 9A value that is incremented by the server every time the  playlist changes. -The number of items in the current playlist. ! Current song's position in the playlist. " Current song's playlist ID. # Time elapsed/ total time. $<Bitrate (in kilobytes per second) of playing song (if any). %Crossfade time. & Samplerate/bits/&channels for the chosen output device  (see mpd.conf). '-Job ID of currently running update (if any). (Last error message (if any). )Represents a single song item. *+,-./0123Length in seconds 4Year 5 Track number/ total tracks 6Position in set/ total in set 78#Container for database statistics. 9:Number of artists. ;Number of albums. <Number of songs. =Daemon uptime in seconds. >Total playing time. ?$Total play time of all the songs in  the database. @#Last database update in UNIX time. ARepresents an output device. BCOutput' s ID number DOutput's name as defined in the MPD  configuration file EF!Represents the result of running count. GH#Number of songs matching the query I"Total play time of matching songs J*Represents the different playback states. KLMNRepresents a song's playlist index. O(A playlist ID number that more robustly  identifies a song. P,A playlist position index (starting from 0) QÊ Builds a GF instance from an assoc. list. ËBuilds a list of BA instances from an assoc. list Ì Builds a 98 instance from an assoc. list. Í Builds a *) instance from an assoc. list. Î Builds a  instance from an assoc. list. Ï*Run a parser and lift the result into the  monad Ð?A helper that runs a parser on a string and, depending, on the C outcome, either returns the result of some command applied to the 2 result, or fails. Used when building structures. ÑDA helper for running a parser returning Maybe on a pair of strings. L Returns Just if both strings where parsed successfully, Nothing otherwise. A !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQÊËÌÍÎÏÐÑA !"#$%&'( !"#$%&'()*+,-./01234567*+,-./0123456789:;<=>?@9:;<=>?@ABCDEBCDEFGHIGHIJMLKKLMNPOOPQÊËÌÍÎÏÐÑ Haskell 98alphabsinclai@turing.une.edu.auÒÓÔÕAn expected request. Ö@Run an action against a set of expected requests and responses, E and an expected result. The result is Nothing if everything matched ; what was expected. If anything differed the result of the C computation is returned along with pairs of expected and received  requests.  The expected requests and their  ^ corresponding responses. The expected result. #An action that supplies passwords. The MPD action to run. ×ÒÓÔÕÖÒÔÓÓÔÕÖunportable (uses PatternGuards)alphabsinclai@turing.une.edu.aukØÙÚÛR<A query is composed of a scope modifier and a query string. $To match entries where album equals "Foo", use:   Query Album "Foo" $To match entries where album equals "Foo" and artist equals "Bar", use: 4 MultiQuery [Query Album "Foo", Query Artist "Bar"] S Query with multiple conditions. TSimple query. UAvailable metadata types/(scope modifiers, used for searching the 4 database for entries with certain metadata values. VWXYZ[\]^_`ab<Used for commands which require a path within the database. " If empty, the root path is used. c1Used for commands which require a playlist name. ) If empty, the current playlist is used. defgTurn off an output device. hTurn on an output device. i-Retrieve information for all output devices. jUpdate the server' s database. 3 If no paths are given, all paths will be scanned. 8 Unreadable or non-existent paths are silently ignored. k%List all metadata of metadata (sic). Metadata to list l;Non-recursively list the contents of a database directory. mGList the songs (without metadata) in a database directory recursively. n Recursive l. Üo:Search the database for entries exactly matching a query. p5Search the database using case insensitive matching. q.Count the number of entries matching a query. rLike s, but returns a playlist id. sLike t( but returns a list of the files added. t1Add a song (or a whole directory) to a playlist. . Adds to current if no playlist is specified. I Will create a new playlist if the one specified does not already exist. uGClear a playlist. Clears current playlist if no playlist is specified. ? If the specified playlist does not exist, it will be created. vRemove a song from a playlist. 8 If no playlist is specified, current playlist is used.  Note that a playlist position (P ) is required when operating on # playlists other than the current. wLoad an existing playlist. x!Move a song to a given position.  Note that a playlist position (P ) is required when operating on # playlists other than the current. yDelete existing playlist. zRename an existing playlist. Original playlist New playlist name {Save the current playlist. |!Swap the positions of two songs. ? Note that the positions must be of the same type, i.e. mixing P and O  will result in a no-op. }Shuffle the playlist. ~5Retrieve metadata for songs in the current playlist. 1Retrieve metadata for files in a given playlist. €.Retrieve a list of files in a given playlist. DRetrieve file paths and positions of songs in the current playlist. B Note that this command is only included for completeness sake; it's < deprecated and likely to disappear at any time, please use ~  instead. ‚ARetrieve a list of changed songs currently in the playlist since  a given playlist version. ƒLike ‚% but only returns positions and ids. „?Search for songs in the current playlist with strict matching. …@Search case-insensitively with partial matches for songs in the  current playlist. † Get the currently playing song. ‡Set crossfading between songs. ˆBegin/continue playing. ‰Pause playing. ŠStop playing. ‹Play the next song. ŒPlay the previous song. Seek to some point in a song. 0 Seeks in current song if no position is given. ŽSet random playing. Set repeating.  Set the volume (0-100 percent). ‘5Increase or decrease volume by a given percent, e.g.  ' volume 10'/ will increase the volume by 10 percent, while  ' volume (-10)'& will decrease it by the same amount. C Note that this command is only included for completeness sake ; it's 6 deprecated and may disappear at any time, please use  instead. ’+Clear the current error message in status. “'Retrieve a list of available commands. ”FRetrieve a list of unavailable (due to access restrictions) commands. •,Retrieve a list of available song metadata. –*Retrieve a list of supported urlhandlers. —1Send password to server to authenticate session. ! Password is sent as plain text. ˜+Check that the server is still responding. ™Get server statistics. šGet the server' s status. ›Like j!, but returns the update job id. œ Toggles play/pause. Plays if stopped. Add a list of songs/folders to a playlist. ' Should be more efficient than running s many times. ž(Delete a list of songs from a playlist. C If there is a duplicate then no further songs will be deleted, so  take care to avoid them (see ¡ for this). Ÿ?Returns all songs and directories that match the given partial  path name.  Crop playlist.  The bounds are inclusive.  If Ý or O7 is passed the cropping will leave your playlist alone  on that side. ¡#Remove duplicate playlist entries. Þ¢"List directories non-recursively. £List files non-recursively. ¤List all playlists. ¥5Search the database for songs relating to an artist. ¦4Search the database for songs relating to an album. §8Search the database for songs relating to a song title. ¨"List the artists in the database. ©=List the albums in the database, optionally matching a given  artist. ª+List the songs in an album of some artist. «:Search the database for songs relating to an artist using p. ¬9Search the database for songs relating to an album using p. ­8Search the database for songs relating to a song title. ®Retrieve the current playlist.  Equivalent to playlistinfo Nothing. ßàáâãäåæ™ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®]RTSSTU a`_^]\[ZYXWVVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­® Haskell 98alphabsinclai@turing.une.edu.au¯A wrapper for ) that uses localhost:6600 as the default K host:port, or whatever is found in the environment variables MPD_HOST and & MPD_PORT. If MPD_HOST is of the form "password@host" the password  will be supplied as well.  Examples:  withMPD $ play Nothing 9 withMPD $ add_ "" "tool" >> play Nothing >> currentSong ç?Create an action that produces passwords for a connection. You  can pass these to ' and it will use them to get passwords ? to send to the server until one works or it runs out of them. 4 do gen <- mkPasswordGen ["password1", "password2"] / withMPDEx "localhost" 6600 gen (update []) °  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯° ¯JMLK !"#$%&'(89:;<=>?@ABCDERTSUa`_^]\[ZYXWVfedQcbNPO)*+,-./01234567FGHIghijokmnlpqstru†vwx~€‚ƒ„…yz{}|‡‹‰ˆŒŽ‘Š’“”—˜™š•–žŸ ¡¢£¤¥¦§¨©ª«¬­®œ›¯è      !!"#$%&'()*+,-./00123456789:;<=>>?@ABCDEFFGHIJJKLMNOPQRSTUVUWXYZ[\]^_`abcdeabcfghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶··¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÂÓÔÕÖרÙÚÛÜÝÞßàáâãäå libmpd-0.2.1 Network.MPDNetwork.MPD.UtilsNetwork.MPD.CoreNetwork.MPD.SocketConnNetwork.MPD.ParseNetwork.MPD.StringConnNetwork.MPD.CommandsMPDResponseACKType UnknownACK FileExists NotPlayingBusy PlaylistLoadSystem PlaylistMax FileNotFoundUnknownCommandAuthInvalidPasswordInvalidArgumentMPDErrorACKCustom UnexpectedTimedOutNoMPD reconnectkillclose withMPDExStatusstStatestVolumestRepeatstRandomstPlaylistVersionstPlaylistLength stSongPosstSongIDstTime stBitrate stXFadeWidthstAudio stUpdatingDbstErrorSongsgArtistsgAlbumsgTitle sgFilePathsgGenresgName sgComposer sgPerformersgLengthsgDatesgTracksgDiscsgIndexStats stsArtists stsAlbumsstsSongs stsUptime stsPlaytime stsDbPlaytime stsDbUpdateDevice dOutputID dOutputNamedOutputEnabledCountcSongs cPlaytimeStatePausedStoppedPlayingPLIndexIDPosSecondsQuery MultiQueryMetaFilenameAnyDisc PerformerComposerDateGenreNameTrackTitleAlbumArtistPath PlaylistName disableOutput enableOutputoutputsupdatelistlsInfolistAll listAllInfofindsearchcountaddIdaddadd_cleardeleteloadmovermrenamesaveswapshuffle playlistInfolistPlaylistInfo listPlaylistplaylist plChangesplChangesPosId playlistFindplaylistSearch currentSong crossfadeplaypausestopnextpreviousseekrandomrepeat setVolumevolume clearErrorcommands notCommandstagTypes urlHandlerspasswordpingstatsstatusupdateIdtoggleaddMany deleteManycompletecropprunelsDirslsFiles lsPlaylists findArtist findAlbum findTitle listArtists listAlbums listAlbum searchArtist searchAlbum searchTitle getPlaylistwithMPD breakChar parseDateparseNumshowBool parseBooltoAssoc splitGroupsrunMPDConncOpencClosecSendcGetPW getResponse tryPassword parseResponseparseAcksplitAckopensendwhenEOF safeConnectTo checkConn parseCount parseOutputs parseStats parseSong parseStatus runParserparsepairResultFailureOkExpecttestMPD EntryTypeDirEntryPLEntry SongEntrylsInfo'base Data.MaybeNothingfindDuplicates getResponse_ getResponses failOnEmpty getResponse1 takeValues takeEntriesextractEntries takeSongs mkPasswordGen