{"name":"Curry Interface","scopeName":"source.icurry","patterns":[{"include":"#import"},{"include":"#hiding_declaration"},{"include":"#interface_declaration"},{"include":"#instance_declaration"},{"include":"#class_declaration"},{"include":"#data_declaration"},{"include":"#type_declaration"},{"include":"#function_declarations"},{"include":"#pragma"}],"repository":{"class_declaration":{"name":"meta.declaration.class.icurry","begin":"\\b(class)\\b","end":"{","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.icurry"}},"endCaptures":{"1":{"name":"keyword.other.scope.icurry"}}},"data_declaration":{"name":"meta.declaration.data.icurry","begin":"\\b(data)|(newtype)","end":";|}","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.declaration.data.icurry"},"2":{"name":"keyword.declaration.newtype.icurry"}}},"function_declarations":{"patterns":[{"include":"#infix_function_definition"},{"include":"#function_signature"}]},"function_signature":{"name":"meta.declaration.function.icurry","begin":"(?:\\b(\\w+)|(\\([^\\)]+\\)))(?:\\s+(\\d+))?(?:\\s*(::))?","end":";|}","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"entity.name.function.icurry"},"2":{"name":"entity.name.function.operator.icurry"},"3":{"name":"constant.numeric.arity.icurry"},"4":{"name":"keyword.other.double-colon.icurry"}}},"hiding_declaration":{"name":"meta.hiding.icurry","begin":"^(hiding)\\s+(data|class)\\b","end":";|}","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.icurry keyword.import.icurry"},"2":{"name":"keyword.other.icurry"}}},"import":{"name":"meta.import.icurry","begin":"^(import)\\b","end":";|}","patterns":[{"include":"#module_name"}],"beginCaptures":{"1":{"name":"keyword.other.icurry keyword.import.icurry"}}},"infix_function_definition":{"name":"meta.declaration.function.infix.icurry","begin":"\\b(infix(?:[rl])?)\\s+(\\d+)","end":";|}","beginCaptures":{"1":{"name":"keyword.other.infix.icurry"},"2":{"name":"constant.numeric.fixity.icurry"}}},"instance_declaration":{"name":"meta.declaration.instance.icurry","begin":"\\b(instance)\\b","end":"{","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.icurry"}},"endCaptures":{"1":{"name":"keyword.other.scope.icurry"}}},"interface_declaration":{"name":"meta.declaration.interface.icurry","begin":"\\b(interface)\\b","end":"\\b(where)\\s*{","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.other.icurry"}},"endCaptures":{"1":{"name":"keyword.other.scope.icurry"}}},"module_name":{"name":"storage.module.icurry","match":"([A-Z][\\w']*)(\\.[A-Z][\\w']*)*"},"pragma":{"name":"meta.preprocessor.icurry pragma.icurry","begin":"(\\{-#)\\s+([A-Z_]+)\\b","end":"(#-\\})","patterns":[{"name":"keyword.other.preprocessor.icurry pragma.support.language.icurry","match":"\\b([A-Z][a-z]*)+\\b"},{"name":"keyword.other.preprocessor.icurry pragma.support.flag.icurry","match":"(-+[a-z]+)+"}],"beginCaptures":{"1":{"name":"punctuation.preprocessor.icurry punctuation.pragma.icurry"},"2":{"name":"keyword.preprocessor.icurry pragma.name.icurry"}},"endCaptures":{"1":{"name":"punctuation.preprocessor.icurry punctuation.pragma.icurry"}}},"type":{"patterns":[{"name":"keyword.operator.arrow.icurry","match":"-\u003e|→"},{"name":"keyword.operator.big-arrow.icurry","match":"=\u003e|⇒"},{"name":"variable.generic.icurry","match":"(?\u003c!')\\b[a-z][\\w']*\\b"},{"name":"storage.type.icurry","match":"(?\u003c!')\\b[A-Z][\\w']*\\b"},{"name":"storage.type.icurry","match":"\\(\\)"},{"name":"meta.type_signature.brace.icurry","begin":"(\\()","end":"(\\))","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.operator.icurry"}},"endCaptures":{"1":{"name":"keyword.operator.icurry"}}},{"name":"meta.type_signature.list.icurry","begin":"(\\[)","end":"(\\])","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.operator.icurry"}},"endCaptures":{"1":{"name":"keyword.operator.icurry"}}}]},"type_declaration":{"name":"meta.declaration.type.icurry","begin":"\\b(type)","end":";|}","patterns":[{"include":"#type"}],"beginCaptures":{"1":{"name":"keyword.declaration.type.icurry"}}}}}