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&#34;\&#39;&amp;\\]">
 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="--(?![!#$%&amp;*+./&lt;=&gt;?@^|_~:\\]).*?$">
 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|_)(?!\&#39;)\b">
 63        <token type="KeywordReserved"/>
 64      </rule>
 65      <rule pattern="&#39;[^\\]&#39;">
 66        <token type="LiteralStringChar"/>
 67      </rule>
 68      <rule pattern="^[_\p{Ll}][\w\&#39;]*">
 69        <token type="NameFunction"/>
 70      </rule>
 71      <rule pattern="&#39;?[_\p{Ll}][\w&#39;]*">
 72        <token type="Name"/>
 73      </rule>
 74      <rule pattern="(&#39;&#39;)?[\p{Lu}][\w\&#39;]*">
 75        <token type="KeywordType"/>
 76      </rule>
 77      <rule pattern="(&#39;)[\p{Lu}][\w\&#39;]*">
 78        <token type="KeywordType"/>
 79      </rule>
 80      <rule pattern="(&#39;)\[[^\]]*\]">
 81        <token type="KeywordType"/>
 82      </rule>
 83      <rule pattern="(&#39;)\([^)]*\)">
 84        <token type="KeywordType"/>
 85      </rule>
 86      <rule pattern="\\(?![:!#$%&amp;*+.\\/&lt;=&gt;?@^|~-]+)">
 87        <token type="NameFunction"/>
 88      </rule>
 89      <rule pattern="(&lt;-|::|-&gt;|=&gt;|=)(?![:!#$%&amp;*+.\\/&lt;=&gt;?@^|~-]+)">
 90        <token type="OperatorWord"/>
 91      </rule>
 92      <rule pattern=":[:!#$%&amp;*+.\\/&lt;=&gt;?@^|~-]*">
 93        <token type="KeywordType"/>
 94      </rule>
 95      <rule pattern="[:!#$%&amp;*+.\\/&lt;=&gt;?@^|~-]+">
 96        <token type="Operator"/>
 97      </rule>
 98      <rule pattern="\d+[eE][+-]?\d+">
 99        <token type="LiteralNumberFloat"/>
100      </rule>
101      <rule pattern="\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="\d+">
111        <token type="LiteralNumberInteger"/>
112      </rule>
113      <rule pattern="&#39;">
114        <token type="LiteralStringChar"/>
115        <push state="character"/>
116      </rule>
117      <rule pattern="&#34;">
118        <token type="LiteralString"/>
119        <push state="string"/>
120      </rule>
121      <rule pattern="\[\]">
122        <token type="KeywordType"/>
123      </rule>
124      <rule pattern="\(\)">
125        <token type="NameBuiltin"/>
126      </rule>
127      <rule pattern="[][(),;`{}]">
128        <token type="Punctuation"/>
129      </rule>
130    </state>
131    <state name="import">
132      <rule pattern="\s+">
133        <token type="Text"/>
134      </rule>
135      <rule pattern="&#34;">
136        <token type="LiteralString"/>
137        <push state="string"/>
138      </rule>
139      <rule pattern="\)">
140        <token type="Punctuation"/>
141        <pop depth="1"/>
142      </rule>
143      <rule pattern="qualified\b">
144        <token type="Keyword"/>
145      </rule>
146      <rule pattern="([\p{Lu}][\w.]*)(\s+)(as)(\s+)([\p{Lu}][\w.]*)">
147        <bygroups>
148          <token type="NameNamespace"/>
149          <token type="Text"/>
150          <token type="Keyword"/>
151          <token type="Text"/>
152          <token type="Name"/>
153        </bygroups>
154        <pop depth="1"/>
155      </rule>
156      <rule pattern="([\p{Lu}][\w.]*)(\s+)(hiding)(\s+)(\()">
157        <bygroups>
158          <token type="NameNamespace"/>
159          <token type="Text"/>
160          <token type="Keyword"/>
161          <token type="Text"/>
162          <token type="Punctuation"/>
163        </bygroups>
164        <push state="funclist"/>
165      </rule>
166      <rule pattern="([\p{Lu}][\w.]*)(\s+)(\()">
167        <bygroups>
168          <token type="NameNamespace"/>
169          <token type="Text"/>
170          <token type="Punctuation"/>
171        </bygroups>
172        <push state="funclist"/>
173      </rule>
174      <rule pattern="[\w.]+">
175        <token type="NameNamespace"/>
176        <pop depth="1"/>
177      </rule>
178    </state>
179    <state name="module">
180      <rule pattern="\s+">
181        <token type="Text"/>
182      </rule>
183      <rule pattern="([\p{Lu}][\w.]*)(\s+)(\()">
184        <bygroups>
185          <token type="NameNamespace"/>
186          <token type="Text"/>
187          <token type="Punctuation"/>
188        </bygroups>
189        <push state="funclist"/>
190      </rule>
191      <rule pattern="[\p{Lu}][\w.]*">
192        <token type="NameNamespace"/>
193        <pop depth="1"/>
194      </rule>
195    </state>
196    <state name="funclist">
197      <rule pattern="\s+">
198        <token type="Text"/>
199      </rule>
200      <rule pattern="[\p{Lu}]\w*">
201        <token type="KeywordType"/>
202      </rule>
203      <rule pattern="(_[\w\&#39;]+|[\p{Ll}][\w\&#39;]*)">
204        <token type="NameFunction"/>
205      </rule>
206      <rule pattern="--(?![!#$%&amp;*+./&lt;=&gt;?@^|_~:\\]).*?$">
207        <token type="CommentSingle"/>
208      </rule>
209      <rule pattern="\{-">
210        <token type="CommentMultiline"/>
211        <push state="comment"/>
212      </rule>
213      <rule pattern=",">
214        <token type="Punctuation"/>
215      </rule>
216      <rule pattern="[:!#$%&amp;*+.\\/&lt;=&gt;?@^|~-]+">
217        <token type="Operator"/>
218      </rule>
219      <rule pattern="\(">
220        <token type="Punctuation"/>
221        <push state="funclist" state="funclist"/>
222      </rule>
223      <rule pattern="\)">
224        <token type="Punctuation"/>
225        <pop depth="2"/>
226      </rule>
227    </state>
228    <state name="comment">
229      <rule pattern="[^-{}]+">
230        <token type="CommentMultiline"/>
231      </rule>
232      <rule pattern="\{-">
233        <token type="CommentMultiline"/>
234        <push/>
235      </rule>
236      <rule pattern="-\}">
237        <token type="CommentMultiline"/>
238        <pop depth="1"/>
239      </rule>
240      <rule pattern="[-{}]">
241        <token type="CommentMultiline"/>
242      </rule>
243    </state>
244    <state name="character">
245      <rule pattern="[^\\&#39;]&#39;">
246        <token type="LiteralStringChar"/>
247        <pop depth="1"/>
248      </rule>
249      <rule pattern="\\">
250        <token type="LiteralStringEscape"/>
251        <push state="escape"/>
252      </rule>
253      <rule pattern="&#39;">
254        <token type="LiteralStringChar"/>
255        <pop depth="1"/>
256      </rule>
257    </state>
258    <state name="string">
259      <rule pattern="[^\\&#34;]+">
260        <token type="LiteralString"/>
261      </rule>
262      <rule pattern="\\">
263        <token type="LiteralStringEscape"/>
264        <push state="escape"/>
265      </rule>
266      <rule pattern="&#34;">
267        <token type="LiteralString"/>
268        <pop depth="1"/>
269      </rule>
270    </state>
271  </rules>
272</lexer>