36 lines
1 KiB
Haskell
36 lines
1 KiB
Haskell
{-# LANGUAGE FlexibleContexts #-}
|
|
{-# LANGUAGE FlexibleInstances #-}
|
|
{-# LANGUAGE MultiParamTypeClasses #-}
|
|
|
|
module Nix.Context where
|
|
|
|
import Nix.Options
|
|
import Nix.Scope
|
|
import Nix.Frames
|
|
import Nix.Utils
|
|
import Nix.Expr.Types.Annotated ( SrcSpan
|
|
, nullSpan
|
|
)
|
|
|
|
data Context m t = Context
|
|
{ scopes :: Scopes m t
|
|
, source :: SrcSpan
|
|
, frames :: Frames
|
|
, options :: Options
|
|
}
|
|
|
|
instance Has (Context m t) (Scopes m t) where
|
|
hasLens f (Context x y z w) = (\x' -> Context x' y z w) <$> f x
|
|
|
|
instance Has (Context m t) SrcSpan where
|
|
hasLens f (Context x y z w) = (\y' -> Context x y' z w) <$> f y
|
|
|
|
instance Has (Context m t) Frames where
|
|
hasLens f (Context x y z w) = (\z' -> Context x y z' w) <$> f z
|
|
|
|
instance Has (Context m t) Options where
|
|
hasLens f (Context x y z w) = (\w' -> Context x y z w') <$> f w
|
|
|
|
newContext :: Options -> Context m t
|
|
newContext = Context emptyScopes nullSpan []
|