;; Constants
(integer) @number

;; Variables and Symbols

(typed_binding (atom (qid) @variable))
(untyped_binding) @variable
(typed_binding (expr) @type)

(id) @function
(bid) @function

(function_name (atom (qid) @function))
(field_name) @function


[(data_name) (record_name)] @constructor

; Set
(SetN) @type.builtin

(expr . (atom) @function)

((atom) @boolean
  (#any-of? @boolean "true" "false" "True" "False"))

;; Imports and Module Declarations

"import"  @include

(module_name) @namespace

;; Pragmas and comments

(pragma) @preproc

(comment) @comment

;; Keywords
[
  "where"
  "data"
  "rewrite"
  "postulate"
  "public"
  "private"
  "tactic"
  "Prop"
  "quote"
  "renaming"
  "open"
  "in"
  "hiding"
  "constructor"
  "abstract"
  "let"
  "field"
  "mutual"
  "module"
  "infix"
  "infixl"
  "infixr"
  "record"
	(ARROW)
]
@keyword

;;;(expr 
;;;	f_name: (atom) @function)
;; Brackets

[
  "("
  ")"
  "{"
  "}"]
@punctuation.bracket

[
  "="
] @operator