1<lexer>
2 <config>
3 <name>Haskell</name>
4 <alias>haskell</alias>
5 <alias>hs</alias>
6 <filename>*.hs</filename>
7 <mime_type>text/x-haskell</mime_type>
8 </config>
9 <rules>
10 <state name="escape">
11 <rule pattern="[abfnrtv"\'&\\]">
12 <token type="LiteralStringEscape"/>
13 <pop depth="1"/>
14 </rule>
15 <rule pattern="\^[][\p{Lu}@^_]">
16 <token type="LiteralStringEscape"/>
17 <pop depth="1"/>
18 </rule>
19 <rule pattern="NUL|SOH|[SE]TX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|S[OI]|DLE|DC[1-4]|NAK|SYN|ETB|CAN|EM|SUB|ESC|[FGRU]S|SP|DEL">
20 <token type="LiteralStringEscape"/>
21 <pop depth="1"/>
22 </rule>
23 <rule pattern="o[0-7]+">
24 <token type="LiteralStringEscape"/>
25 <pop depth="1"/>
26 </rule>
27 <rule pattern="x[\da-fA-F]+">
28 <token type="LiteralStringEscape"/>
29 <pop depth="1"/>
30 </rule>
31 <rule pattern="\d+">
32 <token type="LiteralStringEscape"/>
33 <pop depth="1"/>
34 </rule>
35 <rule pattern="\s+\\">
36 <token type="LiteralStringEscape"/>
37 <pop depth="1"/>
38 </rule>
39 </state>
40 <state name="root">
41 <rule pattern="\s+">
42 <token type="Text"/>
43 </rule>
44 <rule pattern="--(?![!#$%&*+./<=>?@^|_~:\\]).*?$">
45 <token type="CommentSingle"/>
46 </rule>
47 <rule pattern="\{-">
48 <token type="CommentMultiline"/>
49 <push state="comment"/>
50 </rule>
51 <rule pattern="\bimport\b">
52 <token type="KeywordReserved"/>
53 <push state="import"/>
54 </rule>
55 <rule pattern="\bmodule\b">
56 <token type="KeywordReserved"/>
57 <push state="module"/>
58 </rule>
59 <rule pattern="\berror\b">
60 <token type="NameException"/>
61 </rule>
62 <rule pattern="\b(case|class|data|default|deriving|do|else|family|if|in|infix[lr]?|instance|let|newtype|of|then|type|where|_)(?!\')\b">
63 <token type="KeywordReserved"/>
64 </rule>
65 <rule pattern="'[^\\]'">
66 <token type="LiteralStringChar"/>
67 </rule>
68 <rule pattern="^[_\p{Ll}][\w\']*">
69 <token type="NameFunction"/>
70 </rule>
71 <rule pattern="'?[_\p{Ll}][\w']*">
72 <token type="Name"/>
73 </rule>
74 <rule pattern="('')?[\p{Lu}][\w\']*">
75 <token type="KeywordType"/>
76 </rule>
77 <rule pattern="(')[\p{Lu}][\w\']*">
78 <token type="KeywordType"/>
79 </rule>
80 <rule pattern="(')\[[^\]]*\]">
81 <token type="KeywordType"/>
82 </rule>
83 <rule pattern="(')\([^)]*\)">
84 <token type="KeywordType"/>
85 </rule>
86 <rule pattern="\\(?![:!#$%&*+.\\/<=>?@^|~-]+)">
87 <token type="NameFunction"/>
88 </rule>
89 <rule pattern="(<-|::|->|=>|=|'([:!#$%&*+.\\/<=>?@^|~-]+))(?![:!#$%&*+.\\/<=>?@^|~-]+)">
90 <token type="OperatorWord"/>
91 </rule>
92 <rule pattern=":[:!#$%&*+.\\/<=>?@^|~-]*">
93 <token type="KeywordType"/>
94 </rule>
95 <rule pattern="[:!#$%&*+.\\/<=>?@^|~-]+">
96 <token type="Operator"/>
97 </rule>
98 <rule pattern="\d+_*[eE][+-]?\d+">
99 <token type="LiteralNumberFloat"/>
100 </rule>
101 <rule pattern="\d+(_+[\d]+)*\.\d+(_+[\d]+)*([eE][+-]?\d+)?">
102 <token type="LiteralNumberFloat"/>
103 </rule>
104 <rule pattern="0[oO](_*[0-7])+">
105 <token type="LiteralNumberOct"/>
106 </rule>
107 <rule pattern="0[xX](_*[\da-fA-F])+">
108 <token type="LiteralNumberHex"/>
109 </rule>
110 <rule pattern="0[bB](_*[01])+">
111 <token type="LiteralNumberBin"/>
112 </rule>
113 <rule pattern="\d+(_*[\d])*">
114 <token type="LiteralNumberInteger"/>
115 </rule>
116 <rule pattern="'">
117 <token type="LiteralStringChar"/>
118 <push state="character"/>
119 </rule>
120 <rule pattern=""">
121 <token type="LiteralString"/>
122 <push state="string"/>
123 </rule>
124 <rule pattern="\[\]">
125 <token type="KeywordType"/>
126 </rule>
127 <rule pattern="\(\)">
128 <token type="NameBuiltin"/>
129 </rule>
130 <rule pattern="[][(),;`{}]">
131 <token type="Punctuation"/>
132 </rule>
133 </state>
134 <state name="import">
135 <rule pattern="\s+">
136 <token type="Text"/>
137 </rule>
138 <rule pattern=""">
139 <token type="LiteralString"/>
140 <push state="string"/>
141 </rule>
142 <rule pattern="\)">
143 <token type="Punctuation"/>
144 <pop depth="1"/>
145 </rule>
146 <rule pattern="qualified\b">
147 <token type="Keyword"/>
148 </rule>
149 <rule pattern="([\p{Lu}][\w.]*)(\s+)(as)(\s+)([\p{Lu}][\w.]*)">
150 <bygroups>
151 <token type="NameNamespace"/>
152 <token type="Text"/>
153 <token type="Keyword"/>
154 <token type="Text"/>
155 <token type="Name"/>
156 </bygroups>
157 <pop depth="1"/>
158 </rule>
159 <rule pattern="([\p{Lu}][\w.]*)(\s+)(hiding)(\s+)(\()">
160 <bygroups>
161 <token type="NameNamespace"/>
162 <token type="Text"/>
163 <token type="Keyword"/>
164 <token type="Text"/>
165 <token type="Punctuation"/>
166 </bygroups>
167 <push state="funclist"/>
168 </rule>
169 <rule pattern="([\p{Lu}][\w.]*)(\s+)(\()">
170 <bygroups>
171 <token type="NameNamespace"/>
172 <token type="Text"/>
173 <token type="Punctuation"/>
174 </bygroups>
175 <push state="funclist"/>
176 </rule>
177 <rule pattern="[\w.]+">
178 <token type="NameNamespace"/>
179 <pop depth="1"/>
180 </rule>
181 </state>
182 <state name="module">
183 <rule pattern="\s+">
184 <token type="Text"/>
185 </rule>
186 <rule pattern="([\p{Lu}][\w.]*)(\s+)(\()">
187 <bygroups>
188 <token type="NameNamespace"/>
189 <token type="Text"/>
190 <token type="Punctuation"/>
191 </bygroups>
192 <push state="funclist"/>
193 </rule>
194 <rule pattern="[\p{Lu}][\w.]*">
195 <token type="NameNamespace"/>
196 <pop depth="1"/>
197 </rule>
198 </state>
199 <state name="funclist">
200 <rule pattern="\s+">
201 <token type="Text"/>
202 </rule>
203 <rule pattern="[\p{Lu}]\w*">
204 <token type="KeywordType"/>
205 </rule>
206 <rule pattern="(_[\w\']+|[\p{Ll}][\w\']*)">
207 <token type="NameFunction"/>
208 </rule>
209 <rule pattern="--(?![!#$%&*+./<=>?@^|_~:\\]).*?$">
210 <token type="CommentSingle"/>
211 </rule>
212 <rule pattern="\{-">
213 <token type="CommentMultiline"/>
214 <push state="comment"/>
215 </rule>
216 <rule pattern=",">
217 <token type="Punctuation"/>
218 </rule>
219 <rule pattern="[:!#$%&*+.\\/<=>?@^|~-]+">
220 <token type="Operator"/>
221 </rule>
222 <rule pattern="\(">
223 <token type="Punctuation"/>
224 <push state="funclist" state="funclist"/>
225 </rule>
226 <rule pattern="\)">
227 <token type="Punctuation"/>
228 <pop depth="2"/>
229 </rule>
230 </state>
231 <state name="comment">
232 <rule pattern="[^-{}]+">
233 <token type="CommentMultiline"/>
234 </rule>
235 <rule pattern="\{-">
236 <token type="CommentMultiline"/>
237 <push/>
238 </rule>
239 <rule pattern="-\}">
240 <token type="CommentMultiline"/>
241 <pop depth="1"/>
242 </rule>
243 <rule pattern="[-{}]">
244 <token type="CommentMultiline"/>
245 </rule>
246 </state>
247 <state name="character">
248 <rule pattern="[^\\']'">
249 <token type="LiteralStringChar"/>
250 <pop depth="1"/>
251 </rule>
252 <rule pattern="\\">
253 <token type="LiteralStringEscape"/>
254 <push state="escape"/>
255 </rule>
256 <rule pattern="'">
257 <token type="LiteralStringChar"/>
258 <pop depth="1"/>
259 </rule>
260 </state>
261 <state name="string">
262 <rule pattern="[^\\"]+">
263 <token type="LiteralString"/>
264 </rule>
265 <rule pattern="\\">
266 <token type="LiteralStringEscape"/>
267 <push state="escape"/>
268 </rule>
269 <rule pattern=""">
270 <token type="LiteralString"/>
271 <pop depth="1"/>
272 </rule>
273 </state>
274 </rules>
275</lexer>