{-# LANGUAGE TemplateHaskell #-}
module Puppet.Parser.Lens
(
_Statements
, _ResDecl
, _ResDefaultDecl
, _ResOverrDecl
, _ResCollDecl
, _ConditionalDecl
, _ClassDecl
, _DefineDecl
, _NodeDecl
, _VarAssignDecl
, _MainFuncDecl
, _HigherOrderLambdaDecl
, _DepDecl
, _Equal
, _Different
, _Not
, _And
, _Or
, _LessThan
, _MoreThan
, _LessEqualThan
, _MoreEqualThan
, _RegexMatch
, _NotRegexMatch
, _Contains
, _Addition
, _Substraction
, _Division
, _Multiplication
, _Modulo
, _RightShift
, _LeftShift
, _Lookup
, _Negate
, _ConditionalValue
, _FunctionApplication
, _Terminal
) where
import XPrelude
import qualified Data.Vector as V
import Puppet.Parser.Types
makePrisms ''Expression
_ResDecl :: Prism' Statement ResDecl
_ResDecl =
prism ResourceDeclaration $ \x ->
case x of
ResourceDeclaration a -> Right a
_ -> Left x
_ResDefaultDecl :: Prism' Statement ResDefaultDecl
_ResDefaultDecl =
prism ResourceDefaultDeclaration $ \x ->
case x of
ResourceDefaultDeclaration a -> Right a
_ -> Left x
_ResOverrDecl :: Prism' Statement ResOverrideDecl
_ResOverrDecl =
prism ResourceOverrideDeclaration $ \x ->
case x of
ResourceOverrideDeclaration a -> Right a
_ -> Left x
_ResCollDecl :: Prism' Statement ResCollDecl
_ResCollDecl =
prism ResourceCollectionDeclaration $ \x ->
case x of
ResourceCollectionDeclaration a -> Right a
_ -> Left x
_ConditionalDecl :: Prism' Statement ConditionalDecl
_ConditionalDecl =
prism ConditionalDeclaration $ \x ->
case x of
ConditionalDeclaration a -> Right a
_ -> Left x
_ClassDecl :: Prism' Statement ClassDecl
_ClassDecl =
prism ClassDeclaration $ \x ->
case x of
ClassDeclaration a -> Right a
_ -> Left x
_DefineDecl :: Prism' Statement DefineDecl
_DefineDecl =
prism DefineDeclaration $ \x ->
case x of
DefineDeclaration a -> Right a
_ -> Left x
_NodeDecl :: Prism' Statement NodeDecl
_NodeDecl =
prism NodeDeclaration $ \x ->
case x of
NodeDeclaration a -> Right a
_ -> Left x
_VarAssignDecl :: Prism' Statement VarAssignDecl
_VarAssignDecl =
prism VarAssignmentDeclaration $ \x ->
case x of
VarAssignmentDeclaration a -> Right a
_ -> Left x
_MainFuncDecl :: Prism' Statement MainFuncDecl
_MainFuncDecl =
prism MainFunctionDeclaration $ \x ->
case x of
MainFunctionDeclaration a -> Right a
_ -> Left x
_HigherOrderLambdaDecl :: Prism' Statement HigherOrderLambdaDecl
_HigherOrderLambdaDecl =
prism HigherOrderLambdaDeclaration $ \x ->
case x of
HigherOrderLambdaDeclaration a -> Right a
_ -> Left x
_DepDecl :: Prism' Statement DepDecl
_DepDecl =
prism DependencyDeclaration $ \x ->
case x of
DependencyDeclaration a -> Right a
_ -> Left x
_TopContainer :: Prism' Statement (V.Vector Statement, Statement)
_TopContainer =
prism (uncurry TopContainer) $ \x ->
case x of
TopContainer vs s -> Right (vs, s)
_ -> Left x
_Statements :: Lens' Statement [Statement]
_Statements =
lens (V.toList . sget) (\s v -> sset s (V.fromList v))
where
sget :: Statement -> V.Vector Statement
sget (ClassDeclaration (ClassDecl _ _ _ s _)) = s
sget (DefineDeclaration (DefineDecl _ _ s _)) = s
sget (NodeDeclaration (NodeDecl _ s _ _)) = s
sget (TopContainer s _) = s
sget (HigherOrderLambdaDeclaration (HigherOrderLambdaDecl (HOLambdaCall _ _ _ s _) _)) = s
sget _ = V.empty
sset :: Statement -> V.Vector Statement -> Statement
sset (ClassDeclaration (ClassDecl n args inh _ p)) s = ClassDeclaration (ClassDecl n args inh s p)
sset (NodeDeclaration (NodeDecl ns _ nd' p)) s = NodeDeclaration (NodeDecl ns s nd' p)
sset (DefineDeclaration (DefineDecl n args _ p)) s = DefineDeclaration (DefineDecl n args s p)
sset (TopContainer _ p) s = TopContainer s p
sset (HigherOrderLambdaDeclaration (HigherOrderLambdaDecl (HOLambdaCall t e pr _ e2) p)) s =
HigherOrderLambdaDeclaration (HigherOrderLambdaDecl (HOLambdaCall t e pr s e2) p)
sset x _ = x