{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module GLua.TokenTypes where
import Data.Aeson
import Data.List
import GHC.Generics
import GLua.AG.Token
import Text.ParserCombinators.UU.BasicInstances
instance Show MToken where
show :: MToken -> String
show (MToken Region
_ Token
tok) = forall a. Show a => a -> String
show Token
tok
instance Eq MToken where
(MToken Region
_ Token
t1) == :: MToken -> MToken -> Bool
== (MToken Region
_ Token
t2) = Token
t1 forall a. Eq a => a -> a -> Bool
== Token
t2
instance Ord MToken where
compare :: MToken -> MToken -> Ordering
compare (MToken Region
_ Token
t1) (MToken Region
_ Token
t2) = forall a. Ord a => a -> a -> Ordering
compare Token
t1 Token
t2
deriving instance Generic MToken
instance ToJSON MToken
instance FromJSON MToken
instance Eq LineColPos where
(LineColPos Int
l Int
c Int
p) == :: LineColPos -> LineColPos -> Bool
== (LineColPos Int
l' Int
c' Int
p') = Int
l forall a. Eq a => a -> a -> Bool
== Int
l' Bool -> Bool -> Bool
&& Int
c forall a. Eq a => a -> a -> Bool
== Int
c' Bool -> Bool -> Bool
&& Int
p forall a. Eq a => a -> a -> Bool
== Int
p'
instance Ord LineColPos where
compare :: LineColPos -> LineColPos -> Ordering
compare (LineColPos Int
l Int
c Int
_) (LineColPos Int
l' Int
c' Int
_) =
forall a. Ord a => a -> a -> Ordering
compare Int
l Int
l' forall a. Monoid a => a -> a -> a
`mappend` forall a. Ord a => a -> a -> Ordering
compare Int
c Int
c'
instance ToJSON LineColPos where
toJSON :: LineColPos -> Value
toJSON (LineColPos Int
line Int
col Int
p) =
[Pair] -> Value
object [Key
"line" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
line, Key
"column" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
col, Key
"pos" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
p]
#if MIN_VERSION_aeson(0,10,0)
toEncoding :: LineColPos -> Encoding
toEncoding (LineColPos Int
line Int
col Int
p) =
Series -> Encoding
pairs (Key
"line" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
line forall a. Semigroup a => a -> a -> a
<> Key
"column" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
col forall a. Semigroup a => a -> a -> a
<> Key
"pos" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= Int
p)
#endif
instance FromJSON LineColPos where
parseJSON :: Value -> Parser LineColPos
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"LineColPos" forall a b. (a -> b) -> a -> b
$ \Object
v ->
Int -> Int -> Int -> LineColPos
LineColPos
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"line"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"column"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"pos"
instance Eq Region where
Region LineColPos
s LineColPos
e == :: Region -> Region -> Bool
== Region LineColPos
s' LineColPos
e' = LineColPos
s forall a. Eq a => a -> a -> Bool
== LineColPos
s' Bool -> Bool -> Bool
&& LineColPos
e forall a. Eq a => a -> a -> Bool
== LineColPos
e'
instance Ord Region where
compare :: Region -> Region -> Ordering
compare (Region LineColPos
s LineColPos
e) (Region LineColPos
s' LineColPos
e') =
forall a. Ord a => a -> a -> Ordering
compare LineColPos
s LineColPos
s' forall a. Monoid a => a -> a -> a
`mappend` forall a. Ord a => a -> a -> Ordering
compare LineColPos
e LineColPos
e'
instance ToJSON Region
instance FromJSON Region
instance ToJSON Token
instance FromJSON Token
type MTokenAlgebra mtok = Region -> Token -> mtok
mpos :: MToken -> Region
mpos :: MToken -> Region
mpos (MToken Region
p Token
_) = Region
p
mtok :: MToken -> Token
mtok :: MToken -> Token
mtok (MToken Region
_ Token
t) = Token
t
emptyRg :: Region
emptyRg :: Region
emptyRg = LineColPos -> LineColPos -> Region
Region (Int -> Int -> Int -> LineColPos
LineColPos Int
0 Int
0 Int
0) (Int -> Int -> Int -> LineColPos
LineColPos Int
0 Int
0 Int
0)
rgOr :: Region -> Region -> Region
rgOr :: Region -> Region -> Region
rgOr Region
l Region
r
| Region
l forall a. Eq a => a -> a -> Bool
== Region
emptyRg = Region
r
| Bool
otherwise = Region
l
customAdvanceChr :: LineColPos -> Char -> LineColPos
customAdvanceChr :: LineColPos -> Char -> LineColPos
customAdvanceChr (LineColPos Int
line Int
_ Int
abs') Char
'\n' = Int -> Int -> Int -> LineColPos
LineColPos (Int
line forall a. Num a => a -> a -> a
+ Int
1) Int
0 (Int
abs' forall a. Num a => a -> a -> a
+ Int
1)
customAdvanceChr (LineColPos Int
line Int
pos' Int
abs') Char
_ = Int -> Int -> Int -> LineColPos
LineColPos Int
line (Int
pos' forall a. Num a => a -> a -> a
+ Int
1) (Int
abs' forall a. Num a => a -> a -> a
+ Int
1)
customAdvanceStr :: LineColPos -> String -> LineColPos
customAdvanceStr :: LineColPos -> String -> LineColPos
customAdvanceStr = forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' LineColPos -> Char -> LineColPos
customAdvanceChr
customAdvanceToken :: LineColPos -> Token -> LineColPos
customAdvanceToken :: LineColPos -> Token -> LineColPos
customAdvanceToken (LineColPos Int
line Int
pos' Int
abs') Token
t = let len :: Int
len = Token -> Int
tokenSize Token
t in Int -> Int -> Int -> LineColPos
LineColPos Int
line (Int
pos' forall a. Num a => a -> a -> a
+ Int
len) (Int
abs' forall a. Num a => a -> a -> a
+ Int
len)
before :: Region -> Region -> Bool
before :: Region -> Region -> Bool
before (Region LineColPos
_ (LineColPos Int
_ Int
_ Int
p)) (Region (LineColPos Int
_ Int
_ Int
p') LineColPos
_) = Int
p forall a. Ord a => a -> a -> Bool
< Int
p'
beforeOrOnLine :: Region -> Region -> Bool
beforeOrOnLine :: Region -> Region -> Bool
beforeOrOnLine (Region LineColPos
_ (LineColPos Int
l Int
_ Int
_)) (Region (LineColPos Int
l' Int
_ Int
_) LineColPos
_) = Int
l forall a. Ord a => a -> a -> Bool
<= Int
l'
beforeEnd :: Region -> Region -> Bool
beforeEnd :: Region -> Region -> Bool
beforeEnd (Region LineColPos
_ (LineColPos Int
_ Int
_ Int
p)) (Region LineColPos
_ (LineColPos Int
_ Int
_ Int
p')) = Int
p forall a. Ord a => a -> a -> Bool
< Int
p'
beforeEndLine :: Region -> Region -> Bool
beforeEndLine :: Region -> Region -> Bool
beforeEndLine (Region LineColPos
_ (LineColPos Int
l Int
_ Int
_)) (Region LineColPos
_ (LineColPos Int
l' Int
_ Int
_)) = Int
l forall a. Ord a => a -> a -> Bool
<= Int
l'
rgStart :: Region -> LineColPos
rgStart :: Region -> LineColPos
rgStart (Region LineColPos
s LineColPos
_) = LineColPos
s
rgEnd :: Region -> LineColPos
rgEnd :: Region -> LineColPos
rgEnd (Region LineColPos
_ LineColPos
e) = LineColPos
e
upto :: Region -> Region -> Region
upto :: Region -> Region -> Region
upto Region
lr Region
rr = case (Region -> LineColPos
rgEnd Region
lr, Region -> LineColPos
rgStart Region
rr) of
(LineColPos
_, LineColPos Int
0 Int
0 Int
0) -> Region
lr
(LineColPos Int
l Int
c Int
_, LineColPos Int
l' Int
c' Int
_)
| Int
l' forall a. Ord a => a -> a -> Bool
> Int
l Bool -> Bool -> Bool
|| (Int
l' forall a. Eq a => a -> a -> Bool
== Int
l Bool -> Bool -> Bool
&& Int
c' forall a. Ord a => a -> a -> Bool
> Int
c) -> Region
lr
| Bool
otherwise -> LineColPos -> LineColPos -> Region
Region (Region -> LineColPos
rgStart Region
lr) (Region -> LineColPos
rgStart Region
rr)
foldMToken :: MTokenAlgebra t -> MToken -> t
foldMToken :: forall t. MTokenAlgebra t -> MToken -> t
foldMToken MTokenAlgebra t
alg (MToken Region
p Token
t) = MTokenAlgebra t
alg Region
p Token
t
mFold :: TokenAlgebra a -> MToken -> a
mFold :: forall a. TokenAlgebra a -> MToken -> a
mFold TokenAlgebra a
alg = forall t. MTokenAlgebra t -> MToken -> t
foldMToken forall {p}. p -> Token -> a
f
where
f :: p -> Token -> a
f p
_ = forall t. TokenAlgebra t -> Token -> t
foldToken TokenAlgebra a
alg
type TokenAlgebra token =
( (
String -> token
, String -> token
, Int -> String -> token
, String -> token
, String -> token
, token
)
, (
String -> token
, String -> token
, String -> token
, String -> token
, token
, token
, token
, token
)
, ( token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
)
, (
token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
, token
)
, (
token
, token
, token
, token
, token
, token
)
, (
String -> String -> String -> token
, String -> token
)
)
foldToken :: TokenAlgebra t -> Token -> t
foldToken :: forall t. TokenAlgebra t -> Token -> t
foldToken ((String -> t
tWhitespace, String -> t
tDashComment, Int -> String -> t
tDashBlockComment, String -> t
tSlashComment, String -> t
tSlashBlockComment, t
tSemicolon), (String -> t
tTNumber, String -> t
tDQString, String -> t
tSQString, String -> t
tMLString, t
tTTrue, t
tTFalse, t
tNil, t
tVarArg), (t
tPlus, t
tMinus, t
tMultiply, t
tDivide, t
tModulus, t
tPower, t
tTEq, t
tTNEq, t
tTCNEq, t
tTLEQ, t
tTGEQ, t
tTLT, t
tTGT, t
tEquals, t
tConcatenate, t
tColon, t
tDot, t
tComma, t
tHash, t
tNot, t
tCNot, t
tAnd, t
tCAnd, t
tOr, t
tCOr), (t
tFunction, t
tLocal, t
tIf, t
tThen, t
tElseif, t
tElse, t
tFor, t
tIn, t
tDo, t
tWhile, t
tUntil, t
tRepeat, t
tContinue, t
tBreak, t
tReturn, t
tEnd), (t
tLRound, t
tRRound, t
tLCurly, t
tRCurly, t
tLSquare, t
tRSquare), (String -> String -> String -> t
tLabel, String -> t
tIdentifier)) = Token -> t
fold
where
fold :: Token -> t
fold (Whitespace String
str) = String -> t
tWhitespace String
str
fold (DashComment String
str) = String -> t
tDashComment String
str
fold (DashBlockComment Int
depth String
str) = Int -> String -> t
tDashBlockComment Int
depth String
str
fold (SlashComment String
str) = String -> t
tSlashComment String
str
fold (SlashBlockComment String
str) = String -> t
tSlashBlockComment String
str
fold (TNumber String
str) = String -> t
tTNumber String
str
fold (Label String
whitespaceBefore String
str String
whitespaceAfter) = String -> String -> String -> t
tLabel String
whitespaceBefore String
str String
whitespaceAfter
fold (Identifier String
str) = String -> t
tIdentifier String
str
fold (DQString String
str) = String -> t
tDQString String
str
fold (SQString String
str) = String -> t
tSQString String
str
fold (MLString String
str) = String -> t
tMLString String
str
fold Token
And = t
tAnd
fold Token
CAnd = t
tCAnd
fold Token
Break = t
tBreak
fold Token
Do = t
tDo
fold Token
Else = t
tElse
fold Token
Elseif = t
tElseif
fold Token
End = t
tEnd
fold Token
TFalse = t
tTFalse
fold Token
For = t
tFor
fold Token
Function = t
tFunction
fold Token
If = t
tIf
fold Token
In = t
tIn
fold Token
Local = t
tLocal
fold Token
Nil = t
tNil
fold Token
Not = t
tNot
fold Token
CNot = t
tCNot
fold Token
Or = t
tOr
fold Token
COr = t
tCOr
fold Token
Repeat = t
tRepeat
fold Token
Continue = t
tContinue
fold Token
Return = t
tReturn
fold Token
Then = t
tThen
fold Token
TTrue = t
tTTrue
fold Token
Until = t
tUntil
fold Token
While = t
tWhile
fold Token
Plus = t
tPlus
fold Token
Minus = t
tMinus
fold Token
Multiply = t
tMultiply
fold Token
Divide = t
tDivide
fold Token
Modulus = t
tModulus
fold Token
Power = t
tPower
fold Token
Hash = t
tHash
fold Token
TEq = t
tTEq
fold Token
TNEq = t
tTNEq
fold Token
TCNEq = t
tTCNEq
fold Token
TLEQ = t
tTLEQ
fold Token
TGEQ = t
tTGEQ
fold Token
TLT = t
tTLT
fold Token
TGT = t
tTGT
fold Token
Equals = t
tEquals
fold Token
LRound = t
tLRound
fold Token
RRound = t
tRRound
fold Token
LCurly = t
tLCurly
fold Token
RCurly = t
tRCurly
fold Token
LSquare = t
tLSquare
fold Token
RSquare = t
tRSquare
fold Token
Semicolon = t
tSemicolon
fold Token
Colon = t
tColon
fold Token
Comma = t
tComma
fold Token
Dot = t
tDot
fold Token
Concatenate = t
tConcatenate
fold Token
VarArg = t
tVarArg
instance Show Token where
show :: Token -> String
show =
forall t. TokenAlgebra t -> Token -> t
foldToken
(
( forall a. a -> a
id
, (String
"--" forall a. [a] -> [a] -> [a]
++)
, \Int
d String
s -> let n :: String
n = forall a. Int -> a -> [a]
replicate Int
d Char
'=' in String
"--[" forall a. [a] -> [a] -> [a]
++ String
n forall a. [a] -> [a] -> [a]
++ Char
'[' forall a. a -> [a] -> [a]
: String
s forall a. [a] -> [a] -> [a]
++ Char
']' forall a. a -> [a] -> [a]
: String
n forall a. [a] -> [a] -> [a]
++ String
"]"
, (String
"//" forall a. [a] -> [a] -> [a]
++)
, \String
s -> String
"/*" forall a. [a] -> [a] -> [a]
++ String
s forall a. [a] -> [a] -> [a]
++ String
"*/"
, String
";"
)
,
( forall a. a -> a
id
, \String
s -> String
"\"" forall a. [a] -> [a] -> [a]
++ String
s forall a. [a] -> [a] -> [a]
++ String
"\""
, \String
s -> String
"'" forall a. [a] -> [a] -> [a]
++ String
s forall a. [a] -> [a] -> [a]
++ String
"'"
, forall a. a -> a
id
, String
"true"
, String
"false"
, String
"nil"
, String
"..."
)
,
( String
"+"
, String
"-"
, String
"*"
, String
"/"
, String
"%"
, String
"^"
, String
"=="
, String
"~="
, String
"!="
, String
"<="
, String
">="
, String
"<"
, String
">"
, String
"="
, String
".."
, String
":"
, String
"."
, String
","
, String
"#"
, String
"not"
, String
"!"
, String
"and"
, String
"&&"
, String
"or"
, String
"||"
)
,
( String
"function"
, String
"local"
, String
"if"
, String
"then"
, String
"elseif"
, String
"else"
, String
"for"
, String
"in"
, String
"do"
, String
"while"
, String
"until"
, String
"repeat"
, String
"continue"
, String
"break"
, String
"return"
, String
"end"
)
,
( String
"("
, String
")"
, String
"{"
, String
"}"
, String
"["
, String
"]"
)
,
( \String
spaceBefore String
ident String
spaceAfter -> String
spaceBefore forall a. [a] -> [a] -> [a]
++ String
ident forall a. [a] -> [a] -> [a]
++ String
spaceAfter
, forall a. a -> a
id
)
)
isWhitespace :: MToken -> Bool
isWhitespace :: MToken -> Bool
isWhitespace = forall a. TokenAlgebra a -> MToken -> a
mFold ((forall a b. a -> b -> a
const Bool
True, forall a b. a -> b -> a
const Bool
False, \Int
_ String
_ -> Bool
False, forall a b. a -> b -> a
const Bool
False, forall a b. a -> b -> a
const Bool
False, Bool
False), (forall a b. a -> b -> a
const Bool
False, forall a b. a -> b -> a
const Bool
False, forall a b. a -> b -> a
const Bool
False, forall a b. a -> b -> a
const Bool
False, Bool
False, Bool
False, Bool
False, Bool
False), (Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False), (Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False), (Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False), (\String
_ String
_ String
_ -> Bool
False, forall a b. a -> b -> a
const Bool
False))
isComment :: MToken -> Bool
= forall a. TokenAlgebra a -> MToken -> a
mFold ((forall a b. a -> b -> a
const Bool
False, forall a b. a -> b -> a
const Bool
True, \Int
_ String
_ -> Bool
True, forall a b. a -> b -> a
const Bool
True, forall a b. a -> b -> a
const Bool
True, Bool
False), (forall a b. a -> b -> a
const Bool
False, forall a b. a -> b -> a
const Bool
False, forall a b. a -> b -> a
const Bool
False, forall a b. a -> b -> a
const Bool
False, Bool
False, Bool
False, Bool
False, Bool
False), (Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False), (Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False), (Bool
False, Bool
False, Bool
False, Bool
False, Bool
False, Bool
False), (\String
_ String
_ String
_ -> Bool
False, forall a b. a -> b -> a
const Bool
False))
splitComments :: [MToken] -> ([MToken], [MToken])
= forall a. (a -> Bool) -> [a] -> ([a], [a])
partition MToken -> Bool
isComment
tokenLabel :: MToken -> String
tokenLabel :: MToken -> String
tokenLabel = forall a. TokenAlgebra a -> MToken -> a
mFold ((forall a b. a -> b -> a
const String
"", forall a b. a -> b -> a
const String
"", \Int
_ String
_ -> String
"", forall a b. a -> b -> a
const String
"", forall a b. a -> b -> a
const String
"", String
""), (forall a b. a -> b -> a
const String
"", forall a b. a -> b -> a
const String
"", forall a b. a -> b -> a
const String
"", forall a b. a -> b -> a
const String
"", String
"", String
"", String
"", String
""), (String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
""), (String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
"", String
""), (String
"", String
"", String
"", String
"", String
"", String
""), (\String
_ String
ident String
_ -> String
ident, forall a. a -> a
id))
tokenSize :: Token -> Int
tokenSize :: Token -> Int
tokenSize =
forall t. TokenAlgebra t -> Token -> t
foldToken
(
( forall (t :: * -> *) a. Foldable t => t a -> Int
length
, (forall a. Num a => a -> a -> a
+ Int
2) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Int
length
, \Int
d String
s -> Int
6 forall a. Num a => a -> a -> a
+ forall (t :: * -> *) a. Foldable t => t a -> Int
length String
s forall a. Num a => a -> a -> a
+ Int
2 forall a. Num a => a -> a -> a
* Int
d
, (forall a. Num a => a -> a -> a
+ Int
2) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Int
length
, (forall a. Num a => a -> a -> a
+ Int
4) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Int
length
, Int
1
)
,
( forall (t :: * -> *) a. Foldable t => t a -> Int
length
, (forall a. Num a => a -> a -> a
+ Int
2) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Int
length
, (forall a. Num a => a -> a -> a
+ Int
2) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Int
length
, forall (t :: * -> *) a. Foldable t => t a -> Int
length
, Int
4
, Int
5
, Int
3
, Int
3
)
,
( Int
1
, Int
1
, Int
1
, Int
1
, Int
1
, Int
1
, Int
2
, Int
2
, Int
2
, Int
2
, Int
2
, Int
1
, Int
1
, Int
1
, Int
2
, Int
1
, Int
1
, Int
1
, Int
1
, Int
3
, Int
1
, Int
3
, Int
2
, Int
2
, Int
2
)
,
( Int
8
, Int
5
, Int
2
, Int
4
, Int
6
, Int
4
, Int
3
, Int
2
, Int
2
, Int
5
, Int
5
, Int
6
, Int
8
, Int
5
, Int
6
, Int
3
)
,
( Int
1
, Int
1
, Int
1
, Int
1
, Int
1
, Int
1
)
,
( \String
spaceBefore String
ident String
spaceAfter ->
Int
2 forall a. Num a => a -> a -> a
+ forall (t :: * -> *) a. Foldable t => t a -> Int
length String
spaceBefore forall a. Num a => a -> a -> a
+ forall (t :: * -> *) a. Foldable t => t a -> Int
length String
ident forall a. Num a => a -> a -> a
+ forall (t :: * -> *) a. Foldable t => t a -> Int
length String
spaceAfter forall a. Num a => a -> a -> a
+ Int
2
, forall (t :: * -> *) a. Foldable t => t a -> Int
length
)
)
isSingleLineComment :: Token -> Bool
= \case
DashComment String
_ -> Bool
True
SlashComment String
_ -> Bool
True
Token
_ -> Bool
False