3 <!DOCTYPE MODE SYSTEM "xmode.dtd">
6 Haskell mode by Stephen Blackheath
12 <PROPERTY NAME="commentStart" VALUE="{-" />
13 <PROPERTY NAME="commentEnd" VALUE="-}" />
14 <PROPERTY NAME="lineComment" VALUE="--" />
17 <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE">
19 <SPAN TYPE="COMMENT2">
24 <SPAN TYPE="COMMENT1">
29 <EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>
31 <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
36 <SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">
41 <!-- Reserved words. -->
42 <SEQ_REGEXP TYPE="KEYWORD1">case(?![a-z_A-Z0-9'])</SEQ_REGEXP>
43 <SEQ_REGEXP TYPE="KEYWORD1">class(?![a-z_A-Z0-9'])</SEQ_REGEXP>
44 <SEQ_REGEXP TYPE="KEYWORD1">data(?![a-z_A-Z0-9'])</SEQ_REGEXP>
45 <SEQ_REGEXP TYPE="KEYWORD1">default(?![a-z_A-Z0-9'])</SEQ_REGEXP>
46 <SEQ_REGEXP TYPE="KEYWORD1">deriving(?![a-z_A-Z0-9'])</SEQ_REGEXP>
47 <SEQ_REGEXP TYPE="KEYWORD1">do(?![a-z_A-Z0-9'])</SEQ_REGEXP>
48 <SEQ_REGEXP TYPE="KEYWORD1">else(?![a-z_A-Z0-9'])</SEQ_REGEXP>
49 <SEQ_REGEXP TYPE="KEYWORD1">if(?![a-z_A-Z0-9'])</SEQ_REGEXP>
50 <SEQ_REGEXP TYPE="KEYWORD1">import(?![a-z_A-Z0-9'])</SEQ_REGEXP>
51 <SEQ_REGEXP TYPE="KEYWORD1">in(?![a-z_A-Z0-9'])</SEQ_REGEXP>
52 <SEQ_REGEXP TYPE="KEYWORD1">infix(?![a-z_A-Z0-9'])</SEQ_REGEXP>
53 <SEQ_REGEXP TYPE="KEYWORD1">infixl(?![a-z_A-Z0-9'])</SEQ_REGEXP>
54 <SEQ_REGEXP TYPE="KEYWORD1">infixr(?![a-z_A-Z0-9'])</SEQ_REGEXP>
55 <SEQ_REGEXP TYPE="KEYWORD1">instance(?![a-z_A-Z0-9'])</SEQ_REGEXP>
56 <SEQ_REGEXP TYPE="KEYWORD1">let(?![a-z_A-Z0-9'])</SEQ_REGEXP>
57 <SEQ_REGEXP TYPE="KEYWORD1">module(?![a-z_A-Z0-9'])</SEQ_REGEXP>
58 <SEQ_REGEXP TYPE="KEYWORD1">newtype(?![a-z_A-Z0-9'])</SEQ_REGEXP>
59 <SEQ_REGEXP TYPE="KEYWORD1">of(?![a-z_A-Z0-9'])</SEQ_REGEXP>
60 <SEQ_REGEXP TYPE="KEYWORD1">then(?![a-z_A-Z0-9'])</SEQ_REGEXP>
61 <SEQ_REGEXP TYPE="KEYWORD1">type(?![a-z_A-Z0-9'])</SEQ_REGEXP>
62 <SEQ_REGEXP TYPE="KEYWORD1">where(?![a-z_A-Z0-9'])</SEQ_REGEXP>
63 <SEQ_REGEXP TYPE="KEYWORD1">_(?![a-z_A-Z0-9'])</SEQ_REGEXP>
64 <SEQ_REGEXP TYPE="KEYWORD1">as(?![a-z_A-Z0-9'])</SEQ_REGEXP>
65 <SEQ_REGEXP TYPE="KEYWORD1">qualified(?![a-z_A-Z0-9'])</SEQ_REGEXP>
66 <SEQ_REGEXP TYPE="KEYWORD1">hiding(?![a-z_A-Z0-9'])</SEQ_REGEXP>
67 <!-- Non-Haskell-98 keywords -->
68 <SEQ_REGEXP TYPE="KEYWORD1">foreign(?![a-z_A-Z0-9'])</SEQ_REGEXP>
69 <SEQ_REGEXP TYPE="KEYWORD1">family(?![a-z_A-Z0-9'])</SEQ_REGEXP>
70 <!-- GHC extension keywords -->
71 <SEQ_REGEXP TYPE="KEYWORD1">proc(?![a-z_A-Z0-9'])</SEQ_REGEXP>
72 <SEQ_REGEXP TYPE="KEYWORD1">rec(?![a-z_A-Z0-9'])</SEQ_REGEXP>
73 <SEQ_REGEXP TYPE="KEYWORD1">mdo(?![a-z_A-Z0-9'])</SEQ_REGEXP>
75 <SEQ_REGEXP TYPE="DIGIT">0[xXoO][0-9a-fA-F]+</SEQ_REGEXP>
76 <SEQ_REGEXP TYPE="DIGIT">[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?</SEQ_REGEXP>
78 <!-- Reserved operators -->
79 <SEQ_REGEXP TYPE="KEYWORD4">\.\.(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
80 <SEQ_REGEXP TYPE="KEYWORD4">:(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
81 <SEQ_REGEXP TYPE="KEYWORD4">::(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
82 <SEQ_REGEXP TYPE="KEYWORD4">=(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
83 <SEQ TYPE="KEYWORD4">\</SEQ>
84 <SEQ_REGEXP TYPE="KEYWORD4">\|(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
85 <SEQ_REGEXP TYPE="KEYWORD4"><-(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
86 <SEQ_REGEXP TYPE="KEYWORD4">->(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
87 <SEQ_REGEXP TYPE="KEYWORD4">@(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
88 <SEQ_REGEXP TYPE="KEYWORD4">~(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
89 <SEQ_REGEXP TYPE="KEYWORD4">=>(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
91 <!-- GHC extension reserved operators -->
92 <SEQ_REGEXP TYPE="KEYWORD4">-(<{1,2})(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
94 <!-- Normal operators, backquoted operators -->
95 <SEQ_REGEXP TYPE="OPERATOR">([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:]*</SEQ_REGEXP>
96 <SEQ_REGEXP TYPE="OPERATOR">`([A-Z][a-z_A-Z0-9']*\.)*[a-z_][a-z_A-Z0-9']*`</SEQ_REGEXP>
98 <!-- variable/function (qualified or not) -->
99 <SEQ_REGEXP TYPE="NULL">([A-Z][a-z_A-Z0-9']*\.)*[a-z_][a-z_A-Z0-9']*</SEQ_REGEXP>
100 <!-- contructor/type (qualified or not) -->
101 <SEQ_REGEXP TYPE="KEYWORD2">[A-Z][a-z_A-Z0-9']*(\.[A-Z][a-z_A-Z0-9']*)*</SEQ_REGEXP>
103 <!-- Operators in parentheses appear like functions, but this
104 doesn't match the special case of (..) used for imports -->
105 <SEQ_REGEXP TYPE="NULL">\(\s*([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~]\s*\)</SEQ_REGEXP>
106 <SEQ_REGEXP TYPE="NULL">\(\s*([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+/<=>?@\\\^\|\-~:][!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)</SEQ_REGEXP>
107 <SEQ_REGEXP TYPE="NULL">\(\s*([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+/<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:][!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)</SEQ_REGEXP>
108 <SEQ_REGEXP TYPE="NULL">\(\s*([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:]{2,}\)</SEQ_REGEXP>
110 <!-- Infix constructors -->
111 <SEQ_REGEXP TYPE="KEYWORD2">([A-Z][a-z_A-Z0-9']*\.)*:[!#$%&\*+\./<=>?@\\\^\|\-~:]*</SEQ_REGEXP>
112 <!-- Infix constructors in parentheses -->
113 <SEQ_REGEXP TYPE="KEYWORD2">\(\s*([A-Z][a-z_A-Z0-9']*\.)*:[!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)</SEQ_REGEXP>
115 <!-- (, including the specific case of (..) but excluding all other cases
116 where it's an operator in parentheses -->
117 <SEQ_REGEXP TYPE="KEYWORD3">\((?!\s*([!#$%&\*+\./<=>?@\\\^\|\-~]\s*\)|[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+/<=>?@\\\^\|\-~:][!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)|[!#$%&\*+/<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:][!#$%&\*+\./<=>?@\\\^\|\-~:]*\s*\)|[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:]{2,}\s*\)))</SEQ_REGEXP>
118 <SEQ TYPE="KEYWORD3">)</SEQ>
119 <SEQ TYPE="KEYWORD3">,</SEQ>
120 <SEQ TYPE="KEYWORD3">[</SEQ>
121 <SEQ TYPE="KEYWORD3">]</SEQ>