jsonnet-0.4.0.0: src/Language/Jsonnet/Parser/SrcSpan.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}
-- |
-- Module : Language.Jsonnet.Parser.SrcSpan
-- Copyright : (c) 2020-2021 Alexandre Moreno
-- SPDX-License-Identifier : BSD-3-Clause OR Apache-2.0
-- Maintainer : Alexandre Moreno <alexmorenocano@gmail.com>
-- Stability : experimental
-- Portability : non-portable
module Language.Jsonnet.Parser.SrcSpan where
import Data.Binary (Binary)
import Data.Data
import Data.Function (on)
import GHC.Generics (Generic)
import Text.Megaparsec.Pos (Pos, SourcePos (..))
import Unbound.Generics.LocallyNameless
import Unbound.Generics.LocallyNameless.TH
data SrcSpan = SrcSpan
{ spanBegin :: SourcePos,
spanEnd :: SourcePos
}
deriving
( Ord,
Eq,
Show,
Read,
Generic,
Typeable,
Data
)
$(makeClosedAlpha ''SrcSpan)
instance Binary SourcePos
instance Binary Pos
instance Binary SrcSpan
instance Subst b SourcePos => Subst b SrcSpan where
subst _ _ = id
substs _ = id
instance Semigroup SrcSpan where
s1 <> s2 = SrcSpan ((min `on` spanBegin) s1 s2) ((max `on` spanEnd) s1 s2)
class HasSrcSpan a where
srcSpan :: a -> SrcSpan
instance HasSrcSpan SrcSpan where
srcSpan = id