module Language.Jsonnet.Syntax.Annotated where
import Data.Fix
import Data.Functor.Sum
import Data.List.NonEmpty
import Data.Semigroup.Foldable
import Language.Jsonnet.Annotate
import Language.Jsonnet.Common
import Language.Jsonnet.Parser.SrcSpan
import Language.Jsonnet.Syntax
type Expr = Ann ExprF SrcSpan
type Expr' = Ann ExprF' SrcSpan
mkApply :: Expr' -> Args Expr' -> Expr'
mkApply :: Expr' -> Args Expr' -> Expr'
mkApply a :: Expr'
a@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann)) Args Expr'
args =
Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Product (Const SrcSpan) ExprF' Expr' -> Expr')
-> Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall a b. (a -> b) -> a -> b
$ ExprF' Expr' -> SrcSpan -> Product (Const SrcSpan) ExprF' Expr'
forall {a1} {g :: * -> *} {a2}.
g a2 -> a1 -> Product (Const a1) g a2
AnnF (ExprF Expr' -> ExprF' Expr'
forall {k} (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL (ExprF Expr' -> ExprF' Expr') -> ExprF Expr' -> ExprF' Expr'
forall a b. (a -> b) -> a -> b
$ Expr' -> Args Expr' -> ExprF Expr'
forall a. a -> Args a -> ExprF a
EApply Expr'
a Args Expr'
args) SrcSpan
ann
mkLookup :: Expr' -> Expr' -> Expr'
mkLookup :: Expr' -> Expr' -> Expr'
mkLookup a :: Expr'
a@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann1)) b :: Expr'
b@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann2)) =
Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Product (Const SrcSpan) ExprF' Expr' -> Expr')
-> Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall a b. (a -> b) -> a -> b
$ ExprF' Expr' -> SrcSpan -> Product (Const SrcSpan) ExprF' Expr'
forall {a1} {g :: * -> *} {a2}.
g a2 -> a1 -> Product (Const a1) g a2
AnnF (ExprF Expr' -> ExprF' Expr'
forall {k} (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL (ExprF Expr' -> ExprF' Expr') -> ExprF Expr' -> ExprF' Expr'
forall a b. (a -> b) -> a -> b
$ Expr' -> Expr' -> ExprF Expr'
forall a. a -> a -> ExprF a
ELookup Expr'
a Expr'
b) (SrcSpan
ann1 SrcSpan -> SrcSpan -> SrcSpan
forall a. Semigroup a => a -> a -> a
<> SrcSpan
ann2)
mkIndex :: Expr' -> Expr' -> Expr'
mkIndex :: Expr' -> Expr' -> Expr'
mkIndex a :: Expr'
a@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann1)) b :: Expr'
b@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann2)) =
Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Product (Const SrcSpan) ExprF' Expr' -> Expr')
-> Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall a b. (a -> b) -> a -> b
$ ExprF' Expr' -> SrcSpan -> Product (Const SrcSpan) ExprF' Expr'
forall {a1} {g :: * -> *} {a2}.
g a2 -> a1 -> Product (Const a1) g a2
AnnF (ExprF Expr' -> ExprF' Expr'
forall {k} (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL (ExprF Expr' -> ExprF' Expr') -> ExprF Expr' -> ExprF' Expr'
forall a b. (a -> b) -> a -> b
$ Expr' -> Expr' -> ExprF Expr'
forall a. a -> a -> ExprF a
EIndex Expr'
a Expr'
b) (SrcSpan
ann1 SrcSpan -> SrcSpan -> SrcSpan
forall a. Semigroup a => a -> a -> a
<> SrcSpan
ann2)
mkSlice :: Maybe Expr' -> Maybe Expr' -> Maybe Expr' -> Expr' -> Expr'
mkSlice :: Maybe Expr' -> Maybe Expr' -> Maybe Expr' -> Expr' -> Expr'
mkSlice Maybe Expr'
i Maybe Expr'
n Maybe Expr'
s e :: Expr'
e@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann1)) =
Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Product (Const SrcSpan) ExprF' Expr' -> Expr')
-> Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall a b. (a -> b) -> a -> b
$ ExprF' Expr' -> SrcSpan -> Product (Const SrcSpan) ExprF' Expr'
forall {a1} {g :: * -> *} {a2}.
g a2 -> a1 -> Product (Const a1) g a2
AnnF (ExprF Expr' -> ExprF' Expr'
forall {k} (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL (ExprF Expr' -> ExprF' Expr') -> ExprF Expr' -> ExprF' Expr'
forall a b. (a -> b) -> a -> b
$ Expr' -> Maybe Expr' -> Maybe Expr' -> Maybe Expr' -> ExprF Expr'
forall a. a -> Maybe a -> Maybe a -> Maybe a -> ExprF a
ESlice Expr'
e Maybe Expr'
i Maybe Expr'
n Maybe Expr'
s) SrcSpan
ann1
mkBinOp :: BinOp -> Expr' -> Expr' -> Expr'
mkBinOp :: BinOp -> Expr' -> Expr' -> Expr'
mkBinOp BinOp
op a :: Expr'
a@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann1)) b :: Expr'
b@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann2)) =
Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Product (Const SrcSpan) ExprF' Expr' -> Expr')
-> Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall a b. (a -> b) -> a -> b
$ ExprF' Expr' -> SrcSpan -> Product (Const SrcSpan) ExprF' Expr'
forall {a1} {g :: * -> *} {a2}.
g a2 -> a1 -> Product (Const a1) g a2
AnnF (ExprF Expr' -> ExprF' Expr'
forall {k} (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL (ExprF Expr' -> ExprF' Expr') -> ExprF Expr' -> ExprF' Expr'
forall a b. (a -> b) -> a -> b
$ BinOp -> Expr' -> Expr' -> ExprF Expr'
forall a. BinOp -> a -> a -> ExprF a
EBinOp BinOp
op Expr'
a Expr'
b) (SrcSpan
ann1 SrcSpan -> SrcSpan -> SrcSpan
forall a. Semigroup a => a -> a -> a
<> SrcSpan
ann2)
mkUnyOp :: UnyOp -> Expr' -> Expr'
mkUnyOp :: UnyOp -> Expr' -> Expr'
mkUnyOp UnyOp
op a :: Expr'
a@(Fix (AnnF ExprF' Expr'
_ SrcSpan
ann)) =
Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall (f :: * -> *). f (Fix f) -> Fix f
Fix (Product (Const SrcSpan) ExprF' Expr' -> Expr')
-> Product (Const SrcSpan) ExprF' Expr' -> Expr'
forall a b. (a -> b) -> a -> b
$ ExprF' Expr' -> SrcSpan -> Product (Const SrcSpan) ExprF' Expr'
forall {a1} {g :: * -> *} {a2}.
g a2 -> a1 -> Product (Const a1) g a2
AnnF (ExprF Expr' -> ExprF' Expr'
forall {k} (f :: k -> *) (g :: k -> *) (a :: k). f a -> Sum f g a
InL (ExprF Expr' -> ExprF' Expr') -> ExprF Expr' -> ExprF' Expr'
forall a b. (a -> b) -> a -> b
$ UnyOp -> Expr' -> ExprF Expr'
forall a. UnyOp -> a -> ExprF a
EUnyOp UnyOp
op Expr'
a) SrcSpan
ann