freesound-0.2.0: src/Sound/Freesound/Search/Query.hs
module Sound.Freesound.Search.Query (
Query
, include
, exclude
, (&)
) where
import Data.Char (isSpace)
import Data.Text (Text)
import qualified Data.Text as Text
import Network.HTTP.Types.QueryLike (QueryValueLike(..))
newtype Query = Query [Term] deriving (Eq, Show)
instance QueryValueLike Query where
toQueryValue (Query ts) = toQueryValue $ Text.unwords (map f ts)
where
quote t
| Text.any isSpace t = Text.cons '"' (Text.snoc t '"')
| otherwise = t
f (Include t) = Text.cons '+' (quote t)
f (Exclude t) = Text.cons '-' (quote t)
data Term = Include Text | Exclude Text deriving (Eq, Show)
include :: Text -> Query
include string = Query [Include string]
exclude :: Text -> Query
exclude string = Query [Exclude string]
append :: Query -> Query -> Query
append (Query xs) (Query ys) = Query (xs ++ ys)
(&) :: Query -> Query -> Query
(&) = append