-- | This module exports the type used to create resolve queries. module Data.Factual.Query.ResolveQuery ( -- * ResolveQuery type ResolveQuery(..) -- * ResolveValue type , ResolveValue(..) ) where import Data.Factual.Query import qualified Data.Map as M import Data.List.Utils (join) -- | A resolve value can either be a String or a Number (Double). The first -- argument is the name of the field and the second argument is the input -- value. data ResolveValue = ResolveStr String String | ResolveNum String Double deriving Eq -- ResolveValue is a member of the Show typeclass to help generate query Strings. instance Show ResolveValue where show (ResolveStr name str) = (show name) ++ ":" ++ (show str) show (ResolveNum name num) = (show name) ++ ":" ++ (show num) -- | A resolve query is formed as an array of resolve values. These values will -- be compared with Factual records to return a cleaner, more canonical row -- of data. data ResolveQuery = ResolveQuery { values :: [ResolveValue] , debug :: Bool } deriving Eq -- ResolveQuery is a member of the Query typeclass so that it can be used to -- make requests. instance Query ResolveQuery where path _ = "/places/resolve" params query = M.fromList [("values", valuesString), ("debug", debugString)] where valuesString = "{" ++ (join "," $ map show $ values query) ++ "}" debugString = if (debug query) then "true" else "false"