const
class_ = require('./grammar/class.js')
conflicts = require('./grammar/conflicts.js')
context = require('./grammar/context.js')
data = require('./grammar/data.js')
decl = require('./grammar/decl.js')
exp = require('./grammar/exp.js')
externals = require('./grammar/externals.js')
general = require('./grammar/general.js')
id = require('./grammar/id.js')
inline = require('./grammar/inline.js')
lexeme = require('./grammar/lexeme.js')
literal = require('./grammar/literal.js')
module_ = require('./grammar/module.js')
operator = require('./grammar/operator.js')
pat = require('./grammar/pat.js')
patsyn = require('./grammar/patsyn.js')
precedences = require('./grammar/precedences.js')
th = require('./grammar/th.js')
type = require('./grammar/type.js')
module.exports = grammar({
name: 'haskell',
rules: {
haskell: $ => seq(
optional($.header),
optional($._body),
),
...general,
...type,
...context,
...exp,
...pat,
...module_,
...data,
...class_,
...decl,
...patsyn,
...th,
...literal,
...id,
...operator,
...lexeme,
},
...externals,
...precedences,
...inline,
...conflicts,
extras: $ => [
/\p{Zs}/,
/\n/,
/\r/,
$.cpp,
$.comment,
$.haddock,
$.pragma,
],
supertypes: $ => [
$.expression,
$.pattern,
$.type,
$.quantified_type,
$.constraint,
$.constraints,
$.type_param,
$.declaration,
$.decl,
$.class_decl,
$.instance_decl,
$.statement,
$.qualifier,
$.guard,
],
word: $ => $.variable,
})