The liblastfm package

[Tags: library, mit]

Provides interface to Lastfm REST API, supports XML and JSON formats.

[Skip to ReadMe]


Versions0.0.1.0,,,,,,,,,,,,,,,,,,,,, 0.5.0, 0.5.1
Change logCHANGELOG.markdown
Dependenciesaeson, base (==4.*), bytestring, cereal, containers (>=0.5), crypto-api, http-client (>=0.3), http-client-tls (>=0.2), network-uri, profunctors, pureMD5, semigroups, text, xml-conduit (>=1.1) [details]
AuthorMatvey Aksenov, Dmitry Malikov
MaintainerMatvey Aksenov <>
CategoryNetwork APIs
Source repositoryhead: git clone
UploadedSat Nov 15 21:52:06 UTC 2014 by MatveyAksenov
Downloads3063 total (134 in last 30 days)
0 []
StatusDocs uploaded by user
Build status unknown [no reports yet]




test-apia real API testDisabledManual

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainers' corner

For package maintainers and hackage trustees

Readme for liblastfm-0.5.1


Hackage Build Status

Complete API interface to service. Documentation is available in two flavours:


liblastfm provides Applicative interface for constructing requests. Also, it handles all machinery needed to prepare request for sending:

Once request is ready, liblastfm can send it and get you back a response. Response format might be:


To install either use hackage:

% cabal install liblastfm

Or git:

% git clone
% cd liblastfm
% cabal install


Suppose, you need to use API method. First find it in liblastfm: Tag would be the name of the module and search would be the name of function. Here it is. So import a couple of modules:

>>> import           Network.Lastfm            -- a bunch of useful utilities
>>> import qualified Network.Lastfm.Tag as Tag -- for

Now you may you applicative <*> for required and <* or *> for optional parameters to construct desired request: <*> tag "russian-folk" <* limit 3 <*> apiKey "29effec263316a1f8a97f753caaa83e0" <* json

To send constructed request use lastfm:

>>> con <- newConnection
>>> lastfm con $ <*> tag "russian-folk" <* limit 10 <*> apiKey "29effec263316a1f8a97f753caaa83e0" <* json
Right (Object (fromList [("results",Object (fromList [("tagmatches", ...

Wiki describes how to parse responses.


Q: I'm getting the following error. How do I fix it?

>>> Artist.getInfo <*> artist "Pink Floyd" <*> apiKey "29effec263316a1f8a97f753caaa83e0"

    Couldn't match expected type `Data.Text.Lazy.Internal.Text'
                with actual type `[Char]

A: This means you haven't OverloadedStrings extension enabled. To enable it (either one works):

Q: I'm getting the following error. How do I fix it?

>>> lastfm (Artist.getInfo <*> artist "Pink Floyd" <*> apiKey "29effec263316a1f8a97f753caaa83e0")

    No instance for (Show (IO (Either LastfmError r0)))
      arising from a use of `print'
    Possible fix:
      add an instance declaration for (Show (IO (Either LastfmError r0)))
    In the first argument of `print', namely `it'
    In a stmt of an interactive GHCi command: print it

A: This error message indicates that GHC cannot infer response format for the Request. To fix it, add use json or xml helpers, depending on your needs

A note on testing

To test Lastfm API compatibility (api test suite)—specifically, authentication requiring examples—you will need to set HASKELL_LIBLASTFM_APIKEY, HASKELL_LIBLASTFM_SESSIONKEY, and HASKELL_LIBLASTFM_SECRET environment variables to your api key, session key, and secret respectively; for example (bash):


Please, consult Lastfm API documentation and examples/*-authentication.hs examples if you don't know where to get your credentials.