packages feed

jsonnet-0.3.0.1: src/Language/Jsonnet/Parser/SrcSpan.hs

{- |
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
-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}

module Language.Jsonnet.Parser.SrcSpan where

import Data.Data
import Data.Function (on)
import GHC.Generics (Generic)
import Text.Megaparsec.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 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