1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
-- test file for Haskell syntax highlighting in KDE's Kate
-- The test file for literate Haskell can be easily created like this:
-- cat highlight.hs | sed -e "s|^|> |" -e "s|> -- ||" -e "s|^> $||" > highlight.lhs
-- You only have to manually edit the multi-line comment below.
-- this is a single-line comment
{- this is a multi-line comment
Things like "a string" or a 'c' character shouldn't be highlighted in here.
-- I could even start a new
-- one-line comment.
-}
-- a data definition
data Tree a = Br (Tree a) (Tree a) | Leaf a | Nil deriving (Show, Eq)
-- function definition, "funnyfunction::", "Integer", "Int", "Bool" should be highlighted
funnyfunction::(Tree a)=>[a]->Integer->Int->Bool
-- strings and chars
-- first line of function definitions (type declaration) should be highlighted
strangefunction::Int->String
strangefunction 1 = "hello"
strangefunction 2 = "what's up"
strangefunction 3 = (strangefunction 1) ++ ", " ++ (strangefunction 2)
strangefunction 4 = 'a':'b':'c':'"':[] -- will return "abc"
strangefunction 5 = '\n':[]
strangefunction 6 = '\invalidhaskell':[]
-- function name including the single quote character
-- and infix operator (`div`)
justtesting'::Int->Int
justtesting' 2 = 2+1
justtesting' 9 = 7 `div` 2
-- same definition as above, slightly different function name and a couple more whitespaces
justtesting'' :: Int -> Int
justtesting'' 2 = 3
justtesting'' 9 = 3 + 9 - 9
-- the following lines are copied out of Haskell's "Prelude.hs"
infixl 7 *, /, `quot`, `rem`, `div`, `mod`, :%, %
-- everything highlighted except the "a"
class Bounded a where
minBound, maxBound :: a
class (Num a, Ord a) => Real a where
toRational :: a -> Rational
-- finally, some keyword lists
-- keywords
case, class, data, deriving, do, else, if, in, infixl, infixr, instance, let, module, of, primitive,
then, type, where
-- infix operators
quot, rem, div, mod, elem, notElem, seq
-- this stuff is not handled yet
!!, %, &&, $!, $, *, **, -,., /=, <, <=, =<<, ==, >, >=, >>, >>=, ^, ^^, ++, ||
-- functions
FilePath, IOError, abs, acos, acosh, all, and, any, appendFile,
approxRational, asTypeOf, asin, asinh, atan, atan2, atanh, basicIORun,
break, catch, ceiling, chr, compare, concat, concatMap, const, cos, cosh,
curry, cycle, decodeFloat, denominator, digitToInt, div, divMod, drop,
dropWhile, either, elem, encodeFloat, enumFrom, enumFromThen,
enumFromThenTo, enumFromTo, error, even, exp, exponent, fail, filter, flip,
floatDigits, floatRadix, floatRange, floor, fmap, foldl, foldl1, foldr,
foldr1, fromDouble, fromEnum, fromInt, fromInteger, fromIntegral,
fromRational, fst, gcd, getChar, getContents, getLine, head, id, inRange,
index, init, intToDigit, interact, ioError, isAlpha, isAlphaNum, isAscii,
isControl, isDenormalized, isDigit, isHexDigit, isIEEE, isInfinite, isLower,
isNaN, isNegativeZero, isOctDigit, isPrint, isSpace, isUpper, iterate, last,
lcm, length, lex, lexDigits, lexLitChar, lines, log, logBase, lookup, map,
mapM, mapM_, max, maxBound, maximum, maybe, min, minBound, minimum, mod,
negate, not, notElem, null, numerator, odd, or, ord, otherwise, pi, pred,
primExitWith, print, product, properFraction, putChar, putStr, putStrLn,
quot, quotRem, range, rangeSize, read, readDec, readFile, readFloat,
readHex, readIO, readInt, readList, readLitChar, readLn, readOct, readParen,
readSigned, reads, readsPrec, realToFrac, recip, rem, repeat, replicate,
return, reverse, round, scaleFloat, scanl, scanl1, scanr, scanr1, seq,
sequence, sequence_, show, showChar, showInt, showList, showLitChar,
showParen, showSigned, showString, shows, showsPrec, significand, signum,
sin, sinh, snd, span, splitAt, sqrt, subtract, succ, sum, tail, take,
either, elem, encodeFloat, enumFrom, enumFromThen, enumFromThenTo,
enumFromTo, error, even, exp, exponent, fail, filter, flip, floatDigits,
floatRadix, floatRange, floor, fmap, takeWhile, tan, tanh, threadToIOResult,
toEnum, toInt, toInteger, toLower, toRational, toUpper, truncate, uncurry,
undefined, unlines, until, unwords, unzip, unzip3, userError, words,
writeFile, zip, zip3, zipWith, zipWith3
-- type constructors
Bool, Char, Double, Either, Float, IO, Integer, Int, Maybe, Ordering, Rational, Ratio, ReadS,
ShowS, String
-- classes
Bounded, Enum, Eq, Floating, Fractional, Functor, Integral, Ix, Monad, Num, Ord, Read, RealFloat,
RealFrac, Real, Show
-- data constructors
EQ, False, GT, Just, LT, Left, Nothing, Right, True
|