0 | module Text.WebIDL.Types.Token
2 | import Derive.Prelude
3 | import Text.WebIDL.Types.Identifier
4 | import Text.WebIDL.Types.Numbers
5 | import Text.WebIDL.Types.StringLit
6 | import Text.WebIDL.Types.Symbol
10 | %language ElabReflection
13 | data IdlError : Type where
14 | ExpectedStringLit : IdlError
15 | InvalidArgName : String -> IdlError
17 | %runElab derive "IdlError" [Show,Eq]
20 | Interpolation IdlError where
21 | interpolate ExpectedStringLit = "Expected string literal"
22 | interpolate (InvalidArgName s) = "Invalid argument name: \{s}"
28 | data IdlToken : Type where
30 | SLit : StringLit -> IdlToken
34 | ILit : IntLit -> IdlToken
37 | FLit : FloatLit -> IdlToken
41 | Ident : Identifier -> IdlToken
44 | Key : Keyword -> IdlToken
47 | Other : Symbol -> IdlToken
55 | %runElab derive "IdlToken" [Eq,Show]
58 | Interpolation IdlToken where
59 | interpolate (SLit x) = interpolate x
60 | interpolate (ILit x) = interpolate x
61 | interpolate (FLit x) = interpolate x
62 | interpolate (Ident x) = interpolate x
63 | interpolate (Key x) = interpolate x
64 | interpolate (Other x) = interpolate x
65 | interpolate Comment = "<comment>"
66 | interpolate Space = "<space>"