| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Main
Synopsis
- main :: IO ()
- getStatusItem :: Either MPDError Status -> (Status -> a) -> Maybe a
- getTag :: Metadata -> Either a (Maybe Song) -> Maybe String
- processSong :: Metadata -> Maybe Song -> Maybe String
- headMay :: [a] -> Maybe a
- valueToStringMay :: Value -> Maybe String
- (.=?) :: (KeyValue a, ToJSON v) => Key -> Maybe v -> Maybe a
Documentation
Where the program connects to MPD and uses the helper functions to
extract values, organize them into a list of key/value pairs, make
them a Value using object, then encode it to
a conventional JSON ByteString with
encodePretty for the pretty-print version.
getStatusItem :: Either MPDError Status -> (Status -> a) -> Maybe a Source #
Extract a field from the returned MPD.Status data record.
This takes an Either MPDError Status
value and a field label function f as arguments. It returns Just
(f st) if the input status is Right st, where st is the
Status value. This function helps to extract a
specific field from the MPD.Status data record by providing the
corresponding field label function. If the input status "st" is
not Right st, indicating an error, or the field label function is
not applicable, it returns Nothing.
getTag :: Metadata -> Either a (Maybe Song) -> Maybe String Source #
Either check for the returned value of currentSong,
then call processSong or return Nothing.
processSong :: Metadata -> Maybe Song -> Maybe String Source #
Use sgGetTag to extract a tag from a song, safely
get only the head item of the returned Maybe list, then safely
convert it to a string.
valueToStringMay :: Value -> Maybe String Source #
Convert Value to String within a Maybe context.
This Value is from MPD and is basically the same as a
String but used internally to store metadata values.
Example:
processSong :: Metadata -> Maybe Song -> Maybe String processSong _ Nothing = Nothing processSong tag (Just song) = do let tagVal = MPD.sgGetTag tag song valueToStringMay =<< (headMay =<< tagVal)
sgGetTag returns a Maybe [Value]. MPD also provides
toString that can convert, along other types, a
Value to a String.
(.=?) :: (KeyValue a, ToJSON v) => Key -> Maybe v -> Maybe a Source #
Check if Maybe v exists and is of type expected by
object as defined in Value, if it is return
both the key and value within the Maybe context tied with
.=. This gives support to 'optional' fields using
catMaybes that discard Nothing values and is meant to
prevent creating JSON key/value pairs with null values, e.g.:
jsonTags = object . catMaybes $
[ "artist" .=? artist
, "album" .=? album
, "title" .=? title
]
Where if a value on the right is Nothing that key/value pair will
not be included in object because of
catMaybes.