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>