grakn-0.3.0: src/Grakn/Query.hs
module Grakn.Query
( IsQuery(queryString)
, Match
, GetQuery
, match
, get
, limit
) where
import Grakn.Pattern (Pattern)
import Grakn.Property (Var)
import Grakn.Util (Convert, commas, convert, spaces)
class IsQuery q where
queryString :: q -> String
-- |A Graql 'match' part that finds a pattern in the knowledge base
data Match
= Match [Pattern]
| Limit Match
Integer
data GetQuery =
GetQuery Match
[Var]
-- |Create a match by providing a list of patterns
match :: Convert a Pattern => [a] -> Match
match = Match . map convert
-- |Get variables from a match, intended to be used infix
get :: [Var] -> Match -> GetQuery
get = flip GetQuery
-- |Limit a match, intended to be used infix
limit :: Integer -> Match -> Match
limit = flip Limit
instance Show Match where
show (Match patts) = "match " ++ spaces patts
show (Limit mq lim) = show mq ++ " limit " ++ show lim ++ ";"
instance Show GetQuery where
show (GetQuery match_ []) = show match_ ++ " get;"
show (GetQuery match_ vars) = show match_ ++ " get " ++ commas vars ++ ";"
instance IsQuery GetQuery where
queryString = show
instance IsQuery String where
queryString = id