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
data Match
= Match [Pattern]
| Limit Match
Integer
data GetQuery =
GetQuery Match
[Var]
match :: Convert a Pattern => [a] -> Match
match = Match . map convert
get :: [Var] -> Match -> GetQuery
get = flip GetQuery
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