module Language.PureScript.CST.Positions where
import Prelude
import Data.Foldable (foldl')
import Data.List.NonEmpty qualified as NE
import Data.Maybe (fromMaybe)
import Data.Text (Text)
import Data.Void (Void)
import Data.Text qualified as Text
import Language.PureScript.CST.Types
advanceToken :: SourcePos -> Token -> SourcePos
advanceToken :: SourcePos -> Token -> SourcePos
advanceToken SourcePos
pos = SourcePos -> (Int, Int) -> SourcePos
applyDelta SourcePos
pos forall b c a. (b -> c) -> (a -> b) -> a -> c
. Token -> (Int, Int)
tokenDelta
advanceLeading :: SourcePos -> [Comment LineFeed] -> SourcePos
advanceLeading :: SourcePos -> [Comment LineFeed] -> SourcePos
advanceLeading = forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' forall a b. (a -> b) -> a -> b
$ \SourcePos
a -> SourcePos -> (Int, Int) -> SourcePos
applyDelta SourcePos
a forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> (Int, Int)) -> Comment a -> (Int, Int)
commentDelta LineFeed -> (Int, Int)
lineDelta
advanceTrailing :: SourcePos -> [Comment Void] -> SourcePos
advanceTrailing :: SourcePos -> [Comment Void] -> SourcePos
advanceTrailing = forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' forall a b. (a -> b) -> a -> b
$ \SourcePos
a -> SourcePos -> (Int, Int) -> SourcePos
applyDelta SourcePos
a forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (a -> (Int, Int)) -> Comment a -> (Int, Int)
commentDelta (forall a b. a -> b -> a
const (Int
0, Int
0))
tokenDelta :: Token -> (Int, Int)
tokenDelta :: Token -> (Int, Int)
tokenDelta = \case
Token
TokLeftParen -> (Int
0, Int
1)
Token
TokRightParen -> (Int
0, Int
1)
Token
TokLeftBrace -> (Int
0, Int
1)
Token
TokRightBrace -> (Int
0, Int
1)
Token
TokLeftSquare -> (Int
0, Int
1)
Token
TokRightSquare -> (Int
0, Int
1)
TokLeftArrow SourceStyle
ASCII -> (Int
0, Int
2)
TokLeftArrow SourceStyle
Unicode -> (Int
0, Int
1)
TokRightArrow SourceStyle
ASCII -> (Int
0, Int
2)
TokRightArrow SourceStyle
Unicode -> (Int
0, Int
1)
TokRightFatArrow SourceStyle
ASCII -> (Int
0, Int
2)
TokRightFatArrow SourceStyle
Unicode -> (Int
0, Int
1)
TokDoubleColon SourceStyle
ASCII -> (Int
0, Int
2)
TokDoubleColon SourceStyle
Unicode -> (Int
0, Int
1)
TokForall SourceStyle
ASCII -> (Int
0, Int
6)
TokForall SourceStyle
Unicode -> (Int
0, Int
1)
Token
TokEquals -> (Int
0, Int
1)
Token
TokPipe -> (Int
0, Int
1)
Token
TokTick -> (Int
0, Int
1)
Token
TokDot -> (Int
0, Int
1)
Token
TokComma -> (Int
0, Int
1)
Token
TokUnderscore -> (Int
0, Int
1)
Token
TokBackslash -> (Int
0, Int
1)
TokLowerName [Text]
qual Text
name -> (Int
0, [Text] -> Int
qualDelta [Text]
qual forall a. Num a => a -> a -> a
+ Text -> Int
Text.length Text
name)
TokUpperName [Text]
qual Text
name -> (Int
0, [Text] -> Int
qualDelta [Text]
qual forall a. Num a => a -> a -> a
+ Text -> Int
Text.length Text
name)
TokOperator [Text]
qual Text
sym -> (Int
0, [Text] -> Int
qualDelta [Text]
qual forall a. Num a => a -> a -> a
+ Text -> Int
Text.length Text
sym)
TokSymbolName [Text]
qual Text
sym -> (Int
0, [Text] -> Int
qualDelta [Text]
qual forall a. Num a => a -> a -> a
+ Text -> Int
Text.length Text
sym forall a. Num a => a -> a -> a
+ Int
2)
TokSymbolArr SourceStyle
Unicode -> (Int
0, Int
3)
TokSymbolArr SourceStyle
ASCII -> (Int
0, Int
4)
TokHole Text
hole -> (Int
0, Text -> Int
Text.length Text
hole forall a. Num a => a -> a -> a
+ Int
1)
TokChar Text
raw Char
_ -> (Int
0, Text -> Int
Text.length Text
raw forall a. Num a => a -> a -> a
+ Int
2)
TokInt Text
raw Integer
_ -> (Int
0, Text -> Int
Text.length Text
raw)
TokNumber Text
raw Double
_ -> (Int
0, Text -> Int
Text.length Text
raw)
TokString Text
raw PSString
_ -> Int -> (Int, Int) -> (Int, Int)
multiLine Int
1 forall a b. (a -> b) -> a -> b
$ Text -> (Int, Int)
textDelta Text
raw
TokRawString Text
raw -> Int -> (Int, Int) -> (Int, Int)
multiLine Int
3 forall a b. (a -> b) -> a -> b
$ Text -> (Int, Int)
textDelta Text
raw
Token
TokLayoutStart -> (Int
0, Int
0)
Token
TokLayoutSep -> (Int
0, Int
0)
Token
TokLayoutEnd -> (Int
0, Int
0)
Token
TokEof -> (Int
0, Int
0)
qualDelta :: [Text] -> Int
qualDelta :: [Text] -> Int
qualDelta = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (forall a. Num a => a -> a -> a
(+) forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. Num a => a -> a -> a
+ Int
1) forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Int
Text.length) Int
0
multiLine :: Int -> (Int, Int) -> (Int, Int)
multiLine :: Int -> (Int, Int) -> (Int, Int)
multiLine Int
n (Int
0, Int
c) = (Int
0, Int
c forall a. Num a => a -> a -> a
+ Int
n forall a. Num a => a -> a -> a
+ Int
n)
multiLine Int
n (Int
l, Int
c) = (Int
l, Int
c forall a. Num a => a -> a -> a
+ Int
n)
commentDelta :: (a -> (Int, Int)) -> Comment a -> (Int, Int)
a -> (Int, Int)
k = \case
Comment Text
raw -> Text -> (Int, Int)
textDelta Text
raw
Space Int
n -> (Int
0, Int
n)
Line a
a -> a -> (Int, Int)
k a
a
lineDelta :: LineFeed -> (Int, Int)
lineDelta :: LineFeed -> (Int, Int)
lineDelta LineFeed
_ = (Int
1, Int
1)
textDelta :: Text -> (Int, Int)
textDelta :: Text -> (Int, Int)
textDelta = forall a. (a -> Char -> a) -> a -> Text -> a
Text.foldl' forall {a} {b}. (Num a, Num b) => (a, b) -> Char -> (a, b)
go (Int
0, Int
0)
where
go :: (a, b) -> Char -> (a, b)
go (!a
l, !b
c) = \case
Char
'\n' -> (a
l forall a. Num a => a -> a -> a
+ a
1, b
1)
Char
_ -> (a
l, b
c forall a. Num a => a -> a -> a
+ b
1)
applyDelta :: SourcePos -> (Int, Int) -> SourcePos
applyDelta :: SourcePos -> (Int, Int) -> SourcePos
applyDelta (SourcePos Int
l Int
c) = \case
(Int
0, Int
n) -> Int -> Int -> SourcePos
SourcePos Int
l (Int
c forall a. Num a => a -> a -> a
+ Int
n)
(Int
k, Int
d) -> Int -> Int -> SourcePos
SourcePos (Int
l forall a. Num a => a -> a -> a
+ Int
k) Int
d
sepLast :: Separated a -> a
sepLast :: forall a. Separated a -> a
sepLast (Separated a
hd []) = a
hd
sepLast (Separated a
_ [(SourceToken, a)]
tl) = forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [(SourceToken, a)]
tl
type TokenRange = (SourceToken, SourceToken)
toSourceRange :: TokenRange -> SourceRange
toSourceRange :: TokenRange -> SourceRange
toSourceRange (SourceToken
a, SourceToken
b) = SourceRange -> SourceRange -> SourceRange
widen (SourceToken -> SourceRange
srcRange SourceToken
a) (SourceToken -> SourceRange
srcRange SourceToken
b)
widen :: SourceRange -> SourceRange -> SourceRange
widen :: SourceRange -> SourceRange -> SourceRange
widen (SourceRange SourcePos
s1 SourcePos
_) (SourceRange SourcePos
_ SourcePos
e2) = SourcePos -> SourcePos -> SourceRange
SourceRange SourcePos
s1 SourcePos
e2
srcRange :: SourceToken -> SourceRange
srcRange :: SourceToken -> SourceRange
srcRange = TokenAnn -> SourceRange
tokRange forall b c a. (b -> c) -> (a -> b) -> a -> c
. SourceToken -> TokenAnn
tokAnn
nameRange :: Name a -> TokenRange
nameRange :: forall a. Name a -> TokenRange
nameRange Name a
a = (forall a. Name a -> SourceToken
nameTok Name a
a, forall a. Name a -> SourceToken
nameTok Name a
a)
qualRange :: QualifiedName a -> TokenRange
qualRange :: forall a. QualifiedName a -> TokenRange
qualRange QualifiedName a
a = (forall a. QualifiedName a -> SourceToken
qualTok QualifiedName a
a, forall a. QualifiedName a -> SourceToken
qualTok QualifiedName a
a)
wrappedRange :: Wrapped a -> TokenRange
wrappedRange :: forall a. Wrapped a -> TokenRange
wrappedRange Wrapped { SourceToken
wrpOpen :: forall a. Wrapped a -> SourceToken
wrpOpen :: SourceToken
wrpOpen, SourceToken
wrpClose :: forall a. Wrapped a -> SourceToken
wrpClose :: SourceToken
wrpClose } = (SourceToken
wrpOpen, SourceToken
wrpClose)
moduleRange :: Module a -> TokenRange
moduleRange :: forall a. Module a -> TokenRange
moduleRange Module { SourceToken
modKeyword :: forall a. Module a -> SourceToken
modKeyword :: SourceToken
modKeyword, SourceToken
modWhere :: forall a. Module a -> SourceToken
modWhere :: SourceToken
modWhere, [ImportDecl a]
modImports :: forall a. Module a -> [ImportDecl a]
modImports :: [ImportDecl a]
modImports, [Declaration a]
modDecls :: forall a. Module a -> [Declaration a]
modDecls :: [Declaration a]
modDecls } =
case ([ImportDecl a]
modImports, [Declaration a]
modDecls) of
([], []) -> (SourceToken
modKeyword, SourceToken
modWhere)
([ImportDecl a]
is, []) -> (SourceToken
modKeyword, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ImportDecl a -> TokenRange
importDeclRange forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [ImportDecl a]
is)
([ImportDecl a]
_, [Declaration a]
ds) -> (SourceToken
modKeyword, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Declaration a -> TokenRange
declRange forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [Declaration a]
ds)
exportRange :: Export a -> TokenRange
exportRange :: forall a. Export a -> TokenRange
exportRange = \case
ExportValue a
_ Name Ident
a -> forall a. Name a -> TokenRange
nameRange Name Ident
a
ExportOp a
_ Name (OpName 'ValueOpName)
a -> forall a. Name a -> TokenRange
nameRange Name (OpName 'ValueOpName)
a
ExportType a
_ Name (ProperName 'TypeName)
a Maybe (DataMembers a)
b
| Just DataMembers a
b' <- Maybe (DataMembers a)
b -> (forall a. Name a -> SourceToken
nameTok Name (ProperName 'TypeName)
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. DataMembers a -> TokenRange
dataMembersRange DataMembers a
b')
| Bool
otherwise -> forall a. Name a -> TokenRange
nameRange Name (ProperName 'TypeName)
a
ExportTypeOp a
_ SourceToken
a Name (OpName 'TypeOpName)
b -> (SourceToken
a, forall a. Name a -> SourceToken
nameTok Name (OpName 'TypeOpName)
b)
ExportClass a
_ SourceToken
a Name (ProperName 'ClassName)
b -> (SourceToken
a, forall a. Name a -> SourceToken
nameTok Name (ProperName 'ClassName)
b)
ExportModule a
_ SourceToken
a Name ModuleName
b -> (SourceToken
a, forall a. Name a -> SourceToken
nameTok Name ModuleName
b)
importDeclRange :: ImportDecl a -> TokenRange
importDeclRange :: forall a. ImportDecl a -> TokenRange
importDeclRange ImportDecl { SourceToken
impKeyword :: forall a. ImportDecl a -> SourceToken
impKeyword :: SourceToken
impKeyword, Name ModuleName
impModule :: forall a. ImportDecl a -> Name ModuleName
impModule :: Name ModuleName
impModule, Maybe (Maybe SourceToken, DelimitedNonEmpty (Import a))
impNames :: forall a.
ImportDecl a
-> Maybe (Maybe SourceToken, DelimitedNonEmpty (Import a))
impNames :: Maybe (Maybe SourceToken, DelimitedNonEmpty (Import a))
impNames, Maybe (SourceToken, Name ModuleName)
impQual :: forall a. ImportDecl a -> Maybe (SourceToken, Name ModuleName)
impQual :: Maybe (SourceToken, Name ModuleName)
impQual }
| Just (SourceToken
_, Name ModuleName
modName) <- Maybe (SourceToken, Name ModuleName)
impQual = (SourceToken
impKeyword, forall a. Name a -> SourceToken
nameTok Name ModuleName
modName)
| Just (Maybe SourceToken
_, DelimitedNonEmpty (Import a)
imports) <- Maybe (Maybe SourceToken, DelimitedNonEmpty (Import a))
impNames = (SourceToken
impKeyword, forall a. Wrapped a -> SourceToken
wrpClose DelimitedNonEmpty (Import a)
imports)
| Bool
otherwise = (SourceToken
impKeyword, forall a. Name a -> SourceToken
nameTok Name ModuleName
impModule)
importRange :: Import a -> TokenRange
importRange :: forall a. Import a -> TokenRange
importRange = \case
ImportValue a
_ Name Ident
a -> forall a. Name a -> TokenRange
nameRange Name Ident
a
ImportOp a
_ Name (OpName 'ValueOpName)
a -> forall a. Name a -> TokenRange
nameRange Name (OpName 'ValueOpName)
a
ImportType a
_ Name (ProperName 'TypeName)
a Maybe (DataMembers a)
b
| Just DataMembers a
b' <- Maybe (DataMembers a)
b -> (forall a. Name a -> SourceToken
nameTok Name (ProperName 'TypeName)
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. DataMembers a -> TokenRange
dataMembersRange DataMembers a
b')
| Bool
otherwise -> forall a. Name a -> TokenRange
nameRange Name (ProperName 'TypeName)
a
ImportTypeOp a
_ SourceToken
a Name (OpName 'TypeOpName)
b -> (SourceToken
a, forall a. Name a -> SourceToken
nameTok Name (OpName 'TypeOpName)
b)
ImportClass a
_ SourceToken
a Name (ProperName 'ClassName)
b -> (SourceToken
a, forall a. Name a -> SourceToken
nameTok Name (ProperName 'ClassName)
b)
dataMembersRange :: DataMembers a -> TokenRange
dataMembersRange :: forall a. DataMembers a -> TokenRange
dataMembersRange = \case
DataAll a
_ SourceToken
a -> (SourceToken
a, SourceToken
a)
DataEnumerated a
_ (Wrapped SourceToken
a Maybe (Separated (Name (ProperName 'ConstructorName)))
_ SourceToken
b) -> (SourceToken
a, SourceToken
b)
declRange :: Declaration a -> TokenRange
declRange :: forall a. Declaration a -> TokenRange
declRange = \case
DeclData a
_ DataHead a
hd Maybe (SourceToken, Separated (DataCtor a))
ctors
| Just (SourceToken
_, Separated (DataCtor a)
cs) <- Maybe (SourceToken, Separated (DataCtor a))
ctors -> (forall a b. (a, b) -> a
fst TokenRange
start, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. DataCtor a -> TokenRange
dataCtorRange forall a b. (a -> b) -> a -> b
$ forall a. Separated a -> a
sepLast Separated (DataCtor a)
cs)
| Bool
otherwise -> TokenRange
start
where start :: TokenRange
start = forall a. DataHead a -> TokenRange
dataHeadRange DataHead a
hd
DeclType a
_ DataHead a
a SourceToken
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. DataHead a -> TokenRange
dataHeadRange DataHead a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
DeclNewtype a
_ DataHead a
a SourceToken
_ Name (ProperName 'ConstructorName)
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. DataHead a -> TokenRange
dataHeadRange DataHead a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
DeclClass a
_ ClassHead a
hd Maybe (SourceToken, NonEmpty (Labeled (Name Ident) (Type a)))
body
| Just (SourceToken
_, NonEmpty (Labeled (Name Ident) (Type a))
ts) <- Maybe (SourceToken, NonEmpty (Labeled (Name Ident) (Type a)))
body -> (forall a b. (a, b) -> a
fst TokenRange
start, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Type a -> TokenRange
typeRange forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. Labeled a b -> b
lblValue forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (Labeled (Name Ident) (Type a))
ts)
| Bool
otherwise -> TokenRange
start
where start :: TokenRange
start = forall a. ClassHead a -> TokenRange
classHeadRange ClassHead a
hd
DeclInstanceChain a
_ Separated (Instance a)
a -> (forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Instance a -> TokenRange
instanceRange forall a b. (a -> b) -> a -> b
$ forall a. Separated a -> a
sepHead Separated (Instance a)
a, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Instance a -> TokenRange
instanceRange forall a b. (a -> b) -> a -> b
$ forall a. Separated a -> a
sepLast Separated (Instance a)
a)
DeclDerive a
_ SourceToken
a Maybe SourceToken
_ InstanceHead a
b -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. InstanceHead a -> TokenRange
instanceHeadRange InstanceHead a
b)
DeclKindSignature a
_ SourceToken
a (Labeled Name (ProperName 'TypeName)
_ SourceToken
_ Type a
b) -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
DeclSignature a
_ (Labeled Name Ident
a SourceToken
_ Type a
b) -> (forall a. Name a -> SourceToken
nameTok Name Ident
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
DeclValue a
_ ValueBindingFields a
a -> forall a. ValueBindingFields a -> TokenRange
valueBindingFieldsRange ValueBindingFields a
a
DeclFixity a
_ (FixityFields (SourceToken, Fixity)
a (SourceToken, Integer)
_ (FixityValue QualifiedName (Either Ident (ProperName 'ConstructorName))
_ SourceToken
_ Name (OpName 'ValueOpName)
b)) -> (forall a b. (a, b) -> a
fst (SourceToken, Fixity)
a, forall a. Name a -> SourceToken
nameTok Name (OpName 'ValueOpName)
b)
DeclFixity a
_ (FixityFields (SourceToken, Fixity)
a (SourceToken, Integer)
_ (FixityType SourceToken
_ QualifiedName (ProperName 'TypeName)
_ SourceToken
_ Name (OpName 'TypeOpName)
b)) -> (forall a b. (a, b) -> a
fst (SourceToken, Fixity)
a, forall a. Name a -> SourceToken
nameTok Name (OpName 'TypeOpName)
b)
DeclForeign a
_ SourceToken
a SourceToken
_ Foreign a
b -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Foreign a -> TokenRange
foreignRange Foreign a
b)
DeclRole a
_ SourceToken
a SourceToken
_ Name (ProperName 'TypeName)
_ NonEmpty Role
b -> (SourceToken
a, Role -> SourceToken
roleTok forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty Role
b)
dataHeadRange :: DataHead a -> TokenRange
dataHeadRange :: forall a. DataHead a -> TokenRange
dataHeadRange (DataHead SourceToken
kw Name (ProperName 'TypeName)
name [TypeVarBinding a]
vars)
| [] <- [TypeVarBinding a]
vars = (SourceToken
kw, forall a. Name a -> SourceToken
nameTok Name (ProperName 'TypeName)
name)
| Bool
otherwise = (SourceToken
kw, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TypeVarBinding a -> TokenRange
typeVarBindingRange forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [TypeVarBinding a]
vars)
dataCtorRange :: DataCtor a -> TokenRange
dataCtorRange :: forall a. DataCtor a -> TokenRange
dataCtorRange (DataCtor a
_ Name (ProperName 'ConstructorName)
name [Type a]
fields)
| [] <- [Type a]
fields = forall a. Name a -> TokenRange
nameRange Name (ProperName 'ConstructorName)
name
| Bool
otherwise = (forall a. Name a -> SourceToken
nameTok Name (ProperName 'ConstructorName)
name, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Type a -> TokenRange
typeRange forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [Type a]
fields)
classHeadRange :: ClassHead a -> TokenRange
classHeadRange :: forall a. ClassHead a -> TokenRange
classHeadRange (ClassHead SourceToken
kw Maybe (OneOrDelimited (Constraint a), SourceToken)
_ Name (ProperName 'ClassName)
name [TypeVarBinding a]
vars Maybe (SourceToken, Separated ClassFundep)
fdeps)
| Just (SourceToken
_, Separated ClassFundep
fs) <- Maybe (SourceToken, Separated ClassFundep)
fdeps = (SourceToken
kw, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. ClassFundep -> TokenRange
classFundepRange forall a b. (a -> b) -> a -> b
$ forall a. Separated a -> a
sepLast Separated ClassFundep
fs)
| [] <- [TypeVarBinding a]
vars = (SourceToken
kw, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Name a -> TokenRange
nameRange Name (ProperName 'ClassName)
name)
| Bool
otherwise = (SourceToken
kw, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. TypeVarBinding a -> TokenRange
typeVarBindingRange forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [TypeVarBinding a]
vars)
classFundepRange :: ClassFundep -> TokenRange
classFundepRange :: ClassFundep -> TokenRange
classFundepRange = \case
FundepDetermined SourceToken
arr NonEmpty (Name Ident)
bs -> (SourceToken
arr, forall a. Name a -> SourceToken
nameTok forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (Name Ident)
bs)
FundepDetermines NonEmpty (Name Ident)
as SourceToken
_ NonEmpty (Name Ident)
bs -> (forall a. Name a -> SourceToken
nameTok forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.head NonEmpty (Name Ident)
as, forall a. Name a -> SourceToken
nameTok forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (Name Ident)
bs)
instanceRange :: Instance a -> TokenRange
instanceRange :: forall a. Instance a -> TokenRange
instanceRange (Instance InstanceHead a
hd Maybe (SourceToken, NonEmpty (InstanceBinding a))
bd)
| Just (SourceToken
_, NonEmpty (InstanceBinding a)
ts) <- Maybe (SourceToken, NonEmpty (InstanceBinding a))
bd = (forall a b. (a, b) -> a
fst TokenRange
start, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. InstanceBinding a -> TokenRange
instanceBindingRange forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (InstanceBinding a)
ts)
| Bool
otherwise = TokenRange
start
where start :: TokenRange
start = forall a. InstanceHead a -> TokenRange
instanceHeadRange InstanceHead a
hd
instanceHeadRange :: InstanceHead a -> TokenRange
instanceHeadRange :: forall a. InstanceHead a -> TokenRange
instanceHeadRange (InstanceHead SourceToken
kw Maybe (Name Ident, SourceToken)
_ Maybe (OneOrDelimited (Constraint a), SourceToken)
_ QualifiedName (ProperName 'ClassName)
cls [Type a]
types)
| [] <- [Type a]
types = (SourceToken
kw, forall a. QualifiedName a -> SourceToken
qualTok QualifiedName (ProperName 'ClassName)
cls)
| Bool
otherwise = (SourceToken
kw, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Type a -> TokenRange
typeRange forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [Type a]
types)
instanceBindingRange :: InstanceBinding a -> TokenRange
instanceBindingRange :: forall a. InstanceBinding a -> TokenRange
instanceBindingRange = \case
InstanceBindingSignature a
_ (Labeled Name Ident
a SourceToken
_ Type a
b) -> (forall a. Name a -> SourceToken
nameTok Name Ident
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
InstanceBindingName a
_ ValueBindingFields a
a -> forall a. ValueBindingFields a -> TokenRange
valueBindingFieldsRange ValueBindingFields a
a
foreignRange :: Foreign a -> TokenRange
foreignRange :: forall a. Foreign a -> TokenRange
foreignRange = \case
ForeignValue (Labeled Name Ident
a SourceToken
_ Type a
b) -> (forall a. Name a -> SourceToken
nameTok Name Ident
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
ForeignData SourceToken
a (Labeled Name (ProperName 'TypeName)
_ SourceToken
_ Type a
b) -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
ForeignKind SourceToken
a Name (ProperName 'TypeName)
b -> (SourceToken
a, forall a. Name a -> SourceToken
nameTok Name (ProperName 'TypeName)
b)
valueBindingFieldsRange :: ValueBindingFields a -> TokenRange
valueBindingFieldsRange :: forall a. ValueBindingFields a -> TokenRange
valueBindingFieldsRange (ValueBindingFields Name Ident
a [Binder a]
_ Guarded a
b) = (forall a. Name a -> SourceToken
nameTok Name Ident
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Guarded a -> TokenRange
guardedRange Guarded a
b)
guardedRange :: Guarded a -> TokenRange
guardedRange :: forall a. Guarded a -> TokenRange
guardedRange = \case
Unconditional SourceToken
a Where a
b -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Where a -> TokenRange
whereRange Where a
b)
Guarded NonEmpty (GuardedExpr a)
as -> (forall a b. (a, b) -> a
fst forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. GuardedExpr a -> TokenRange
guardedExprRange forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.head NonEmpty (GuardedExpr a)
as, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. GuardedExpr a -> TokenRange
guardedExprRange forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (GuardedExpr a)
as)
guardedExprRange :: GuardedExpr a -> TokenRange
guardedExprRange :: forall a. GuardedExpr a -> TokenRange
guardedExprRange (GuardedExpr SourceToken
a Separated (PatternGuard a)
_ SourceToken
_ Where a
b) = (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Where a -> TokenRange
whereRange Where a
b)
whereRange :: Where a -> TokenRange
whereRange :: forall a. Where a -> TokenRange
whereRange (Where Expr a
a Maybe (SourceToken, NonEmpty (LetBinding a))
bs)
| Just (SourceToken
_, NonEmpty (LetBinding a)
ls) <- Maybe (SourceToken, NonEmpty (LetBinding a))
bs = (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
a, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. LetBinding a -> TokenRange
letBindingRange forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (LetBinding a)
ls)
| Bool
otherwise = forall a. Expr a -> TokenRange
exprRange Expr a
a
typeRange :: Type a -> TokenRange
typeRange :: forall a. Type a -> TokenRange
typeRange = \case
TypeVar a
_ Name Ident
a -> forall a. Name a -> TokenRange
nameRange Name Ident
a
TypeConstructor a
_ QualifiedName (ProperName 'TypeName)
a -> forall a. QualifiedName a -> TokenRange
qualRange QualifiedName (ProperName 'TypeName)
a
TypeWildcard a
_ SourceToken
a -> (SourceToken
a, SourceToken
a)
TypeHole a
_ Name Ident
a -> forall a. Name a -> TokenRange
nameRange Name Ident
a
TypeString a
_ SourceToken
a PSString
_ -> (SourceToken
a, SourceToken
a)
TypeInt a
_ Maybe SourceToken
a SourceToken
b Integer
_ -> (forall a. a -> Maybe a -> a
fromMaybe SourceToken
b Maybe SourceToken
a, SourceToken
b)
TypeRow a
_ Wrapped (Row a)
a -> forall a. Wrapped a -> TokenRange
wrappedRange Wrapped (Row a)
a
TypeRecord a
_ Wrapped (Row a)
a -> forall a. Wrapped a -> TokenRange
wrappedRange Wrapped (Row a)
a
TypeForall a
_ SourceToken
a NonEmpty (TypeVarBinding a)
_ SourceToken
_ Type a
b -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
TypeKinded a
_ Type a
a SourceToken
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
TypeApp a
_ Type a
a Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
TypeOp a
_ Type a
a QualifiedName (OpName 'TypeOpName)
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
TypeOpName a
_ QualifiedName (OpName 'TypeOpName)
a -> forall a. QualifiedName a -> TokenRange
qualRange QualifiedName (OpName 'TypeOpName)
a
TypeArr a
_ Type a
a SourceToken
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
TypeArrName a
_ SourceToken
a -> (SourceToken
a, SourceToken
a)
TypeConstrained a
_ Constraint a
a SourceToken
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Constraint a -> TokenRange
constraintRange Constraint a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
TypeParens a
_ Wrapped (Type a)
a -> forall a. Wrapped a -> TokenRange
wrappedRange Wrapped (Type a)
a
TypeUnaryRow a
_ SourceToken
a Type a
b -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
constraintRange :: Constraint a -> TokenRange
constraintRange :: forall a. Constraint a -> TokenRange
constraintRange = \case
Constraint a
_ QualifiedName (ProperName 'ClassName)
name [Type a]
args
| [] <- [Type a]
args -> forall a. QualifiedName a -> TokenRange
qualRange QualifiedName (ProperName 'ClassName)
name
| Bool
otherwise -> (forall a. QualifiedName a -> SourceToken
qualTok QualifiedName (ProperName 'ClassName)
name, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Type a -> TokenRange
typeRange forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [Type a]
args)
ConstraintParens a
_ Wrapped (Constraint a)
wrp -> forall a. Wrapped a -> TokenRange
wrappedRange Wrapped (Constraint a)
wrp
typeVarBindingRange :: TypeVarBinding a -> TokenRange
typeVarBindingRange :: forall a. TypeVarBinding a -> TokenRange
typeVarBindingRange = \case
TypeVarKinded Wrapped (Labeled (Maybe SourceToken, Name Ident) (Type a))
a -> forall a. Wrapped a -> TokenRange
wrappedRange Wrapped (Labeled (Maybe SourceToken, Name Ident) (Type a))
a
TypeVarName (Maybe SourceToken
atSign, Name Ident
a) -> (forall a. a -> Maybe a -> a
fromMaybe (forall a. Name a -> SourceToken
nameTok Name Ident
a) Maybe SourceToken
atSign, forall a. Name a -> SourceToken
nameTok Name Ident
a)
exprRange :: Expr a -> TokenRange
exprRange :: forall a. Expr a -> TokenRange
exprRange = \case
ExprHole a
_ Name Ident
a -> forall a. Name a -> TokenRange
nameRange Name Ident
a
ExprSection a
_ SourceToken
a -> (SourceToken
a, SourceToken
a)
ExprIdent a
_ QualifiedName Ident
a -> forall a. QualifiedName a -> TokenRange
qualRange QualifiedName Ident
a
ExprConstructor a
_ QualifiedName (ProperName 'ConstructorName)
a -> forall a. QualifiedName a -> TokenRange
qualRange QualifiedName (ProperName 'ConstructorName)
a
ExprBoolean a
_ SourceToken
a Bool
_ -> (SourceToken
a, SourceToken
a)
ExprChar a
_ SourceToken
a Char
_ -> (SourceToken
a, SourceToken
a)
ExprString a
_ SourceToken
a PSString
_ -> (SourceToken
a, SourceToken
a)
ExprNumber a
_ SourceToken
a Either Integer Double
_ -> (SourceToken
a, SourceToken
a)
ExprArray a
_ Delimited (Expr a)
a -> forall a. Wrapped a -> TokenRange
wrappedRange Delimited (Expr a)
a
ExprRecord a
_ Delimited (RecordLabeled (Expr a))
a -> forall a. Wrapped a -> TokenRange
wrappedRange Delimited (RecordLabeled (Expr a))
a
ExprParens a
_ Wrapped (Expr a)
a -> forall a. Wrapped a -> TokenRange
wrappedRange Wrapped (Expr a)
a
ExprTyped a
_ Expr a
a SourceToken
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
ExprInfix a
_ Expr a
a Wrapped (Expr a)
_ Expr a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
ExprOp a
_ Expr a
a QualifiedName (OpName 'ValueOpName)
_ Expr a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
ExprOpName a
_ QualifiedName (OpName 'ValueOpName)
a -> forall a. QualifiedName a -> TokenRange
qualRange QualifiedName (OpName 'ValueOpName)
a
ExprNegate a
_ SourceToken
a Expr a
b -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
ExprRecordAccessor a
_ (RecordAccessor Expr a
a SourceToken
_ Separated Label
b) -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
a, Label -> SourceToken
lblTok forall a b. (a -> b) -> a -> b
$ forall a. Separated a -> a
sepLast Separated Label
b)
ExprRecordUpdate a
_ Expr a
a DelimitedNonEmpty (RecordUpdate a)
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Wrapped a -> TokenRange
wrappedRange DelimitedNonEmpty (RecordUpdate a)
b)
ExprApp a
_ Expr a
a Expr a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
ExprVisibleTypeApp a
_ Expr a
a SourceToken
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
ExprLambda a
_ (Lambda SourceToken
a NonEmpty (Binder a)
_ SourceToken
_ Expr a
b) -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
ExprIf a
_ (IfThenElse SourceToken
a Expr a
_ SourceToken
_ Expr a
_ SourceToken
_ Expr a
b) -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
ExprCase a
_ (CaseOf SourceToken
a Separated (Expr a)
_ SourceToken
_ NonEmpty (Separated (Binder a), Guarded a)
c) -> (SourceToken
a, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Guarded a -> TokenRange
guardedRange forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (Separated (Binder a), Guarded a)
c)
ExprLet a
_ (LetIn SourceToken
a NonEmpty (LetBinding a)
_ SourceToken
_ Expr a
b) -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
ExprDo a
_ (DoBlock SourceToken
a NonEmpty (DoStatement a)
b) -> (SourceToken
a, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. DoStatement a -> TokenRange
doStatementRange forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (DoStatement a)
b)
ExprAdo a
_ (AdoBlock SourceToken
a [DoStatement a]
_ SourceToken
_ Expr a
b) -> (SourceToken
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
letBindingRange :: LetBinding a -> TokenRange
letBindingRange :: forall a. LetBinding a -> TokenRange
letBindingRange = \case
LetBindingSignature a
_ (Labeled Name Ident
a SourceToken
_ Type a
b) -> (forall a. Name a -> SourceToken
nameTok Name Ident
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
LetBindingName a
_ ValueBindingFields a
a -> forall a. ValueBindingFields a -> TokenRange
valueBindingFieldsRange ValueBindingFields a
a
LetBindingPattern a
_ Binder a
a SourceToken
_ Where a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Binder a -> TokenRange
binderRange Binder a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Where a -> TokenRange
whereRange Where a
b)
doStatementRange :: DoStatement a -> TokenRange
doStatementRange :: forall a. DoStatement a -> TokenRange
doStatementRange = \case
DoLet SourceToken
a NonEmpty (LetBinding a)
bs -> (SourceToken
a, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. LetBinding a -> TokenRange
letBindingRange forall a b. (a -> b) -> a -> b
$ forall a. NonEmpty a -> a
NE.last NonEmpty (LetBinding a)
bs)
DoDiscard Expr a
a -> forall a. Expr a -> TokenRange
exprRange Expr a
a
DoBind Binder a
a SourceToken
_ Expr a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Binder a -> TokenRange
binderRange Binder a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
binderRange :: Binder a -> TokenRange
binderRange :: forall a. Binder a -> TokenRange
binderRange = \case
BinderWildcard a
_ SourceToken
a -> (SourceToken
a, SourceToken
a)
BinderVar a
_ Name Ident
a -> forall a. Name a -> TokenRange
nameRange Name Ident
a
BinderNamed a
_ Name Ident
a SourceToken
_ Binder a
b -> (forall a. Name a -> SourceToken
nameTok Name Ident
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Binder a -> TokenRange
binderRange Binder a
b)
BinderConstructor a
_ QualifiedName (ProperName 'ConstructorName)
a [Binder a]
bs
| [] <- [Binder a]
bs -> forall a. QualifiedName a -> TokenRange
qualRange QualifiedName (ProperName 'ConstructorName)
a
| Bool
otherwise -> (forall a. QualifiedName a -> SourceToken
qualTok QualifiedName (ProperName 'ConstructorName)
a, forall a b. (a, b) -> b
snd forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Binder a -> TokenRange
binderRange forall a b. (a -> b) -> a -> b
$ forall a. [a] -> a
last [Binder a]
bs)
BinderBoolean a
_ SourceToken
a Bool
_ -> (SourceToken
a, SourceToken
a)
BinderChar a
_ SourceToken
a Char
_ -> (SourceToken
a, SourceToken
a)
BinderString a
_ SourceToken
a PSString
_ -> (SourceToken
a, SourceToken
a)
BinderNumber a
_ Maybe SourceToken
a SourceToken
b Either Integer Double
_
| Just SourceToken
a' <- Maybe SourceToken
a -> (SourceToken
a', SourceToken
b)
| Bool
otherwise -> (SourceToken
b, SourceToken
b)
BinderArray a
_ Delimited (Binder a)
a -> forall a. Wrapped a -> TokenRange
wrappedRange Delimited (Binder a)
a
BinderRecord a
_ Delimited (RecordLabeled (Binder a))
a -> forall a. Wrapped a -> TokenRange
wrappedRange Delimited (RecordLabeled (Binder a))
a
BinderParens a
_ Wrapped (Binder a)
a -> forall a. Wrapped a -> TokenRange
wrappedRange Wrapped (Binder a)
a
BinderTyped a
_ Binder a
a SourceToken
_ Type a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Binder a -> TokenRange
binderRange Binder a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Type a -> TokenRange
typeRange Type a
b)
BinderOp a
_ Binder a
a QualifiedName (OpName 'ValueOpName)
_ Binder a
b -> (forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. Binder a -> TokenRange
binderRange Binder a
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Binder a -> TokenRange
binderRange Binder a
b)
recordUpdateRange :: RecordUpdate a -> TokenRange
recordUpdateRange :: forall a. RecordUpdate a -> TokenRange
recordUpdateRange = \case
RecordUpdateLeaf Label
a SourceToken
_ Expr a
b -> (Label -> SourceToken
lblTok Label
a, forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ forall a. Expr a -> TokenRange
exprRange Expr a
b)
RecordUpdateBranch Label
a (Wrapped SourceToken
_ Separated (RecordUpdate a)
_ SourceToken
b) -> (Label -> SourceToken
lblTok Label
a, SourceToken
b)