{-# LANGUAGE TypeFamilies #-}
-- | The logic to render C++ code is contained in this module
module Drasil.GOOL.LanguageRenderer.CppRenderer (
  -- * C++ Code Configuration -- defines syntax of all C++ code
  CppSrcCode(..), CppHdrCode(..), CppCode(..), unCPPC, cppName, cppVersion
) where

import Drasil.FileHandling.Legacy (blank, indent, indentList)

import Drasil.Shared.CodeType (CodeType(..))
import Drasil.Shared.InterfaceCommon (UnRepr(..), Label, Body, Block, Variable,
  Value, NamedArgs, BodySym(..), oneLiner, BlockSym(..), TypeSym(..),
  TypeElim(..), getTypeString, VariableSym(..), VisibilitySym(..),
  VariableElim(..), ValueSym(..), Argument(..), Literal(..), MathConstant(..),
  VariableValue(..), CommandLineArgs(..), NumericExpression(..),
  BooleanExpression(..), Comparison(..), ValueExpression(..), funcApp,
  extFuncApp, IndexTranslator(..), Reference(..), Array(..), List(..),
  ListStatement(..), Set(..), InternalList(..), EmptyStatement(..),
  MultiStatement(..), ValueStatement(..), AssignStatement(..), DeclStatement(..),
  PrintConsole(..), ReadConsole(..), FileHandling(..), PrintFile(..),
  ReadFile(..), StringStatement(..), FuncAppStatement(..), BinderSym(..),
  CommentStatement(..), ControlStatement(..), ScopeSym(..), ParameterSym(..),
  MethodSym(..), convScope, BinderElim(..), (&=))
import Drasil.GOOL.InterfaceGOOL (CSStateVar, OOProg, Class, ProgramSym(..),
  FileSym(..), ModuleSym(..), ClassSym(..), OOTypeSym(..), OOVariableSym(..),
  SelfSym(..), AttachmentSym(..), StateVarSym(..), OOValueExpression(..),
  selfMethodCall, InternalValueExp(..), objMethodCall, OOFunctionSym(..), ($.),
  GetSet(..), OODeclStatement(..), OOFuncAppStatement(..), ObserverPattern(..),
  StrategyPattern(..), OOMethodSym(..), convTypeOO)
import Drasil.GOOL.Renderers (renderType, renderParam,)
import Drasil.Shared.RendererClassesCommon (CommonRenderSym, ImportSym(..),
  RenderBody(..), BodyElim, RenderBlock(..), BlockElim, RenderType(..),
  UnaryOpSym(..), BinaryOpSym(..), OpElim(uOpPrec, bOpPrec), RenderVariable(..),
  InternalVarElim(variableBind), InternalBinderElim(..), RenderValue(..),
  ValueElim(valuePrec, valueInt), InternalListFunc(..), RenderFunction(..),
  FunctionElim(functionType), InternalAssignStmt(..), InternalIOStmt(..),
  InternalControlStmt(..), RenderStatement(..), StatementElim(statementTerm),
  RenderVisibility(..), VisibilityElim, MethodTypeSym(..), RenderParam(..),
  ParamElim(parameterName, parameterType), RenderMethod(..), MethodElim,
  BlockCommentSym(..), BlockCommentElim, ScopeElim(..))
import qualified Drasil.Shared.RendererClassesCommon as RC (import', body, block,
  uOp, bOp, variable, value, function, statement, visibility, parameter,
  method, blockComment', InternalBinderElim(binderElim), RenderValue(call))
import Drasil.GOOL.RendererClassesOO (OORenderSym, RenderFile(..),
  PermElim(binding), InternalGetSet(..), OOMethodTypeSym(..),
  OORenderMethod(..), StateVarElim, ParentSpec, RenderClass(..), ClassElim,
  RenderMod(..), ModuleElim)
import qualified Drasil.GOOL.RendererClassesOO as RC (perm, stateVar, class',
  module')

import Drasil.Shared.LanguageRenderer (addExt, classDec, blockCmtStart,
  blockCmtEnd, docCmtStart, bodyStart, bodyEnd, endStatement, commentStart,
  returnLabel, elseIfLabel, tryLabel, catchLabel, throwLabel, array', constDec',
  listSep', argc, argv, constDec, mainFunc, containing, functionDox, valueList,
  parameterList, appendToBody, surroundBody, getterName, setterName)
import qualified Drasil.Shared.LanguageRenderer as R (this', this, sqrt, fabs,
  log10, log, exp, sin, cos, tan, asin, acos, atan, floor, ceil, pow, multiStmt,
  body, stateVar, constVar, cast, castObj, classLevel, instanceLevel,
  break, continue, private, public, blockCmt, docCmt, addComments, commentedMod,
  commentedItem)
import Drasil.Shared.LanguageRenderer.Constructors (mkStmt, mkStmtNoEnd,
  mkStateVal, mkVal, mkStateVar, mkVar, typeFromData, VSOp, mkOp, unOpPrec,
  powerPrec, unExpr, unExpr', typeUnExpr, binExpr, binExpr', typeBinExpr)
import qualified Drasil.Shared.LanguageRenderer.LanguagePolymorphic as G (
  multiBody, block, multiBlock, obj, negateOp, csc, sec, cot, equalOp,
  notEqualOp, greaterOp, greaterEqualOp, lessOp, lessEqualOp, plusOp, minusOp,
  multOp, divideOp, moduloOp, var, classVar, instanceVarAccess, arrayElem,
  litChar, litDouble, litInt, litString, valueOf, arg, objAccess, objMethodCall,
  funcAppMixedArgs, newObjMixedArgs, lambda, func, get, set, listAccess, getFunc,
  setFunc, stmt, loopStmt, emptyStmt, assign, subAssign, objDecNew, print,
  closeFile, returnStmt, valStmt, comment, throw, ifCond, tryCatch, construct,
  param, method, getMethod, setMethod, function, buildClass, implementingClass,
  commentedClass, modFromData, fileDoc, fileFromData, defaultOptSpace, local)
import Drasil.Shared.LanguageRenderer.LanguagePolymorphic (classVarAccessCheck)
import qualified Drasil.Shared.LanguageRenderer.CommonPseudoOO as CP (int,
  constructor, doxFunc, doxClass, doxMod, buildModule, litArray,
  call', listAccessFunc', containsInt, string, docInOutFunc, extraClass,
  intToIndex, indexToInt, global, setMethodCall, destructorError)
import qualified Drasil.GOOL.LanguageRenderer.CommonGOOL as CG (constDecDef,
  listAppend, innerType)
import qualified Drasil.Shared.LanguageRenderer.CLike as C (charRender, float,
  double, char, listType, void, notOp, andOp, orOp, litTrue, litFalse, litFloat,
  inlineIf, libFuncAppMixedArgs, libNewObjMixedArgs, listSize, increment,
  increment1, decrement1, varDec, setType, varDecDef, listDec, extObjDecNew,
  switch, for, while, multiAssignError, multiReturnError, multiTypeError)
import qualified Drasil.Shared.LanguageRenderer.Macros as M (runStrategy,
  listSlice, stringListVals, stringListLists, forRange, notifyObservers)
import Drasil.Shared.AST (Terminator(..), VisibilityTag(..), AttachmentTag(..),
  onAttachment, AttachmentData(..), ad, FileType(..), FileData(..), fileD,
  FuncData(..), fd, ModData(..), md, updateMod, OpData(..), ParamData(..), pd,
  ProgData(..), progD, emptyProg, StateVarData(..), svd, TypeData(..),
  ValData(..), vd, VarData(..), vard, BinderD(..), bindFormD, ScopeData,
  Statement)
import Drasil.Shared.Classes (Pair(..))
import Drasil.Shared.Helpers (angles, doubleQuotedText, hicat, vibcat,
  emptyIfEmpty, toCode, toState, onCodeValue, onStateValue, on2CodeValues,
  on2StateValues, on3CodeValues, on3StateValues, onCodeList, onStateList,
  on2StateLists, on2StateWrapped)
import Drasil.Shared.State (CS, MS, VS, lensGStoFS, lensFStoCS, lensFStoMS,
  lensCStoMS, lensCStoVS, lensCStoFS, lensMStoVS, lensVStoMS, modifyReturn,
  revFiles, addLangImport, addLangImportVS, getLangImports, getLibImports,
  addModuleImportVS, getModuleImports, addHeaderLangImport, getHeaderLangImports,
  addHeaderModImport, getHeaderLibImports, getHeaderModImports, addDefine,
  getDefines, addHeaderDefine, getHeaderDefines, addUsing, getUsing,
  addHeaderUsing, getHeaderUsing, setFileType, getModuleName, setModuleName,
  setClassName, getClassName, setCurrMain, getCurrMain, getClassMap,
  setVisibility, getVisibility, setCurrMainFunc, getCurrMainFunc, useVarName,
  setVarScope, getVarScope)

import Prelude hiding (break,print,(<>),sin,cos,tan,floor,pi,log,exp,mod,max)
import qualified Prelude as P ((<>))
import Control.Lens.Zoom (zoom)
import Control.Monad (join)
import Control.Monad.State (State, modify)
import Data.Composition ((.:))
import Data.List (sort)
import qualified Data.Map as Map (lookup)
import Text.PrettyPrint.HughesPJ (Doc, text, (<>), (<+>), ($$), hcat, braces,
  parens, empty, equals, vcat, lbrace, rbrace, colon, isEmpty, quotes, semi, render)

import qualified Drasil.Shared.LanguageRenderer.Common as CS

cppHdrExt, cppSrcExt :: String
cppHdrExt :: String
cppHdrExt = String
"hpp"
cppSrcExt :: String
cppSrcExt = String
"cpp"

data CppCode x y a = CPPC {forall {k} (x :: k -> *) (y :: k -> *) (a :: k).
CppCode x y a -> x a
src :: x a, forall {k} (x :: k -> *) (y :: k -> *) (a :: k).
CppCode x y a -> y a
hdr :: y a}

instance Pair CppCode where
  pfst :: forall (x :: k -> *) (y :: k -> *) (a :: k). CppCode x y a -> x a
pfst (CPPC x a
xa y a
_) = x a
xa
  psnd :: forall (x :: k -> *) (y :: k -> *) (b :: k). CppCode x y b -> y b
psnd (CPPC x b
_ y b
yb) = y b
yb
  pair :: forall (x :: k -> *) (a :: k) (y :: k -> *).
x a -> y a -> CppCode x y a
pair = x a -> y a -> CppCode x y a
forall {k} (x :: k -> *) (y :: k -> *) (a :: k).
x a -> y a -> CppCode x y a
CPPC

unCPPC :: CppCode CppSrcCode CppHdrCode a -> a
unCPPC :: forall a. CppCode CppSrcCode CppHdrCode a -> a
unCPPC (CPPC (CPPSC a
a) CppHdrCode a
_) = a
a

hdrToSrc :: CppHdrCode a -> CppSrcCode a
hdrToSrc :: forall a. CppHdrCode a -> CppSrcCode a
hdrToSrc (CPPHC a
a) = a -> CppSrcCode a
forall a. a -> CppSrcCode a
CPPSC a
a

instance (Pair p) => OOProg (p CppSrcCode CppHdrCode) ProgData FileData ModData Class StateVarData MethodData AttachmentData (Doc, VisibilityTag) ParamData Body Block Statement Variable ScopeData Value BinderD TypeData

instance (Pair p) => ProgramSym (p CppSrcCode CppHdrCode) ProgData FileData where
  prog :: String
-> String
-> [FS (p CppSrcCode CppHdrCode FileData)]
-> GSProgram (p CppSrcCode CppHdrCode) ProgData
prog String
n String
st [FS (p CppSrcCode CppHdrCode FileData)]
mods = do
    m <-  (FS (p CppSrcCode CppHdrCode FileData)
 -> StateT GOOLState Identity (p CppSrcCode CppHdrCode FileData))
-> [FS (p CppSrcCode CppHdrCode FileData)]
-> StateT GOOLState Identity [p CppSrcCode CppHdrCode FileData]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
  (Zoomed
     (StateT FileState Identity) (p CppSrcCode CppHdrCode FileData))
  GOOLState
  FileState
-> FS (p CppSrcCode CppHdrCode FileData)
-> StateT GOOLState Identity (p CppSrcCode CppHdrCode FileData)
forall c.
LensLike'
  (Zoomed (StateT FileState Identity) c) GOOLState FileState
-> StateT FileState Identity c -> StateT GOOLState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT FileState Identity) (p CppSrcCode CppHdrCode FileData))
  GOOLState
  FileState
(FileState
 -> Focusing Identity (p CppSrcCode CppHdrCode FileData) FileState)
-> GOOLState
-> Focusing Identity (p CppSrcCode CppHdrCode FileData) GOOLState
Lens' GOOLState FileState
lensGStoFS) [FS (p CppSrcCode CppHdrCode FileData)]
mods
    let fm = p CppSrcCode CppHdrCode FileData -> CppSrcCode FileData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode FileData -> CppSrcCode FileData)
-> [p CppSrcCode CppHdrCode FileData] -> [CppSrcCode FileData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode FileData]
m
        sm = CppHdrCode FileData -> CppSrcCode FileData
forall a. CppHdrCode a -> CppSrcCode a
hdrToSrc (CppHdrCode FileData -> CppSrcCode FileData)
-> (p CppSrcCode CppHdrCode FileData -> CppHdrCode FileData)
-> p CppSrcCode CppHdrCode FileData
-> CppSrcCode FileData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode FileData -> CppHdrCode FileData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode FileData -> CppSrcCode FileData)
-> [p CppSrcCode CppHdrCode FileData] -> [CppSrcCode FileData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode FileData]
m
    p1 <- prog n st $ fmap pure sm P.<> fmap pure fm
    modify revFiles
    pure $ pair p1 (toCode emptyProg)

instance (Pair p) => CommonRenderSym (p CppSrcCode CppHdrCode) MethodData (Doc, VisibilityTag) ParamData Body Block Statement Variable ScopeData Value BinderD TypeData

instance (Pair p) => UnRepr (p CppSrcCode CppHdrCode) contents where
  unRepr :: p CppSrcCode CppHdrCode contents -> contents
unRepr p CppSrcCode CppHdrCode contents
c = CppSrcCode contents -> contents
forall a. CppSrcCode a -> a
unCPPSC (CppSrcCode contents -> contents)
-> CppSrcCode contents -> contents
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode contents -> CppSrcCode contents
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode contents
c

instance (Pair p) => FileSym (p CppSrcCode CppHdrCode) FileData ModData where
  fileDoc :: FS (p CppSrcCode CppHdrCode ModData)
-> FS (p CppSrcCode CppHdrCode FileData)
fileDoc = (SrcState FileState ModData -> FS (CppSrcCode FileData))
-> (HdrState FileState ModData -> HdrState FileState FileData)
-> FS (p CppSrcCode CppHdrCode ModData)
-> FS (p CppSrcCode CppHdrCode FileData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState FileState ModData -> FS (CppSrcCode FileData)
forall {k} (r :: k -> *) (file :: k) (mod :: k).
FileSym r file mod =>
FS (r mod) -> FS (r file)
fileDoc HdrState FileState ModData -> HdrState FileState FileData
forall {k} (r :: k -> *) (file :: k) (mod :: k).
FileSym r file mod =>
FS (r mod) -> FS (r file)
fileDoc

  docMod :: String
-> String
-> [String]
-> String
-> FS (p CppSrcCode CppHdrCode FileData)
-> FS (p CppSrcCode CppHdrCode FileData)
docMod String
d String
wm [String]
a String
dt = (FS (CppSrcCode FileData) -> FS (CppSrcCode FileData))
-> (HdrState FileState FileData -> HdrState FileState FileData)
-> FS (p CppSrcCode CppHdrCode FileData)
-> FS (p CppSrcCode CppHdrCode FileData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String
-> String
-> [String]
-> String
-> FS (CppSrcCode FileData)
-> FS (CppSrcCode FileData)
forall {k} (r :: k -> *) (file :: k) (mod :: k).
FileSym r file mod =>
String
-> String -> [String] -> String -> FS (r file) -> FS (r file)
docMod String
d String
wm [String]
a String
dt) (String
-> String
-> [String]
-> String
-> HdrState FileState FileData
-> HdrState FileState FileData
forall {k} (r :: k -> *) (file :: k) (mod :: k).
FileSym r file mod =>
String
-> String -> [String] -> String -> FS (r file) -> FS (r file)
docMod String
d String
wm [String]
a String
dt)

instance (Pair p) => RenderFile (p CppSrcCode CppHdrCode) FileData ModData where
  top :: p CppSrcCode CppHdrCode ModData -> p CppSrcCode CppHdrCode Doc
top p CppSrcCode CppHdrCode ModData
m = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (CppSrcCode ModData -> CppSrcCode Doc
forall (r :: * -> *) file mod.
RenderFile r file mod =>
r mod -> r Doc
top (CppSrcCode ModData -> CppSrcCode Doc)
-> CppSrcCode ModData -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppSrcCode ModData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ModData
m) (CppHdrCode ModData -> CppHdrCode Doc
forall (r :: * -> *) file mod.
RenderFile r file mod =>
r mod -> r Doc
top (CppHdrCode ModData -> CppHdrCode Doc)
-> CppHdrCode ModData -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppHdrCode ModData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ModData
m)
  bottom :: p CppSrcCode CppHdrCode Doc
bottom = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair CppSrcCode Doc
forall (r :: * -> *) file mod. RenderFile r file mod => r Doc
bottom CppHdrCode Doc
forall (r :: * -> *) file mod. RenderFile r file mod => r Doc
bottom

  commentedMod :: FS (p CppSrcCode CppHdrCode FileData)
-> FS (p CppSrcCode CppHdrCode Doc)
-> FS (p CppSrcCode CppHdrCode FileData)
commentedMod = (FS (CppSrcCode FileData)
 -> SrcState FileState Doc -> FS (CppSrcCode FileData))
-> (HdrState FileState FileData
    -> HdrState FileState Doc -> HdrState FileState FileData)
-> FS (p CppSrcCode CppHdrCode FileData)
-> FS (p CppSrcCode CppHdrCode Doc)
-> FS (p CppSrcCode CppHdrCode FileData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 FS (CppSrcCode FileData)
-> SrcState FileState Doc -> FS (CppSrcCode FileData)
forall (r :: * -> *) file mod.
RenderFile r file mod =>
FS (r file) -> FS (r Doc) -> FS (r file)
commentedMod HdrState FileState FileData
-> HdrState FileState Doc -> HdrState FileState FileData
forall (r :: * -> *) file mod.
RenderFile r file mod =>
FS (r file) -> FS (r Doc) -> FS (r file)
commentedMod

  fileFromData :: String
-> FS (p CppSrcCode CppHdrCode ModData)
-> FS (p CppSrcCode CppHdrCode FileData)
fileFromData String
fp = (SrcState FileState ModData -> FS (CppSrcCode FileData))
-> (HdrState FileState ModData -> HdrState FileState FileData)
-> FS (p CppSrcCode CppHdrCode ModData)
-> FS (p CppSrcCode CppHdrCode FileData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String -> SrcState FileState ModData -> FS (CppSrcCode FileData)
forall (r :: * -> *) file mod.
RenderFile r file mod =>
String -> FS (r mod) -> FS (r file)
fileFromData String
fp) (String -> HdrState FileState ModData -> HdrState FileState FileData
forall (r :: * -> *) file mod.
RenderFile r file mod =>
String -> FS (r mod) -> FS (r file)
fileFromData String
fp)

instance (Pair p) => ImportSym (p CppSrcCode CppHdrCode) where
  langImport :: String -> p CppSrcCode CppHdrCode Doc
langImport String
n = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> CppSrcCode Doc
forall (r :: * -> *). ImportSym r => String -> r Doc
langImport String
n) (String -> CppHdrCode Doc
forall (r :: * -> *). ImportSym r => String -> r Doc
langImport String
n)
  modImport :: String -> p CppSrcCode CppHdrCode Doc
modImport String
n = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> CppSrcCode Doc
forall (r :: * -> *). ImportSym r => String -> r Doc
modImport String
n) (String -> CppHdrCode Doc
forall (r :: * -> *). ImportSym r => String -> r Doc
modImport String
n)

instance (Pair p) => AttachmentSym (p CppSrcCode CppHdrCode) AttachmentData where
  classLevel :: p CppSrcCode CppHdrCode AttachmentData
classLevel = CppSrcCode AttachmentData
-> CppHdrCode AttachmentData
-> p CppSrcCode CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair CppSrcCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
classLevel CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
classLevel
  instanceLevel :: p CppSrcCode CppHdrCode AttachmentData
instanceLevel = CppSrcCode AttachmentData
-> CppHdrCode AttachmentData
-> p CppSrcCode CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair CppSrcCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
instanceLevel CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
instanceLevel

instance (Pair p) => PermElim (p CppSrcCode CppHdrCode) AttachmentData where
  perm :: p CppSrcCode CppHdrCode AttachmentData -> Doc
perm p CppSrcCode CppHdrCode AttachmentData
p = CppSrcCode AttachmentData -> Doc
forall {k} (r :: k -> *) (attch :: k).
PermElim r attch =>
r attch -> Doc
RC.perm (CppSrcCode AttachmentData -> Doc)
-> CppSrcCode AttachmentData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p
  binding :: p CppSrcCode CppHdrCode AttachmentData -> AttachmentTag
binding p CppSrcCode CppHdrCode AttachmentData
p = CppSrcCode AttachmentData -> AttachmentTag
forall {k} (r :: k -> *) (attch :: k).
PermElim r attch =>
r attch -> AttachmentTag
binding (CppSrcCode AttachmentData -> AttachmentTag)
-> CppSrcCode AttachmentData -> AttachmentTag
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p

instance (Pair p) => BodySym (p CppSrcCode CppHdrCode) Body Block where
  body :: [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
body = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState Doc] -> SrcState MethodState Doc
forall {k} (r :: k -> *) (bod :: k) (block :: k).
BodySym r bod block =>
[MS (r block)] -> MS (r bod)
body [HdrState MethodState Doc] -> HdrState MethodState Doc
forall {k} (r :: k -> *) (bod :: k) (block :: k).
BodySym r bod block =>
[MS (r block)] -> MS (r bod)
body

  addComments :: String
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
addComments String
s = (SrcState MethodState Doc -> SrcState MethodState Doc)
-> (HdrState MethodState Doc -> HdrState MethodState Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String -> SrcState MethodState Doc -> SrcState MethodState Doc
forall {k} (r :: k -> *) (bod :: k) (block :: k).
BodySym r bod block =>
String -> MS (r bod) -> MS (r bod)
addComments String
s) (String -> HdrState MethodState Doc -> HdrState MethodState Doc
forall {k} (r :: k -> *) (bod :: k) (block :: k).
BodySym r bod block =>
String -> MS (r bod) -> MS (r bod)
addComments String
s)

instance (Pair p) => RenderBody (p CppSrcCode CppHdrCode) Body where
  multiBody :: [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
multiBody = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState Doc] -> SrcState MethodState Doc
forall {k} (r :: k -> *) (bod :: k).
RenderBody r bod =>
[MS (r bod)] -> MS (r bod)
multiBody [HdrState MethodState Doc] -> HdrState MethodState Doc
forall {k} (r :: k -> *) (bod :: k).
RenderBody r bod =>
[MS (r bod)] -> MS (r bod)
multiBody

instance (Pair p) => BodyElim (p CppSrcCode CppHdrCode) Body where
  body :: p CppSrcCode CppHdrCode Doc -> Doc
body p CppSrcCode CppHdrCode Doc
b = CppSrcCode Doc -> Doc
forall {k} (r :: k -> *) (bod :: k). BodyElim r bod => r bod -> Doc
RC.body (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
b

instance (Pair p) => BlockSym (p CppSrcCode CppHdrCode) Block Statement where
  block :: [MS (p CppSrcCode CppHdrCode Statement)]
-> MS (p CppSrcCode CppHdrCode Doc)
block = ([SrcState MethodState Statement] -> SrcState MethodState Doc)
-> ([HdrState MethodState Statement] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Statement)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState Statement] -> SrcState MethodState Doc
forall {k} (r :: k -> *) (block :: k) (stmt :: k).
BlockSym r block stmt =>
[MS (r stmt)] -> MS (r block)
block [HdrState MethodState Statement] -> HdrState MethodState Doc
forall {k} (r :: k -> *) (block :: k) (stmt :: k).
BlockSym r block stmt =>
[MS (r stmt)] -> MS (r block)
block

instance (Pair p) => RenderBlock (p CppSrcCode CppHdrCode) Block where
  multiBlock :: [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
multiBlock = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState Doc] -> SrcState MethodState Doc
forall {k} (r :: k -> *) (block :: k).
RenderBlock r block =>
[MS (r block)] -> MS (r block)
multiBlock [HdrState MethodState Doc] -> HdrState MethodState Doc
forall {k} (r :: k -> *) (block :: k).
RenderBlock r block =>
[MS (r block)] -> MS (r block)
multiBlock

instance (Pair p) => BlockElim (p CppSrcCode CppHdrCode) Block where
  block :: p CppSrcCode CppHdrCode Doc -> Doc
block p CppSrcCode CppHdrCode Doc
b = CppSrcCode Doc -> Doc
forall {k} (r :: k -> *) (block :: k).
BlockElim r block =>
r block -> Doc
RC.block (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
b

instance (Pair p) => TypeSym (p CppSrcCode CppHdrCode) TypeData where
  bool :: VS (p CppSrcCode CppHdrCode TypeData)
bool = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool
  int :: VS (p CppSrcCode CppHdrCode TypeData)
int = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
int State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
int
  float :: VS (p CppSrcCode CppHdrCode TypeData)
float = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
float State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
float
  double :: VS (p CppSrcCode CppHdrCode TypeData)
double = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
double State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
double
  char :: VS (p CppSrcCode CppHdrCode TypeData)
char = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
char State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
char
  string :: VS (p CppSrcCode CppHdrCode TypeData)
string = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
string State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
string
  infile :: VS (p CppSrcCode CppHdrCode TypeData)
infile = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
infile State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
infile
  outfile :: VS (p CppSrcCode CppHdrCode TypeData)
outfile = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
outfile State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
outfile
  referenceType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
referenceType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
referenceType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
referenceType
  listType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
listType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
listType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
listType
  setType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
setType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
setType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
setType
  arrayType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
arrayType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
arrayType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
arrayType
  innerType :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
innerType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
innerType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
innerType
  funcType :: [VS (p CppSrcCode CppHdrCode TypeData)]
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
funcType = ([State ValueState (CppSrcCode TypeData)]
 -> State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> ([State ValueState (CppHdrCode TypeData)]
    -> State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> [VS (p CppSrcCode CppHdrCode TypeData)]
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
[VS (r typ)] -> VS (r typ) -> VS (r typ)
funcType [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
[VS (r typ)] -> VS (r typ) -> VS (r typ)
funcType
  void :: VS (p CppSrcCode CppHdrCode TypeData)
void = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void

instance (Pair p) => TypeElim (p CppSrcCode CppHdrCode) TypeData where
  getCodeType :: p CppSrcCode CppHdrCode TypeData -> CodeType
getCodeType p CppSrcCode CppHdrCode TypeData
tp = CppSrcCode TypeData -> CodeType
forall {k} (r :: k -> *) (typ :: k).
TypeElim r typ =>
r typ -> CodeType
getCodeType (CppSrcCode TypeData -> CodeType)
-> CppSrcCode TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode TypeData -> CppSrcCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode TypeData
tp

instance (Pair p) => OOTypeSym (p CppSrcCode CppHdrCode) TypeData where
  obj :: String -> VS (p CppSrcCode CppHdrCode TypeData)
obj String
t = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
OOTypeSym r typ =>
String -> VS (r typ)
obj String
t) (String -> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
OOTypeSym r typ =>
String -> VS (r typ)
obj String
t)

instance (Pair p) => RenderType (p CppSrcCode CppHdrCode) TypeData where
  multiType :: [VS (p CppSrcCode CppHdrCode TypeData)]
-> VS (p CppSrcCode CppHdrCode TypeData)
multiType = ([State ValueState (CppSrcCode TypeData)]
 -> State ValueState (CppSrcCode TypeData))
-> ([State ValueState (CppHdrCode TypeData)]
    -> State ValueState (CppHdrCode TypeData))
-> [VS (p CppSrcCode CppHdrCode TypeData)]
-> VS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
RenderType r typ =>
[VS (r typ)] -> VS (r typ)
multiType [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
RenderType r typ =>
[VS (r typ)] -> VS (r typ)
multiType

instance (Pair p) => UnaryOpSym (p CppSrcCode CppHdrCode) where
  notOp :: VSUnOp (p CppSrcCode CppHdrCode)
notOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
notOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
notOp
  negateOp :: VSUnOp (p CppSrcCode CppHdrCode)
negateOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
negateOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
negateOp
  sqrtOp :: VSUnOp (p CppSrcCode CppHdrCode)
sqrtOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sqrtOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sqrtOp
  absOp :: VSUnOp (p CppSrcCode CppHdrCode)
absOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
absOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
absOp
  logOp :: VSUnOp (p CppSrcCode CppHdrCode)
logOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
logOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
logOp
  lnOp :: VSUnOp (p CppSrcCode CppHdrCode)
lnOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
lnOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
lnOp
  expOp :: VSUnOp (p CppSrcCode CppHdrCode)
expOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
expOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
expOp
  sinOp :: VSUnOp (p CppSrcCode CppHdrCode)
sinOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sinOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sinOp
  cosOp :: VSUnOp (p CppSrcCode CppHdrCode)
cosOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
cosOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
cosOp
  tanOp :: VSUnOp (p CppSrcCode CppHdrCode)
tanOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
tanOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
tanOp
  asinOp :: VSUnOp (p CppSrcCode CppHdrCode)
asinOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
asinOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
asinOp
  acosOp :: VSUnOp (p CppSrcCode CppHdrCode)
acosOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
acosOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
acosOp
  atanOp :: VSUnOp (p CppSrcCode CppHdrCode)
atanOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
atanOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
atanOp
  floorOp :: VSUnOp (p CppSrcCode CppHdrCode)
floorOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
floorOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
floorOp
  ceilOp :: VSUnOp (p CppSrcCode CppHdrCode)
ceilOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSUnOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
ceilOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
ceilOp

instance (Pair p) => BinaryOpSym (p CppSrcCode CppHdrCode) where
  equalOp :: VSBinOp (p CppSrcCode CppHdrCode)
equalOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
equalOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
equalOp
  notEqualOp :: VSBinOp (p CppSrcCode CppHdrCode)
notEqualOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
notEqualOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
notEqualOp
  greaterOp :: VSBinOp (p CppSrcCode CppHdrCode)
greaterOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterOp
  greaterEqualOp :: VSBinOp (p CppSrcCode CppHdrCode)
greaterEqualOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterEqualOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterEqualOp
  lessOp :: VSBinOp (p CppSrcCode CppHdrCode)
lessOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessOp
  lessEqualOp :: VSBinOp (p CppSrcCode CppHdrCode)
lessEqualOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessEqualOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessEqualOp
  plusOp :: VSBinOp (p CppSrcCode CppHdrCode)
plusOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
plusOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
plusOp
  minusOp :: VSBinOp (p CppSrcCode CppHdrCode)
minusOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
minusOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
minusOp
  multOp :: VSBinOp (p CppSrcCode CppHdrCode)
multOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
multOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
multOp
  divideOp :: VSBinOp (p CppSrcCode CppHdrCode)
divideOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
divideOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
divideOp
  powerOp :: VSBinOp (p CppSrcCode CppHdrCode)
powerOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
powerOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
powerOp
  moduloOp :: VSBinOp (p CppSrcCode CppHdrCode)
moduloOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
moduloOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
moduloOp
  andOp :: VSBinOp (p CppSrcCode CppHdrCode)
andOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
andOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
andOp
  orOp :: VSBinOp (p CppSrcCode CppHdrCode)
orOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> VSBinOp (p CppSrcCode CppHdrCode)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode OpData
-> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
orOp State ValueState (CppHdrCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
orOp

instance (Pair p) => OpElim (p CppSrcCode CppHdrCode) where
  uOp :: p CppSrcCode CppHdrCode OpData -> Doc
uOp p CppSrcCode CppHdrCode OpData
o = CppSrcCode OpData -> Doc
forall (r :: * -> *). OpElim r => r OpData -> Doc
RC.uOp (CppSrcCode OpData -> Doc) -> CppSrcCode OpData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
o
  bOp :: p CppSrcCode CppHdrCode OpData -> Doc
bOp p CppSrcCode CppHdrCode OpData
o = CppSrcCode OpData -> Doc
forall (r :: * -> *). OpElim r => r OpData -> Doc
RC.bOp (CppSrcCode OpData -> Doc) -> CppSrcCode OpData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
o
  uOpPrec :: p CppSrcCode CppHdrCode OpData -> Int
uOpPrec p CppSrcCode CppHdrCode OpData
o = CppSrcCode OpData -> Int
forall (r :: * -> *). OpElim r => r OpData -> Int
uOpPrec (CppSrcCode OpData -> Int) -> CppSrcCode OpData -> Int
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
o
  bOpPrec :: p CppSrcCode CppHdrCode OpData -> Int
bOpPrec p CppSrcCode CppHdrCode OpData
o = CppSrcCode OpData -> Int
forall (r :: * -> *). OpElim r => r OpData -> Int
bOpPrec (CppSrcCode OpData -> Int) -> CppSrcCode OpData -> Int
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
o

instance (Pair p) => ScopeSym (p CppSrcCode CppHdrCode) ScopeData where
  global :: p CppSrcCode CppHdrCode ScopeData
global = CppSrcCode ScopeData
-> CppHdrCode ScopeData -> p CppSrcCode CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair CppSrcCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
global CppHdrCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
global
  mainFn :: p CppSrcCode CppHdrCode ScopeData
mainFn = CppSrcCode ScopeData
-> CppHdrCode ScopeData -> p CppSrcCode CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair CppSrcCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
mainFn CppHdrCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
mainFn
  local :: p CppSrcCode CppHdrCode ScopeData
local = CppSrcCode ScopeData
-> CppHdrCode ScopeData -> p CppSrcCode CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair CppSrcCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
local CppHdrCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
local

instance (Pair p) => ScopeElim (p CppSrcCode CppHdrCode) ScopeData where
  scopeData :: p CppSrcCode CppHdrCode ScopeData -> ScopeData
scopeData = CppSrcCode ScopeData -> ScopeData
forall a. CppSrcCode a -> a
unCPPSC (CppSrcCode ScopeData -> ScopeData)
-> (p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData)
-> p CppSrcCode CppHdrCode ScopeData
-> ScopeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst

instance (Pair p) => VariableSym (p CppSrcCode CppHdrCode) Variable TypeData where
  var :: String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
var String
n       = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
var String
n) (String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
var String
n)
  constant :: String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
constant String
n  = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
constant String
n) (String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
constant String
n)
  extVar :: String
-> String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
extVar String
l String
n  = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String
-> String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> String -> VS (r typ) -> VS (r var)
extVar String
l String
n) (String
-> String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> String -> VS (r typ) -> VS (r var)
extVar String
l String
n)

instance (Pair p) => OOVariableSym (p CppSrcCode CppHdrCode) Variable Value TypeData where
  classVar :: String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
classVar String
n = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
String -> VS (r typ) -> VS (r var)
classVar String
n) (String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
String -> VS (r typ) -> VS (r var)
classVar String
n)
  classConst :: String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
classConst String
n = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
String -> VS (r typ) -> VS (r var)
classConst String
n) (String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
String -> VS (r typ) -> VS (r var)
classConst String
n)
  classVarAccess :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
classVarAccess = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
VS (r typ) -> VS (r var) -> VS (r var)
classVarAccess State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable -> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
VS (r typ) -> VS (r var) -> VS (r var)
classVarAccess
  extClassVarAccess :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
extClassVarAccess = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
VS (r typ) -> VS (r var) -> VS (r var)
extClassVarAccess State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable -> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
VS (r typ) -> VS (r var) -> VS (r var)
extClassVarAccess
  instanceVarAccess :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
instanceVarAccess = (VS (CppSrcCode Value)
 -> SrcState ValueState Variable -> SrcState ValueState Variable)
-> (HdrState ValueState Value
    -> HdrState ValueState Variable -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
VS (r val) -> VS (r var) -> VS (r var)
instanceVarAccess HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
VS (r val) -> VS (r var) -> VS (r var)
instanceVarAccess

instance (Pair p) => SelfSym (p CppSrcCode CppHdrCode) Variable where
  self :: VS (p CppSrcCode CppHdrCode Variable)
self = (CppSrcCode Variable
 -> CppHdrCode Variable -> p CppSrcCode CppHdrCode Variable)
-> SrcState ValueState Variable
-> HdrState ValueState Variable
-> VS (p CppSrcCode CppHdrCode Variable)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Variable
-> CppHdrCode Variable -> p CppSrcCode CppHdrCode Variable
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k). SelfSym r var => VS (r var)
self HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k). SelfSym r var => VS (r var)
self

instance (Pair p) => VariableElim (p CppSrcCode CppHdrCode) Variable TypeData where
  variableName :: p CppSrcCode CppHdrCode Variable -> String
variableName p CppSrcCode CppHdrCode Variable
v = CppSrcCode Variable -> String
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> String
variableName (CppSrcCode Variable -> String) -> CppSrcCode Variable -> String
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Variable
v
  variableType :: p CppSrcCode CppHdrCode Variable
-> p CppSrcCode CppHdrCode TypeData
variableType p CppSrcCode CppHdrCode Variable
v = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (CppSrcCode Variable -> CppSrcCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType (CppSrcCode Variable -> CppSrcCode TypeData)
-> CppSrcCode Variable -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Variable
v) (CppHdrCode Variable -> CppHdrCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType (CppHdrCode Variable -> CppHdrCode TypeData)
-> CppHdrCode Variable -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppHdrCode Variable
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode Variable
v)

instance (Pair p) => InternalVarElim (p CppSrcCode CppHdrCode) Variable where
  variableBind :: p CppSrcCode CppHdrCode Variable -> AttachmentTag
variableBind p CppSrcCode CppHdrCode Variable
v = CppSrcCode Variable -> AttachmentTag
forall {k} (r :: k -> *) (var :: k).
InternalVarElim r var =>
r var -> AttachmentTag
variableBind (CppSrcCode Variable -> AttachmentTag)
-> CppSrcCode Variable -> AttachmentTag
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Variable
v
  variable :: p CppSrcCode CppHdrCode Variable -> Doc
variable p CppSrcCode CppHdrCode Variable
v = CppSrcCode Variable -> Doc
forall {k} (r :: k -> *) (var :: k).
InternalVarElim r var =>
r var -> Doc
RC.variable (CppSrcCode Variable -> Doc) -> CppSrcCode Variable -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Variable
v

instance (Pair p) => RenderVariable (p CppSrcCode CppHdrCode) Variable TypeData where
  varFromData :: AttachmentTag
-> String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> Doc
-> VS (p CppSrcCode CppHdrCode Variable)
varFromData AttachmentTag
b String
n VS (p CppSrcCode CppHdrCode TypeData)
t' Doc
d = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (\State ValueState (CppSrcCode TypeData)
t ->AttachmentTag
-> String
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
AttachmentTag -> String -> VS (r typ) -> Doc -> VS (r var)
varFromData AttachmentTag
b String
n State ValueState (CppSrcCode TypeData)
t Doc
d)
    (\State ValueState (CppHdrCode TypeData)
t -> AttachmentTag
-> String
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
AttachmentTag -> String -> VS (r typ) -> Doc -> VS (r var)
varFromData AttachmentTag
b String
n State ValueState (CppHdrCode TypeData)
t Doc
d) VS (p CppSrcCode CppHdrCode TypeData)
t'

instance (Pair p) => ValueSym (p CppSrcCode CppHdrCode) Value TypeData where
  valueType :: p CppSrcCode CppHdrCode Value -> p CppSrcCode CppHdrCode TypeData
valueType p CppSrcCode CppHdrCode Value
v = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType (CppSrcCode Value -> CppSrcCode TypeData)
-> CppSrcCode Value -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Value
v) (CppHdrCode Value -> CppHdrCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType (CppHdrCode Value -> CppHdrCode TypeData)
-> CppHdrCode Value -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode Value
v)

instance (Pair p) => Argument (p CppSrcCode CppHdrCode) Value where
  pointerArg :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
pointerArg = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Argument r val =>
VS (r val) -> VS (r val)
pointerArg HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Argument r val =>
VS (r val) -> VS (r val)
pointerArg

instance (Pair p) => Literal (p CppSrcCode CppHdrCode) Value TypeData where
  litTrue :: VS (p CppSrcCode CppHdrCode Value)
litTrue = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r val)
litTrue HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r val)
litTrue
  litFalse :: VS (p CppSrcCode CppHdrCode Value)
litFalse = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r val)
litFalse HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r val)
litFalse
  litChar :: Char -> VS (p CppSrcCode CppHdrCode Value)
litChar Char
c = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (Char -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Char -> VS (r val)
litChar Char
c) (Char -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Char -> VS (r val)
litChar Char
c)
  litDouble :: Double -> VS (p CppSrcCode CppHdrCode Value)
litDouble Double
v = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (Double -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Double -> VS (r val)
litDouble Double
v) (Double -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Double -> VS (r val)
litDouble Double
v)
  litFloat :: Float -> VS (p CppSrcCode CppHdrCode Value)
litFloat Float
v = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (Float -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Float -> VS (r val)
litFloat Float
v) (Float -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Float -> VS (r val)
litFloat Float
v)
  litInt :: Integer -> VS (p CppSrcCode CppHdrCode Value)
litInt Integer
v =(CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues  CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Integer -> VS (r val)
litInt Integer
v) (Integer -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Integer -> VS (r val)
litInt Integer
v)
  litString :: String -> VS (p CppSrcCode CppHdrCode Value)
litString String
s = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
String -> VS (r val)
litString String
s) (String -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
String -> VS (r val)
litString String
s)
  litArray :: VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> VS (p CppSrcCode CppHdrCode Value)
litArray = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value] -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r typ) -> [VS (r val)] -> VS (r val)
litArray State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r typ) -> [VS (r val)] -> VS (r val)
litArray
  litSet :: VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> VS (p CppSrcCode CppHdrCode Value)
litSet = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value] -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r typ) -> [VS (r val)] -> VS (r val)
litSet State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r typ) -> [VS (r val)] -> VS (r val)
litSet
  litList :: VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> VS (p CppSrcCode CppHdrCode Value)
litList = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value] -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r typ) -> [VS (r val)] -> VS (r val)
litList State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r typ) -> [VS (r val)] -> VS (r val)
litList

instance (Pair p) => MathConstant (p CppSrcCode CppHdrCode) Value where
  pi :: VS (p CppSrcCode CppHdrCode Value)
pi = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
MathConstant r val =>
VS (r val)
pi HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
MathConstant r val =>
VS (r val)
pi

instance (Pair p) => VariableValue (p CppSrcCode CppHdrCode) Variable Value where
  valueOf :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
valueOf = (SrcState ValueState Variable -> VS (CppSrcCode Value))
-> (HdrState ValueState Variable -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf HdrState ValueState Variable -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf

instance (Pair p) => CommandLineArgs (p CppSrcCode CppHdrCode) Value where
  arg :: Integer -> VS (p CppSrcCode CppHdrCode Value)
arg Integer
n = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
Integer -> VS (r val)
arg Integer
n) (Integer -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
Integer -> VS (r val)
arg Integer
n)
  argsList :: VS (p CppSrcCode CppHdrCode Value)
argsList = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
VS (r val)
argsList HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
VS (r val)
argsList
  argExists :: Integer -> VS (p CppSrcCode CppHdrCode Value)
argExists Integer
i = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
Integer -> VS (r val)
argExists Integer
i) (Integer -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
Integer -> VS (r val)
argExists Integer
i)

instance (Pair p) => NumericExpression (p CppSrcCode CppHdrCode) Value where
  #~ :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#~) = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
(#~) HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
(#~)
  #/^ :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#/^) = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
(#/^) HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
(#/^)
  #| :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#|) = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
(#|) HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
(#|)
  #+ :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#+) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#+) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#+)
  #- :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#-) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#-) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#-)
  #* :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#*) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#*) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#*)
  #/ :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#/) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#/) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#/)
  #% :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#%) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#%) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#%)
  #^ :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(#^) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#^) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(#^)

  log :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
log = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
log HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
log
  ln :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
ln = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
ln HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
ln
  exp :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
exp = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
exp HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
exp
  sin :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
sin = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
sin HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
sin
  cos :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
cos = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
cos HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
cos
  tan :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
tan = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
tan HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
tan
  csc :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
csc = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
csc HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
csc
  sec :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
sec = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
sec HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
sec
  cot :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
cot = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
cot HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
cot
  arcsin :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
arcsin = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
arcsin HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
arcsin
  arccos :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
arccos = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
arccos HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
arccos
  arctan :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
arctan = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
arctan HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
arctan
  floor :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
floor = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
floor HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
floor
  ceil :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
ceil = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
ceil HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val)
ceil

instance (Pair p) => BooleanExpression (p CppSrcCode CppHdrCode) Value where
  ?! :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?!) = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
BooleanExpression r val =>
VS (r val) -> VS (r val)
(?!) HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
BooleanExpression r val =>
VS (r val) -> VS (r val)
(?!)
  ?&& :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?&&) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
BooleanExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?&&) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
BooleanExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?&&)
  ?|| :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?||) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
BooleanExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?||) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
BooleanExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?||)

instance (Pair p) => Comparison (p CppSrcCode CppHdrCode) Value where
  ?< :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?<) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?<) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?<)
  ?<= :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?<=) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?<=) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?<=)
  ?> :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?>) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?>) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?>)
  ?>= :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?>=) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?>=) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?>=)
  ?== :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?==) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?==) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?==)
  ?!= :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
(?!=) = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?!=) HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
(?!=)

instance (Pair p) => ValueExpression (p CppSrcCode CppHdrCode) Variable Value BinderD TypeData where
  inlineIf :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
inlineIf = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value)
 -> VS (CppSrcCode Value)
 -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
VS (r val) -> VS (r val) -> VS (r val) -> VS (r val)
inlineIf HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
VS (r val) -> VS (r val) -> VS (r val) -> VS (r val)
inlineIf

  funcAppMixedArgs :: MixedCall (p CppSrcCode CppHdrCode) Variable Value TypeData
funcAppMixedArgs String
n = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> PairState ValueState p TypeData
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [(PairState ValueState p Variable,
     VS (p CppSrcCode CppHdrCode Value))]
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists (MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
MixedCall r var val typ
funcAppMixedArgs String
n) (MixedCall CppHdrCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
MixedCall r var val typ
funcAppMixedArgs String
n)
  extFuncAppMixedArgs :: String
-> MixedCall (p CppSrcCode CppHdrCode) Variable Value TypeData
extFuncAppMixedArgs String
l String
n = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> PairState ValueState p TypeData
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [(PairState ValueState p Variable,
     VS (p CppSrcCode CppHdrCode Value))]
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists
    (String -> MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
String -> MixedCall r var val typ
extFuncAppMixedArgs String
l String
n)
    (String -> MixedCall CppHdrCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
String -> MixedCall r var val typ
extFuncAppMixedArgs String
l String
n)
  libFuncAppMixedArgs :: String
-> MixedCall (p CppSrcCode CppHdrCode) Variable Value TypeData
libFuncAppMixedArgs String
l String
n = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> PairState ValueState p TypeData
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [(PairState ValueState p Variable,
     VS (p CppSrcCode CppHdrCode Value))]
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists
    (String -> MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
String -> MixedCall r var val typ
extFuncAppMixedArgs String
l String
n)
    (String -> MixedCall CppHdrCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
String -> MixedCall r var val typ
extFuncAppMixedArgs String
l String
n)

  lambda :: [VS (p CppSrcCode CppHdrCode BinderD)]
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
lambda = ([SrcState ValueState BinderD]
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> ([HdrState ValueState BinderD]
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> [VS (p CppSrcCode CppHdrCode BinderD)]
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [SrcState ValueState BinderD]
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
[VS (r binder)] -> VS (r val) -> VS (r val)
lambda [HdrState ValueState BinderD]
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
[VS (r binder)] -> VS (r val) -> VS (r val)
lambda

  notNull :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
notNull = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
VS (r val) -> VS (r val)
notNull HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
VS (r val) -> VS (r val)
notNull

instance (Pair p) => OOValueExpression (p CppSrcCode CppHdrCode) Variable Value TypeData where
  newObjMixedArgs :: MixedCtorCall (p CppSrcCode CppHdrCode) Variable Value TypeData
newObjMixedArgs = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> MixedCtorCall (p CppSrcCode CppHdrCode) Variable Value TypeData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOValueExpression r var val typ =>
MixedCtorCall r var val typ
newObjMixedArgs State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOValueExpression r var val typ =>
MixedCtorCall r var val typ
newObjMixedArgs
  extNewObjMixedArgs :: String
-> MixedCtorCall (p CppSrcCode CppHdrCode) Variable Value TypeData
extNewObjMixedArgs String
l = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> MixedCtorCall (p CppSrcCode CppHdrCode) Variable Value TypeData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists
    (MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOValueExpression r var val typ =>
String -> MixedCtorCall r var val typ
extNewObjMixedArgs String
l)
    (MixedCall CppHdrCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOValueExpression r var val typ =>
String -> MixedCtorCall r var val typ
extNewObjMixedArgs String
l)
  libNewObjMixedArgs :: String
-> MixedCtorCall (p CppSrcCode CppHdrCode) Variable Value TypeData
libNewObjMixedArgs String
l = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> MixedCtorCall (p CppSrcCode CppHdrCode) Variable Value TypeData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists
    (MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOValueExpression r var val typ =>
String -> MixedCtorCall r var val typ
extNewObjMixedArgs String
l)
    (MixedCall CppHdrCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOValueExpression r var val typ =>
String -> MixedCtorCall r var val typ
extNewObjMixedArgs String
l)

instance (Pair p) => RenderValue (p CppSrcCode CppHdrCode) Variable Value TypeData where
  inputFunc :: VS (p CppSrcCode CppHdrCode Value)
inputFunc = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
inputFunc HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
inputFunc
  printFunc :: VS (p CppSrcCode CppHdrCode Value)
printFunc = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
printFunc HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
printFunc
  printLnFunc :: VS (p CppSrcCode CppHdrCode Value)
printLnFunc = (CppSrcCode Value
 -> CppHdrCode Value -> p CppSrcCode CppHdrCode Value)
-> VS (CppSrcCode Value)
-> HdrState ValueState Value
-> VS (p CppSrcCode CppHdrCode Value)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Value
-> CppHdrCode Value -> p CppSrcCode CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
printLnFunc HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
printLnFunc
  printFileFunc :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
printFileFunc = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val) -> VS (r val)
printFileFunc HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val) -> VS (r val)
printFileFunc
  printFileLnFunc :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
printFileLnFunc = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val) -> VS (r val)
printFileLnFunc HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val) -> VS (r val)
printFileLnFunc

  cast :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
cast = (State ValueState (CppSrcCode TypeData)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> VS (r val) -> VS (r val)
cast State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> VS (r val) -> VS (r val)
cast

  call :: Maybe String
-> Maybe Doc
-> MixedCall (p CppSrcCode CppHdrCode) Variable Value TypeData
call Maybe String
l Maybe Doc
o String
n = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [(PairState ValueState p Variable,
     VS (p CppSrcCode CppHdrCode Value))]
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists (Maybe String
-> Maybe Doc -> MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
Maybe String -> Maybe Doc -> MixedCall r var val typ
call Maybe String
l Maybe Doc
o String
n) (Maybe String
-> Maybe Doc -> MixedCall CppHdrCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
Maybe String -> Maybe Doc -> MixedCall r var val typ
call Maybe String
l Maybe Doc
o String
n)

  valFromData :: Maybe Int
-> Maybe Integer
-> VS (p CppSrcCode CppHdrCode TypeData)
-> Doc
-> VS (p CppSrcCode CppHdrCode Value)
valFromData Maybe Int
p Maybe Integer
i VS (p CppSrcCode CppHdrCode TypeData)
t' Doc
d = (State ValueState (CppSrcCode TypeData) -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (\State ValueState (CppSrcCode TypeData)
t -> Maybe Int
-> Maybe Integer
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
Maybe Int -> Maybe Integer -> VS (r typ) -> Doc -> VS (r val)
valFromData Maybe Int
p Maybe Integer
i State ValueState (CppSrcCode TypeData)
t Doc
d)
    (\State ValueState (CppHdrCode TypeData)
t -> Maybe Int
-> Maybe Integer
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
Maybe Int -> Maybe Integer -> VS (r typ) -> Doc -> VS (r val)
valFromData Maybe Int
p Maybe Integer
i State ValueState (CppHdrCode TypeData)
t Doc
d) VS (p CppSrcCode CppHdrCode TypeData)
t'

instance (Pair p) => ValueElim (p CppSrcCode CppHdrCode) Value where
  valuePrec :: p CppSrcCode CppHdrCode Value -> Maybe Int
valuePrec p CppSrcCode CppHdrCode Value
v = CppSrcCode Value -> Maybe Int
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Maybe Int
valuePrec (CppSrcCode Value -> Maybe Int) -> CppSrcCode Value -> Maybe Int
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Value
v
  valueInt :: p CppSrcCode CppHdrCode Value -> Maybe Integer
valueInt p CppSrcCode CppHdrCode Value
v = CppSrcCode Value -> Maybe Integer
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Maybe Integer
valueInt (CppSrcCode Value -> Maybe Integer)
-> CppSrcCode Value -> Maybe Integer
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Value
v
  value :: p CppSrcCode CppHdrCode Value -> Doc
value p CppSrcCode CppHdrCode Value
v = CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value (CppSrcCode Value -> Doc) -> CppSrcCode Value -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Value
v

instance (Pair p) => InternalValueExp (p CppSrcCode CppHdrCode) Variable Value TypeData where
  objMethodCallMixedArgs' :: String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> NamedArgs (p CppSrcCode CppHdrCode) Variable Value
-> VS (p CppSrcCode CppHdrCode Value)
objMethodCallMixedArgs' String
f = (State ValueState (CppSrcCode TypeData)
 -> VS (CppSrcCode Value)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Value
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> NamedArgs (p CppSrcCode CppHdrCode) Variable Value
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> [SrcState t c]
 -> [(SrcState u d, SrcState v e)]
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> [HdrState t c]
    -> [(HdrState u d, HdrState v e)]
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> [PairState w p c]
-> [(PairState w p d, PairState w p e)]
-> PairState w p f
pair2Vals3Lists
    (String
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
InternalValueExp r var val typ =>
String
-> VS (r typ)
-> VS (r val)
-> [VS (r val)]
-> NamedArgs r var val
-> VS (r val)
objMethodCallMixedArgs' String
f)
    (String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
InternalValueExp r var val typ =>
String
-> VS (r typ)
-> VS (r val)
-> [VS (r val)]
-> NamedArgs r var val
-> VS (r val)
objMethodCallMixedArgs' String
f)
  classMethodCallMixedArgs' :: String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> NamedArgs (p CppSrcCode CppHdrCode) Variable Value
-> VS (p CppSrcCode CppHdrCode Value)
classMethodCallMixedArgs' String
f = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
 -> VS (CppSrcCode Value))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value]
    -> [(HdrState ValueState Variable, HdrState ValueState Value)]
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> NamedArgs (p CppSrcCode CppHdrCode) Variable Value
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> [SrcState t c]
 -> [(SrcState u d, SrcState v e)]
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> [HdrState t c]
    -> [(HdrState u d, HdrState v e)]
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> [PairState w p c]
-> [(PairState w p d, PairState w p e)]
-> PairState w p f
pair2Vals3Lists
    (String
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
InternalValueExp r var val typ =>
String
-> VS (r typ)
-> VS (r typ)
-> [VS (r val)]
-> NamedArgs r var val
-> VS (r val)
classMethodCallMixedArgs' String
f)
    (String
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
InternalValueExp r var val typ =>
String
-> VS (r typ)
-> VS (r typ)
-> [VS (r val)]
-> NamedArgs r var val
-> VS (r val)
classMethodCallMixedArgs' String
f)

instance (Pair p) => OOFunctionSym (p CppSrcCode CppHdrCode) Value TypeData where
  func :: String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> VS (p CppSrcCode CppHdrCode FuncData)
func String
l = (State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)] -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState Value] -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List (String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> SrcState ValueState FuncData
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
String -> VS (r typ) -> [VS (r val)] -> VS (r FuncData)
func String
l) (String
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> HdrState ValueState FuncData
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
String -> VS (r typ) -> [VS (r val)] -> VS (r FuncData)
func String
l)
  objAccess :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode FuncData)
-> VS (p CppSrcCode CppHdrCode Value)
objAccess = (VS (CppSrcCode Value)
 -> SrcState ValueState FuncData -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState FuncData -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode FuncData)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> SrcState ValueState FuncData -> VS (CppSrcCode Value)
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
VS (r val) -> VS (r FuncData) -> VS (r val)
objAccess HdrState ValueState Value
-> HdrState ValueState FuncData -> HdrState ValueState Value
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
VS (r val) -> VS (r FuncData) -> VS (r val)
objAccess

instance (Pair p) => GetSet (p CppSrcCode CppHdrCode) Variable Value where
  get :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
get = (VS (CppSrcCode Value)
 -> SrcState ValueState Variable -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Variable -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
GetSet r var val =>
VS (r val) -> VS (r var) -> VS (r val)
get HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k).
GetSet r var val =>
VS (r val) -> VS (r var) -> VS (r val)
get
  set :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
set = (VS (CppSrcCode Value)
 -> SrcState ValueState Variable
 -> VS (CppSrcCode Value)
 -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 VS (CppSrcCode Value)
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
GetSet r var val =>
VS (r val) -> VS (r var) -> VS (r val) -> VS (r val)
set HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k).
GetSet r var val =>
VS (r val) -> VS (r var) -> VS (r val) -> VS (r val)
set

instance (Pair p) => IndexTranslator (p CppSrcCode CppHdrCode) Value where
  intToIndex :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
intToIndex = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
IndexTranslator r val =>
VS (r val) -> VS (r val)
intToIndex HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
IndexTranslator r val =>
VS (r val) -> VS (r val)
intToIndex
  indexToInt :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
indexToInt = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
IndexTranslator r val =>
VS (r val) -> VS (r val)
indexToInt HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
IndexTranslator r val =>
VS (r val) -> VS (r val)
indexToInt

instance (Pair p) => Reference (p CppSrcCode CppHdrCode) Value where
  makeRef :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
makeRef = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Reference r val =>
VS (r val) -> VS (r val)
makeRef HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Reference r val =>
VS (r val) -> VS (r val)
makeRef
  maybeDeref :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
maybeDeref = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Reference r val =>
VS (r val) -> VS (r val)
maybeDeref HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Reference r val =>
VS (r val) -> VS (r val)
maybeDeref

instance (Pair p) => Array (p CppSrcCode CppHdrCode) Variable Value where
  arrayElem :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
arrayElem = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> SrcState ValueState Variable)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k).
Array r var val =>
VS (r val) -> VS (r val) -> VS (r var)
arrayElem HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k).
Array r var val =>
VS (r val) -> VS (r val) -> VS (r var)
arrayElem
  arrayLength :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
arrayLength = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
Array r var val =>
VS (r val) -> VS (r val)
arrayLength HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k).
Array r var val =>
VS (r val) -> VS (r val)
arrayLength
  arrayCopy :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
arrayCopy = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
Array r var val =>
VS (r val) -> VS (r val)
arrayCopy HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k).
Array r var val =>
VS (r val) -> VS (r val)
arrayCopy

instance (Pair p) => List (p CppSrcCode CppHdrCode) Value where
  listSize :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
listSize = (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val)
listSize HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val)
listSize
  listAccess :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
listAccess = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val) -> VS (r val)
listAccess HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val) -> VS (r val)
listAccess
  indexOf :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
indexOf = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val) -> VS (r val)
indexOf HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val) -> VS (r val)
indexOf

instance (Pair p) => ListStatement (p CppSrcCode CppHdrCode) Statement Value where
  listAdd :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
listAdd VS (p CppSrcCode CppHdrCode Value)
l VS (p CppSrcCode CppHdrCode Value)
i VS (p CppSrcCode CppHdrCode Value)
v = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value)
 -> VS (CppSrcCode Value)
 -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ListStatement r stmt val =>
VS (r val) -> VS (r val) -> VS (r val) -> MS (r stmt)
listAdd HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ListStatement r stmt val =>
VS (r val) -> VS (r val) -> VS (r val) -> MS (r stmt)
listAdd (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
l) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
i) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)
  listAppend :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
listAppend VS (p CppSrcCode CppHdrCode Value)
l VS (p CppSrcCode CppHdrCode Value)
v = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ListStatement r stmt val =>
VS (r val) -> VS (r val) -> MS (r stmt)
listAppend HdrState ValueState Value
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ListStatement r stmt val =>
VS (r val) -> VS (r val) -> MS (r stmt)
listAppend (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
l) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)
  listSet :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
listSet VS (p CppSrcCode CppHdrCode Value)
l VS (p CppSrcCode CppHdrCode Value)
i VS (p CppSrcCode CppHdrCode Value)
v = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value)
 -> VS (CppSrcCode Value)
 -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ListStatement r stmt val =>
VS (r val) -> VS (r val) -> VS (r val) -> MS (r stmt)
listSet HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ListStatement r stmt val =>
VS (r val) -> VS (r val) -> VS (r val) -> MS (r stmt)
listSet (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
l) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
i) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)

instance (Pair p) => Set (p CppSrcCode CppHdrCode) Value where
  contains :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
contains = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Set r val =>
VS (r val) -> VS (r val) -> VS (r val)
contains HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Set r val =>
VS (r val) -> VS (r val) -> VS (r val)
contains
  setAdd :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
setAdd = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Set r val =>
VS (r val) -> VS (r val) -> VS (r val)
setAdd HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Set r val =>
VS (r val) -> VS (r val) -> VS (r val)
setAdd
  setRemove :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
setRemove = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Set r val =>
VS (r val) -> VS (r val) -> VS (r val)
setRemove HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Set r val =>
VS (r val) -> VS (r val) -> VS (r val)
setRemove
  setUnion :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
setUnion = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState ValueState Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Set r val =>
VS (r val) -> VS (r val) -> VS (r val)
setUnion HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
Set r val =>
VS (r val) -> VS (r val) -> VS (r val)
setUnion

instance (Pair p) => InternalList (p CppSrcCode CppHdrCode) Block Variable Value where
  listSlice' :: Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Doc)
listSlice' Maybe (VS (p CppSrcCode CppHdrCode Value))
b Maybe (VS (p CppSrcCode CppHdrCode Value))
e Maybe (VS (p CppSrcCode CppHdrCode Value))
s VS (p CppSrcCode CppHdrCode Variable)
vr VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Doc)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Doc)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2
    (Maybe (VS (CppSrcCode Value))
-> Maybe (VS (CppSrcCode Value))
-> Maybe (VS (CppSrcCode Value))
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
forall {k} (r :: k -> *) (block :: k) (var :: k) (val :: k).
InternalList r block var val =>
Maybe (VS (r val))
-> Maybe (VS (r val))
-> Maybe (VS (r val))
-> VS (r var)
-> VS (r val)
-> MS (r block)
listSlice' ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value))
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (VS (CppSrcCode Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
b) ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value))
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (VS (CppSrcCode Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
e)
      ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value))
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (VS (CppSrcCode Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
s))
    (Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Value)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Doc
forall {k} (r :: k -> *) (block :: k) (var :: k) (val :: k).
InternalList r block var val =>
Maybe (VS (r val))
-> Maybe (VS (r val))
-> Maybe (VS (r val))
-> VS (r var)
-> VS (r val)
-> MS (r block)
listSlice' ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value)
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (HdrState ValueState Value)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
b) ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value)
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (HdrState ValueState Value)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
e)
      ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value)
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (HdrState ValueState Value)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
s))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
vl)

instance (Pair p) => InternalGetSet (p CppSrcCode CppHdrCode) Variable Value TypeData where
  getFunc :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode FuncData)
getFunc = (SrcState ValueState Variable -> SrcState ValueState FuncData)
-> (HdrState ValueState Variable -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState ValueState FuncData
forall (r :: * -> *) var val typ.
InternalGetSet r var val typ =>
VS (r var) -> VS (r FuncData)
getFunc HdrState ValueState Variable -> HdrState ValueState FuncData
forall (r :: * -> *) var val typ.
InternalGetSet r var val typ =>
VS (r var) -> VS (r FuncData)
getFunc
  setFunc :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode FuncData)
setFunc = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState Variable
 -> VS (CppSrcCode Value)
 -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ValueState FuncData
forall (r :: * -> *) var val typ.
InternalGetSet r var val typ =>
VS (r typ) -> VS (r var) -> VS (r val) -> VS (r FuncData)
setFunc State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState FuncData
forall (r :: * -> *) var val typ.
InternalGetSet r var val typ =>
VS (r typ) -> VS (r var) -> VS (r val) -> VS (r FuncData)
setFunc

instance (Pair p) => InternalListFunc (p CppSrcCode CppHdrCode) Value TypeData where
  listAccessFunc :: VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode FuncData)
listAccessFunc = (State ValueState (CppSrcCode TypeData)
 -> VS (CppSrcCode Value) -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState Value -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> SrcState ValueState FuncData
forall (r :: * -> *) val typ.
InternalListFunc r val typ =>
VS (r typ) -> VS (r val) -> VS (r FuncData)
listAccessFunc State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value -> HdrState ValueState FuncData
forall (r :: * -> *) val typ.
InternalListFunc r val typ =>
VS (r typ) -> VS (r val) -> VS (r FuncData)
listAccessFunc

instance Pair p => BinderSym (p CppSrcCode CppHdrCode) BinderD TypeData where
  binder :: String
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode BinderD)
binder String
nm = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState BinderD)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState BinderD)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode BinderD)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState BinderD
forall {k} (r :: k -> *) (binder :: k) (typ :: k).
BinderSym r binder typ =>
String -> VS (r typ) -> VS (r binder)
binder String
nm) (String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState BinderD
forall {k} (r :: k -> *) (binder :: k) (typ :: k).
BinderSym r binder typ =>
String -> VS (r typ) -> VS (r binder)
binder String
nm)

instance (Pair p) => BinderElim (p CppSrcCode CppHdrCode) BinderD TypeData where
  binderName :: p CppSrcCode CppHdrCode BinderD -> String
binderName p CppSrcCode CppHdrCode BinderD
b = BinderD -> String
bindName (BinderD -> String) -> BinderD -> String
forall a b. (a -> b) -> a -> b
$ CppSrcCode BinderD -> BinderD
forall a. CppSrcCode a -> a
unCPPSC (CppSrcCode BinderD -> BinderD) -> CppSrcCode BinderD -> BinderD
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BinderD -> CppSrcCode BinderD
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode BinderD
b
  binderType :: p CppSrcCode CppHdrCode BinderD -> p CppSrcCode CppHdrCode TypeData
binderType p CppSrcCode CppHdrCode BinderD
b = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (CppSrcCode BinderD -> CppSrcCode TypeData
forall {k} (r :: k -> *) (binder :: k) (typ :: k).
BinderElim r binder typ =>
r binder -> r typ
binderType (CppSrcCode BinderD -> CppSrcCode TypeData)
-> CppSrcCode BinderD -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BinderD -> CppSrcCode BinderD
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode BinderD
b) (CppHdrCode BinderD -> CppHdrCode TypeData
forall {k} (r :: k -> *) (binder :: k) (typ :: k).
BinderElim r binder typ =>
r binder -> r typ
binderType (CppHdrCode BinderD -> CppHdrCode TypeData)
-> CppHdrCode BinderD -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BinderD -> CppHdrCode BinderD
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode BinderD
b)

instance (Pair p) => InternalBinderElim (p CppSrcCode CppHdrCode) BinderD where
  binderElim :: p CppSrcCode CppHdrCode BinderD -> Doc
binderElim p CppSrcCode CppHdrCode BinderD
b = CppSrcCode BinderD -> Doc
forall {k} (r :: k -> *) (binder :: k).
InternalBinderElim r binder =>
r binder -> Doc
binderElim (CppSrcCode BinderD -> Doc) -> CppSrcCode BinderD -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BinderD -> CppSrcCode BinderD
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode BinderD
b

instance (Pair p) => RenderFunction (p CppSrcCode CppHdrCode) TypeData where
  funcFromData :: Doc
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode FuncData)
funcFromData Doc
d = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> VS (p CppSrcCode CppHdrCode FuncData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (Doc
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
forall (r :: * -> *) typ.
RenderFunction r typ =>
Doc -> VS (r typ) -> VS (r FuncData)
funcFromData Doc
d) (Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *) typ.
RenderFunction r typ =>
Doc -> VS (r typ) -> VS (r FuncData)
funcFromData Doc
d)

instance (Pair p) => FunctionElim (p CppSrcCode CppHdrCode) TypeData where
  functionType :: p CppSrcCode CppHdrCode FuncData
-> p CppSrcCode CppHdrCode TypeData
functionType p CppSrcCode CppHdrCode FuncData
f = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (CppSrcCode FuncData -> CppSrcCode TypeData
forall (r :: * -> *) typ. FunctionElim r typ => r FuncData -> r typ
functionType (CppSrcCode FuncData -> CppSrcCode TypeData)
-> CppSrcCode FuncData -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppSrcCode FuncData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode FuncData
f) (CppHdrCode FuncData -> CppHdrCode TypeData
forall (r :: * -> *) typ. FunctionElim r typ => r FuncData -> r typ
functionType (CppHdrCode FuncData -> CppHdrCode TypeData)
-> CppHdrCode FuncData -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppHdrCode FuncData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode FuncData
f)
  function :: p CppSrcCode CppHdrCode FuncData -> Doc
function p CppSrcCode CppHdrCode FuncData
f = CppSrcCode FuncData -> Doc
forall (r :: * -> *) typ. FunctionElim r typ => r FuncData -> Doc
RC.function (CppSrcCode FuncData -> Doc) -> CppSrcCode FuncData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppSrcCode FuncData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode FuncData
f

instance (Pair p) => InternalAssignStmt (p CppSrcCode CppHdrCode) Statement Variable Value where
  multiAssign :: [VS (p CppSrcCode CppHdrCode Variable)]
-> [VS (p CppSrcCode CppHdrCode Value)]
-> MS (p CppSrcCode CppHdrCode Statement)
multiAssign [VS (p CppSrcCode CppHdrCode Variable)]
vrs [VS (p CppSrcCode CppHdrCode Value)]
vls = ([SrcState ValueState Variable]
 -> [VS (CppSrcCode Value)] -> SrcState MethodState Statement)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Value] -> HdrState MethodState Statement)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c)
-> ([HdrState r a] -> [HdrState s b] -> HdrState t c)
-> [PairState t p a]
-> [PairState t p b]
-> PairState t p c
pair2Lists [SrcState ValueState Variable]
-> [VS (CppSrcCode Value)] -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
InternalAssignStmt r stmt var val =>
[VS (r var)] -> [VS (r val)] -> MS (r stmt)
multiAssign [HdrState ValueState Variable]
-> [HdrState ValueState Value] -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
InternalAssignStmt r stmt var val =>
[VS (r var)] -> [VS (r val)] -> MS (r stmt)
multiAssign
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
vrs) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Value)]
vls)

instance (Pair p) => InternalIOStmt (p CppSrcCode CppHdrCode) Statement Value where
  -- Another Maybe/State combination
  printSt :: Bool
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
printSt Bool
nl Maybe (VS (p CppSrcCode CppHdrCode Value))
f VS (p CppSrcCode CppHdrCode Value)
p VS (p CppSrcCode CppHdrCode Value)
v = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2
    (Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
InternalIOStmt r stmt val =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
printSt Bool
nl ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value))
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (VS (CppSrcCode Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
f))
    (Bool
-> Maybe (HdrState ValueState Value)
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
InternalIOStmt r stmt val =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
printSt Bool
nl ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value)
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (HdrState ValueState Value)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
f))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
p) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)

instance (Pair p) => InternalControlStmt (p CppSrcCode CppHdrCode) Statement Value where
  multiReturn :: [VS (p CppSrcCode CppHdrCode Value)]
-> MS (p CppSrcCode CppHdrCode Statement)
multiReturn = ([VS (CppSrcCode Value)] -> SrcState MethodState Statement)
-> ([HdrState ValueState Value] -> HdrState MethodState Statement)
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [VS (CppSrcCode Value)] -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
InternalControlStmt r stmt val =>
[VS (r val)] -> MS (r stmt)
multiReturn [HdrState ValueState Value] -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
InternalControlStmt r stmt val =>
[VS (r val)] -> MS (r stmt)
multiReturn ([PairState MethodState p Value]
 -> MS (p CppSrcCode CppHdrCode Statement))
-> ([VS (p CppSrcCode CppHdrCode Value)]
    -> [PairState MethodState p Value])
-> [VS (p CppSrcCode CppHdrCode Value)]
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS)

instance (Pair p) => RenderStatement (p CppSrcCode CppHdrCode) Statement where
  stmt :: MS (p CppSrcCode CppHdrCode Statement)
-> MS (p CppSrcCode CppHdrCode Statement)
stmt = (SrcState MethodState Statement -> SrcState MethodState Statement)
-> (HdrState MethodState Statement
    -> HdrState MethodState Statement)
-> MS (p CppSrcCode CppHdrCode Statement)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState MethodState Statement -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
MS (r stmt) -> MS (r stmt)
stmt HdrState MethodState Statement -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
MS (r stmt) -> MS (r stmt)
stmt
  loopStmt :: MS (p CppSrcCode CppHdrCode Statement)
-> MS (p CppSrcCode CppHdrCode Statement)
loopStmt = (SrcState MethodState Statement -> SrcState MethodState Statement)
-> (HdrState MethodState Statement
    -> HdrState MethodState Statement)
-> MS (p CppSrcCode CppHdrCode Statement)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState MethodState Statement -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
MS (r stmt) -> MS (r stmt)
loopStmt HdrState MethodState Statement -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
MS (r stmt) -> MS (r stmt)
loopStmt
  stmtFromData :: Doc -> Terminator -> MS (p CppSrcCode CppHdrCode Statement)
stmtFromData Doc
d Terminator
t = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (Doc -> Terminator -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
Doc -> Terminator -> MS (r stmt)
stmtFromData Doc
d Terminator
t) (Doc -> Terminator -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
Doc -> Terminator -> MS (r stmt)
stmtFromData Doc
d Terminator
t)

instance (Pair p) => StatementElim (p CppSrcCode CppHdrCode) Statement where
  statement :: p CppSrcCode CppHdrCode Statement -> Doc
statement p CppSrcCode CppHdrCode Statement
s = CppSrcCode Statement -> Doc
forall {k} (r :: k -> *) (stmt :: k).
StatementElim r stmt =>
r stmt -> Doc
RC.statement (CppSrcCode Statement -> Doc) -> CppSrcCode Statement -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Statement -> CppSrcCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Statement
s
  statementTerm :: p CppSrcCode CppHdrCode Statement -> Terminator
statementTerm p CppSrcCode CppHdrCode Statement
s = CppSrcCode Statement -> Terminator
forall {k} (r :: k -> *) (stmt :: k).
StatementElim r stmt =>
r stmt -> Terminator
statementTerm (CppSrcCode Statement -> Terminator)
-> CppSrcCode Statement -> Terminator
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Statement -> CppSrcCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Statement
s

instance (Pair p) => EmptyStatement (p CppSrcCode CppHdrCode) Statement where
  emptyStmt :: MS (p CppSrcCode CppHdrCode Statement)
emptyStmt = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance (Pair p) => MultiStatement (p CppSrcCode CppHdrCode) Statement where
  multi :: [MS (p CppSrcCode CppHdrCode Statement)]
-> MS (p CppSrcCode CppHdrCode Statement)
multi = ([SrcState MethodState Statement]
 -> SrcState MethodState Statement)
-> ([HdrState MethodState Statement]
    -> HdrState MethodState Statement)
-> [MS (p CppSrcCode CppHdrCode Statement)]
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState MethodState Statement] -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi [HdrState MethodState Statement] -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi

instance (Pair p) => ValueStatement (p CppSrcCode CppHdrCode) Statement Value where
  valStmt :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
valStmt = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ValueStatement r stmt val =>
VS (r val) -> MS (r stmt)
valStmt HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ValueStatement r stmt val =>
VS (r val) -> MS (r stmt)
valStmt (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode Statement))
-> (VS (p CppSrcCode CppHdrCode Value)
    -> PairState MethodState p Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS

instance (Pair p) => AssignStatement (p CppSrcCode CppHdrCode) Statement Variable Value where
  assign :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
assign VS (p CppSrcCode CppHdrCode Variable)
vr VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
assign HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
assign (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
vl)
  &-= :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
(&-=) VS (p CppSrcCode CppHdrCode Variable)
vr VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
(&-=) HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
(&-=) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
vl)
  &+= :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
(&+=) VS (p CppSrcCode CppHdrCode Variable)
vr VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
(&+=) HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
(&+=) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
vl)
  &++ :: VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode Statement)
(&++) VS (p CppSrcCode CppHdrCode Variable)
vl = (SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> MS (r stmt)
(&++) HdrState ValueState Variable -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> MS (r stmt)
(&++) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vl)
  &-- :: VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode Statement)
(&--) VS (p CppSrcCode CppHdrCode Variable)
vl = (SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> MS (r stmt)
(&--) HdrState ValueState Variable -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> MS (r stmt)
(&--) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vl)

instance (Pair p) => DeclStatement (p CppSrcCode CppHdrCode) Body Statement Variable ScopeData Value where
  varDec :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> MS (p CppSrcCode CppHdrCode Statement)
varDec VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp = (SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
`varDec` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
`varDec` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr)
  varDecDef :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
varDecDef VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
`varDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
`varDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
vl)
  setDec :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> MS (p CppSrcCode CppHdrCode Statement)
setDec VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp = (SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
`setDec` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
`setDec` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr)
  setDecDef :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
setDecDef VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
`setDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
`setDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
vl)
  listDec :: Integer
-> VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> MS (p CppSrcCode CppHdrCode Statement)
listDec Integer
n VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp = (SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (\SrcState ValueState Variable
v -> Integer
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
Integer -> VS (r var) -> r scope -> MS (r stmt)
listDec Integer
n SrcState ValueState Variable
v (p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp))
    (\HdrState ValueState Variable
v -> Integer
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
Integer -> VS (r var) -> r scope -> MS (r stmt)
listDec Integer
n HdrState ValueState Variable
v (p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr)
  listDecDef :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> [VS (p CppSrcCode CppHdrCode Value)]
-> MS (p CppSrcCode CppHdrCode Statement)
listDecDef VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp [VS (p CppSrcCode CppHdrCode Value)]
vs = (SrcState ValueState Variable
 -> [VS (CppSrcCode Value)] -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> [HdrState ValueState Value] -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
`listDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
`listDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Value)]
vs)
  arrayDec :: Integer
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> MS (p CppSrcCode CppHdrCode Statement)
arrayDec Integer
n VS (p CppSrcCode CppHdrCode Value)
dflt VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (\SrcState ValueState Variable
v VS (CppSrcCode Value)
d -> Integer
-> VS (CppSrcCode Value)
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
Integer -> VS (r val) -> VS (r var) -> r scope -> MS (r stmt)
arrayDec Integer
n VS (CppSrcCode Value)
d SrcState ValueState Variable
v (p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp))
    (\HdrState ValueState Variable
v HdrState ValueState Value
d -> Integer
-> HdrState ValueState Value
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
Integer -> VS (r val) -> VS (r var) -> r scope -> MS (r stmt)
arrayDec Integer
n HdrState ValueState Value
d HdrState ValueState Variable
v (p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
dflt)
  arrayDecDef :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> [VS (p CppSrcCode CppHdrCode Value)]
-> MS (p CppSrcCode CppHdrCode Statement)
arrayDecDef VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp [VS (p CppSrcCode CppHdrCode Value)]
vs = (SrcState ValueState Variable
 -> [VS (CppSrcCode Value)] -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> [HdrState ValueState Value] -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
`arrayDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
`arrayDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Value)]
vs)
  constDecDef :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
constDecDef VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
`constDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
`constDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
vl)
  funcDecDef :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
funcDecDef VS (p CppSrcCode CppHdrCode Variable)
v p CppSrcCode CppHdrCode ScopeData
scp [VS (p CppSrcCode CppHdrCode Variable)]
ps = (SrcState ValueState Variable
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> [VS (r var)] -> MS (r bod) -> MS (r stmt)
`funcDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> [VS (r var)] -> MS (r bod) -> MS (r stmt)
`funcDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
v) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
ps)

instance (Pair p) => OODeclStatement (p CppSrcCode CppHdrCode) Statement Variable ScopeData Value where
  objDecDef :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
objDecDef VS (p CppSrcCode CppHdrCode Variable)
o p CppSrcCode CppHdrCode ScopeData
scp VS (p CppSrcCode CppHdrCode Value)
v = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (scope :: k)
       (val :: k).
OODeclStatement r stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
`objDecDef` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp) (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (scope :: k)
       (val :: k).
OODeclStatement r stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
`objDecDef` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
o) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)
  objDecNew :: VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> [VS (p CppSrcCode CppHdrCode Value)]
-> MS (p CppSrcCode CppHdrCode Statement)
objDecNew VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp [VS (p CppSrcCode CppHdrCode Value)]
vs = (SrcState ValueState Variable
 -> [VS (CppSrcCode Value)] -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> [HdrState ValueState Value] -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List (SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (scope :: k)
       (val :: k).
OODeclStatement r stmt var scope val =>
VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
`objDecNew` p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp)
    (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (scope :: k)
       (val :: k).
OODeclStatement r stmt var scope val =>
VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
`objDecNew` p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Value)]
vs)
  extObjDecNew :: String
-> VS (p CppSrcCode CppHdrCode Variable)
-> p CppSrcCode CppHdrCode ScopeData
-> [VS (p CppSrcCode CppHdrCode Value)]
-> MS (p CppSrcCode CppHdrCode Statement)
extObjDecNew String
lib VS (p CppSrcCode CppHdrCode Variable)
vr p CppSrcCode CppHdrCode ScopeData
scp [VS (p CppSrcCode CppHdrCode Value)]
vs = (SrcState ValueState Variable
 -> [VS (CppSrcCode Value)] -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> [HdrState ValueState Value] -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List
    (\SrcState ValueState Variable
vr' -> String
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (scope :: k)
       (val :: k).
OODeclStatement r stmt var scope val =>
String -> VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
extObjDecNew String
lib SrcState ValueState Variable
vr' (p CppSrcCode CppHdrCode ScopeData -> CppSrcCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ScopeData
scp))
    (\HdrState ValueState Variable
vr' -> String
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (scope :: k)
       (val :: k).
OODeclStatement r stmt var scope val =>
String -> VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
extObjDecNew String
lib HdrState ValueState Variable
vr' (p CppSrcCode CppHdrCode ScopeData -> CppHdrCode ScopeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ScopeData
scp))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Value)]
vs)

instance (Pair p) => PrintConsole (p CppSrcCode CppHdrCode) Statement Value where
  print :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
print = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintConsole r stmt val =>
VS (r val) -> MS (r stmt)
print HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintConsole r stmt val =>
VS (r val) -> MS (r stmt)
print (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode Statement))
-> (VS (p CppSrcCode CppHdrCode Value)
    -> PairState MethodState p Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS
  printLn :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
printLn = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintConsole r stmt val =>
VS (r val) -> MS (r stmt)
printLn HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintConsole r stmt val =>
VS (r val) -> MS (r stmt)
printLn (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode Statement))
-> (VS (p CppSrcCode CppHdrCode Value)
    -> PairState MethodState p Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS
  printStr :: String -> MS (p CppSrcCode CppHdrCode Statement)
printStr String
s = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintConsole r stmt val =>
String -> MS (r stmt)
printStr String
s) (String -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintConsole r stmt val =>
String -> MS (r stmt)
printStr String
s)
  printStrLn :: String -> MS (p CppSrcCode CppHdrCode Statement)
printStrLn String
s = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintConsole r stmt val =>
String -> MS (r stmt)
printStrLn String
s) (String -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintConsole r stmt val =>
String -> MS (r stmt)
printStrLn String
s)

instance (Pair p) => ReadConsole (p CppSrcCode CppHdrCode) Statement Variable where
  getInput :: VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode Statement)
getInput = (SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k).
ReadConsole r stmt var =>
VS (r var) -> MS (r stmt)
getInput HdrState ValueState Variable -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k).
ReadConsole r stmt var =>
VS (r var) -> MS (r stmt)
getInput (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode Statement))
-> (VS (p CppSrcCode CppHdrCode Variable)
    -> PairState MethodState p Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS
  discardInput :: MS (p CppSrcCode CppHdrCode Statement)
discardInput = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k).
ReadConsole r stmt var =>
MS (r stmt)
discardInput HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k).
ReadConsole r stmt var =>
MS (r stmt)
discardInput

instance (Pair p) => FileHandling (p CppSrcCode CppHdrCode) Statement Variable Value where
  openFileR :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
openFileR VS (p CppSrcCode CppHdrCode Variable)
f VS (p CppSrcCode CppHdrCode Value)
v = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FileHandling r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
openFileR HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FileHandling r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
openFileR (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)
  openFileW :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
openFileW VS (p CppSrcCode CppHdrCode Variable)
f VS (p CppSrcCode CppHdrCode Value)
v = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FileHandling r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
openFileW HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FileHandling r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
openFileW (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)
  openFileA :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
openFileA VS (p CppSrcCode CppHdrCode Variable)
f VS (p CppSrcCode CppHdrCode Value)
v = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FileHandling r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
openFileA HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FileHandling r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
openFileA (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)
  closeFile :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
closeFile = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FileHandling r stmt var val =>
VS (r val) -> MS (r stmt)
closeFile HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FileHandling r stmt var val =>
VS (r val) -> MS (r stmt)
closeFile (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode Statement))
-> (VS (p CppSrcCode CppHdrCode Value)
    -> PairState MethodState p Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS

instance (Pair p) => PrintFile (p CppSrcCode CppHdrCode) Statement Value where
  printFile :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
printFile VS (p CppSrcCode CppHdrCode Value)
f VS (p CppSrcCode CppHdrCode Value)
v = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintFile r stmt val =>
VS (r val) -> VS (r val) -> MS (r stmt)
printFile HdrState ValueState Value
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintFile r stmt val =>
VS (r val) -> VS (r val) -> MS (r stmt)
printFile (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)
  printFileLn :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
printFileLn VS (p CppSrcCode CppHdrCode Value)
f VS (p CppSrcCode CppHdrCode Value)
v = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintFile r stmt val =>
VS (r val) -> VS (r val) -> MS (r stmt)
printFileLn HdrState ValueState Value
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintFile r stmt val =>
VS (r val) -> VS (r val) -> MS (r stmt)
printFileLn (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)
  printFileStr :: VS (p CppSrcCode CppHdrCode Value)
-> String -> MS (p CppSrcCode CppHdrCode Statement)
printFileStr VS (p CppSrcCode CppHdrCode Value)
f String
s = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (VS (CppSrcCode Value) -> String -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintFile r stmt val =>
VS (r val) -> String -> MS (r stmt)
`printFileStr` String
s) (HdrState ValueState Value
-> String -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintFile r stmt val =>
VS (r val) -> String -> MS (r stmt)
`printFileStr` String
s)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
f)
  printFileStrLn :: VS (p CppSrcCode CppHdrCode Value)
-> String -> MS (p CppSrcCode CppHdrCode Statement)
printFileStrLn VS (p CppSrcCode CppHdrCode Value)
f String
s = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (VS (CppSrcCode Value) -> String -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintFile r stmt val =>
VS (r val) -> String -> MS (r stmt)
`printFileStrLn` String
s) (HdrState ValueState Value
-> String -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
PrintFile r stmt val =>
VS (r val) -> String -> MS (r stmt)
`printFileStrLn` String
s)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
f)

instance (Pair p) => ReadFile (p CppSrcCode CppHdrCode) Statement Variable Value where
  getFileInput :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode Statement)
getFileInput VS (p CppSrcCode CppHdrCode Value)
f VS (p CppSrcCode CppHdrCode Variable)
v = (VS (CppSrcCode Value)
 -> SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> VS (r var) -> MS (r stmt)
getFileInput HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> VS (r var) -> MS (r stmt)
getFileInput (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
f)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
v)
  discardFileInput :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
discardFileInput = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> MS (r stmt)
discardFileInput HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> MS (r stmt)
discardFileInput (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode Statement))
-> (VS (p CppSrcCode CppHdrCode Value)
    -> PairState MethodState p Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS
  getFileInputLine :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode Statement)
getFileInputLine VS (p CppSrcCode CppHdrCode Value)
f VS (p CppSrcCode CppHdrCode Variable)
v = (VS (CppSrcCode Value)
 -> SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> VS (r var) -> MS (r stmt)
getFileInputLine HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> VS (r var) -> MS (r stmt)
getFileInputLine
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
v)
  discardFileLine :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
discardFileLine = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> MS (r stmt)
discardFileLine HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> MS (r stmt)
discardFileLine (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode Statement))
-> (VS (p CppSrcCode CppHdrCode Value)
    -> PairState MethodState p Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS
  getFileInputAll :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode Statement)
getFileInputAll VS (p CppSrcCode CppHdrCode Value)
f VS (p CppSrcCode CppHdrCode Variable)
v = (VS (CppSrcCode Value)
 -> SrcState ValueState Variable -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Variable -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> VS (r var) -> MS (r stmt)
getFileInputAll HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
ReadFile r stmt var val =>
VS (r val) -> VS (r var) -> MS (r stmt)
getFileInputAll
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
v)

instance (Pair p) => StringStatement (p CppSrcCode CppHdrCode) Statement Variable Value where
  stringSplit :: Char
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
stringSplit Char
d VS (p CppSrcCode CppHdrCode Variable)
vnew VS (p CppSrcCode CppHdrCode Value)
s = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (Char
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
StringStatement r stmt var val =>
Char -> VS (r var) -> VS (r val) -> MS (r stmt)
stringSplit Char
d) (Char
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
StringStatement r stmt var val =>
Char -> VS (r var) -> VS (r val) -> MS (r stmt)
stringSplit Char
d)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
vnew) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
s)

  stringListVals :: [VS (p CppSrcCode CppHdrCode Variable)]
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
stringListVals [VS (p CppSrcCode CppHdrCode Variable)]
vars VS (p CppSrcCode CppHdrCode Value)
sl = ([SrcState ValueState Variable]
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> ([HdrState ValueState Variable]
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> [PairState MethodState p Variable]
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [SrcState ValueState Variable]
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
StringStatement r stmt var val =>
[VS (r var)] -> VS (r val) -> MS (r stmt)
stringListVals [HdrState ValueState Variable]
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
StringStatement r stmt var val =>
[VS (r var)] -> VS (r val) -> MS (r stmt)
stringListVals
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
vars) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
sl)
  stringListLists :: [VS (p CppSrcCode CppHdrCode Variable)]
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
stringListLists [VS (p CppSrcCode CppHdrCode Variable)]
lsts VS (p CppSrcCode CppHdrCode Value)
sl = ([SrcState ValueState Variable]
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> ([HdrState ValueState Variable]
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> [PairState MethodState p Variable]
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [SrcState ValueState Variable]
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
StringStatement r stmt var val =>
[VS (r var)] -> VS (r val) -> MS (r stmt)
stringListLists [HdrState ValueState Variable]
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
StringStatement r stmt var val =>
[VS (r var)] -> VS (r val) -> MS (r stmt)
stringListLists
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
lsts) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
sl)

instance (Pair p) => FuncAppStatement (p CppSrcCode CppHdrCode) Statement Variable Value where
  inOutCall :: InOutCall (p CppSrcCode CppHdrCode) Statement Variable Value
inOutCall String
n [VS (p CppSrcCode CppHdrCode Value)]
is [VS (p CppSrcCode CppHdrCode Variable)]
os [VS (p CppSrcCode CppHdrCode Variable)]
bs = ([VS (CppSrcCode Value)]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Statement)
-> ([HdrState ValueState Value]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Statement)
-> [PairState MethodState p Value]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> PairState MethodState p Statement
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists (InOutCall CppSrcCode Statement Variable Value
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FuncAppStatement r stmt var val =>
InOutCall r stmt var val
inOutCall String
n) (InOutCall CppHdrCode Statement Variable Value
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FuncAppStatement r stmt var val =>
InOutCall r stmt var val
inOutCall String
n)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Value)]
is) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
os)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
bs)
  extInOutCall :: String
-> InOutCall (p CppSrcCode CppHdrCode) Statement Variable Value
extInOutCall String
m String
n [VS (p CppSrcCode CppHdrCode Value)]
is [VS (p CppSrcCode CppHdrCode Variable)]
os [VS (p CppSrcCode CppHdrCode Variable)]
bs = ([VS (CppSrcCode Value)]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Statement)
-> ([HdrState ValueState Value]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Statement)
-> [PairState MethodState p Value]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> PairState MethodState p Statement
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists (String -> InOutCall CppSrcCode Statement Variable Value
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FuncAppStatement r stmt var val =>
String -> InOutCall r stmt var val
extInOutCall String
m String
n) (String -> InOutCall CppHdrCode Statement Variable Value
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
FuncAppStatement r stmt var val =>
String -> InOutCall r stmt var val
extInOutCall String
m String
n)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Value)]
is) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
os)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
bs)

instance (Pair p) => OOFuncAppStatement (p CppSrcCode CppHdrCode) Statement Variable Value where
  selfInOutCall :: InOutCall (p CppSrcCode CppHdrCode) Statement Variable Value
selfInOutCall String
n [VS (p CppSrcCode CppHdrCode Value)]
is [VS (p CppSrcCode CppHdrCode Variable)]
os [VS (p CppSrcCode CppHdrCode Variable)]
bs = ([VS (CppSrcCode Value)]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Statement)
-> ([HdrState ValueState Value]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Statement)
-> [PairState MethodState p Value]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> PairState MethodState p Statement
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists (InOutCall CppSrcCode Statement Variable Value
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
OOFuncAppStatement r stmt var val =>
InOutCall r stmt var val
selfInOutCall String
n) (InOutCall CppHdrCode Statement Variable Value
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
OOFuncAppStatement r stmt var val =>
InOutCall r stmt var val
selfInOutCall String
n)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> [VS (p CppSrcCode CppHdrCode Value)]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Value)]
is) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
os)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
bs)

instance (Pair p) => CommentStatement (p CppSrcCode CppHdrCode) Statement where
  comment :: String -> MS (p CppSrcCode CppHdrCode Statement)
comment String
cmt = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
CommentStatement r stmt =>
String -> MS (r stmt)
comment String
cmt) (String -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
CommentStatement r stmt =>
String -> MS (r stmt)
comment String
cmt)

instance (Pair p) => ControlStatement (p CppSrcCode CppHdrCode) Body Statement Variable Value where
  break :: MS (p CppSrcCode CppHdrCode Statement)
break = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r stmt)
break HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r stmt)
break
  continue :: MS (p CppSrcCode CppHdrCode Statement)
continue = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r stmt)
continue HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r stmt)
continue

  returnStmt :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
returnStmt = (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r stmt)
returnStmt HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r stmt)
returnStmt (PairState MethodState p Value
 -> MS (p CppSrcCode CppHdrCode Statement))
-> (VS (p CppSrcCode CppHdrCode Value)
    -> PairState MethodState p Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS

  throw :: String -> MS (p CppSrcCode CppHdrCode Statement)
throw String
errMsg = (CppSrcCode Statement
 -> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement)
-> SrcState MethodState Statement
-> HdrState MethodState Statement
-> MS (p CppSrcCode CppHdrCode Statement)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Statement
-> CppHdrCode Statement -> p CppSrcCode CppHdrCode Statement
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
String -> MS (r stmt)
throw String
errMsg) (String -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
String -> MS (r stmt)
throw String
errMsg)

  ifCond :: [(VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
ifCond [(VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))]
bs = ([VS (CppSrcCode Value)]
 -> [SrcState MethodState Doc]
 -> SrcState MethodState Doc
 -> SrcState MethodState Statement)
-> ([HdrState ValueState Value]
    -> [HdrState MethodState Doc]
    -> HdrState MethodState Doc
    -> HdrState MethodState Statement)
-> [PairState MethodState p Value]
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pair2Lists1Val
    (\[VS (CppSrcCode Value)]
cs [SrcState MethodState Doc]
bods -> [(VS (CppSrcCode Value), SrcState MethodState Doc)]
-> SrcState MethodState Doc -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
[(VS (r val), MS (r bod))] -> MS (r bod) -> MS (r stmt)
ifCond ([VS (CppSrcCode Value)]
-> [SrcState MethodState Doc]
-> [(VS (CppSrcCode Value), SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [VS (CppSrcCode Value)]
cs [SrcState MethodState Doc]
bods))
    (\[HdrState ValueState Value]
cs [HdrState MethodState Doc]
bods -> [(HdrState ValueState Value, HdrState MethodState Doc)]
-> HdrState MethodState Doc -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
[(VS (r val), MS (r bod))] -> MS (r bod) -> MS (r stmt)
ifCond ([HdrState ValueState Value]
-> [HdrState MethodState Doc]
-> [(HdrState ValueState Value, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState Value]
cs [HdrState MethodState Doc]
bods))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> ((VS (p CppSrcCode CppHdrCode Value),
     MS (p CppSrcCode CppHdrCode Doc))
    -> VS (p CppSrcCode CppHdrCode Value))
-> (VS (p CppSrcCode CppHdrCode Value),
    MS (p CppSrcCode CppHdrCode Doc))
-> PairState MethodState p Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (VS (p CppSrcCode CppHdrCode Value),
 MS (p CppSrcCode CppHdrCode Doc))
-> VS (p CppSrcCode CppHdrCode Value)
forall a b. (a, b) -> a
fst ((VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))
 -> PairState MethodState p Value)
-> [(VS (p CppSrcCode CppHdrCode Value),
     MS (p CppSrcCode CppHdrCode Doc))]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))]
bs) ((VS (p CppSrcCode CppHdrCode Value),
 MS (p CppSrcCode CppHdrCode Doc))
-> MS (p CppSrcCode CppHdrCode Doc)
forall a b. (a, b) -> b
snd ((VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))
 -> MS (p CppSrcCode CppHdrCode Doc))
-> [(VS (p CppSrcCode CppHdrCode Value),
     MS (p CppSrcCode CppHdrCode Doc))]
-> [MS (p CppSrcCode CppHdrCode Doc)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))]
bs)
  switch :: VS (p CppSrcCode CppHdrCode Value)
-> [(VS (p CppSrcCode CppHdrCode Value),
     MS (p CppSrcCode CppHdrCode Doc))]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
switch VS (p CppSrcCode CppHdrCode Value)
v [(VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))]
cs = (VS (CppSrcCode Value)
 -> [VS (CppSrcCode Value)]
 -> [SrcState MethodState Doc]
 -> SrcState MethodState Doc
 -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> [HdrState ValueState Value]
    -> [HdrState MethodState Doc]
    -> HdrState MethodState Doc
    -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> [PairState MethodState p Value]
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pairVal2ListsVal
    (\VS (CppSrcCode Value)
s [VS (CppSrcCode Value)]
cv [SrcState MethodState Doc]
cb -> VS (CppSrcCode Value)
-> [(VS (CppSrcCode Value), SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val)
-> [(VS (r val), MS (r bod))] -> MS (r bod) -> MS (r stmt)
switch VS (CppSrcCode Value)
s ([VS (CppSrcCode Value)]
-> [SrcState MethodState Doc]
-> [(VS (CppSrcCode Value), SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [VS (CppSrcCode Value)]
cv [SrcState MethodState Doc]
cb))
    (\HdrState ValueState Value
s [HdrState ValueState Value]
cv [HdrState MethodState Doc]
cb -> HdrState ValueState Value
-> [(HdrState ValueState Value, HdrState MethodState Doc)]
-> HdrState MethodState Doc
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val)
-> [(VS (r val), MS (r bod))] -> MS (r bod) -> MS (r stmt)
switch HdrState ValueState Value
s ([HdrState ValueState Value]
-> [HdrState MethodState Doc]
-> [(HdrState ValueState Value, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState Value]
cv [HdrState MethodState Doc]
cb))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> ((VS (p CppSrcCode CppHdrCode Value),
     MS (p CppSrcCode CppHdrCode Doc))
    -> VS (p CppSrcCode CppHdrCode Value))
-> (VS (p CppSrcCode CppHdrCode Value),
    MS (p CppSrcCode CppHdrCode Doc))
-> PairState MethodState p Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (VS (p CppSrcCode CppHdrCode Value),
 MS (p CppSrcCode CppHdrCode Doc))
-> VS (p CppSrcCode CppHdrCode Value)
forall a b. (a, b) -> a
fst ((VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))
 -> PairState MethodState p Value)
-> [(VS (p CppSrcCode CppHdrCode Value),
     MS (p CppSrcCode CppHdrCode Doc))]
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))]
cs) ((VS (p CppSrcCode CppHdrCode Value),
 MS (p CppSrcCode CppHdrCode Doc))
-> MS (p CppSrcCode CppHdrCode Doc)
forall a b. (a, b) -> b
snd ((VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))
 -> MS (p CppSrcCode CppHdrCode Doc))
-> [(VS (p CppSrcCode CppHdrCode Value),
     MS (p CppSrcCode CppHdrCode Doc))]
-> [MS (p CppSrcCode CppHdrCode Doc)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(VS (p CppSrcCode CppHdrCode Value),
  MS (p CppSrcCode CppHdrCode Doc))]
cs)

  ifExists :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
ifExists VS (p CppSrcCode CppHdrCode Value)
v = (VS (CppSrcCode Value)
 -> SrcState MethodState Doc
 -> SrcState MethodState Doc
 -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState MethodState Doc
    -> HdrState MethodState Doc
    -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r bod) -> MS (r bod) -> MS (r stmt)
ifExists HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState Doc
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r bod) -> MS (r bod) -> MS (r stmt)
ifExists (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)

  for :: MS (p CppSrcCode CppHdrCode Statement)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
for MS (p CppSrcCode CppHdrCode Statement)
i VS (p CppSrcCode CppHdrCode Value)
initv = (SrcState MethodState Statement
 -> VS (CppSrcCode Value)
 -> SrcState MethodState Statement
 -> SrcState MethodState Doc
 -> SrcState MethodState Statement)
-> (HdrState MethodState Statement
    -> HdrState ValueState Value
    -> HdrState MethodState Statement
    -> HdrState MethodState Doc
    -> HdrState MethodState Statement)
-> MS (p CppSrcCode CppHdrCode Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e)
-> (HdrState r a
    -> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e)
-> PairState v p a
-> PairState v p b
-> PairState v p c
-> PairState v p d
-> PairState v p e
pair4 SrcState MethodState Statement
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r stmt)
-> VS (r val) -> MS (r stmt) -> MS (r bod) -> MS (r stmt)
for HdrState MethodState Statement
-> HdrState ValueState Value
-> HdrState MethodState Statement
-> HdrState MethodState Doc
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r stmt)
-> VS (r val) -> MS (r stmt) -> MS (r bod) -> MS (r stmt)
for MS (p CppSrcCode CppHdrCode Statement)
i (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
initv)
  forRange :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forRange VS (p CppSrcCode CppHdrCode Variable)
i VS (p CppSrcCode CppHdrCode Value)
initv VS (p CppSrcCode CppHdrCode Value)
finalv VS (p CppSrcCode CppHdrCode Value)
stepv = (SrcState ValueState Variable
 -> VS (CppSrcCode Value)
 -> VS (CppSrcCode Value)
 -> VS (CppSrcCode Value)
 -> SrcState MethodState Doc
 -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState ValueState Value
    -> HdrState MethodState Doc
    -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> SrcState t c
 -> SrcState u d
 -> SrcState v e
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> HdrState t c
    -> HdrState u d
    -> HdrState v e
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> PairState w p c
-> PairState w p d
-> PairState w p e
-> PairState w p f
pair5 SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r var)
-> VS (r val)
-> VS (r val)
-> VS (r val)
-> MS (r bod)
-> MS (r stmt)
forRange HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r var)
-> VS (r val)
-> VS (r val)
-> VS (r val)
-> MS (r bod)
-> MS (r stmt)
forRange (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
i)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
initv) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
finalv) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
stepv)
  forEach :: VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forEach VS (p CppSrcCode CppHdrCode Variable)
e' VS (p CppSrcCode CppHdrCode Value)
v MS (p CppSrcCode CppHdrCode Doc)
b = do
    loop <- (SrcState ValueState Variable
 -> VS (CppSrcCode Value)
 -> SrcState MethodState Doc
 -> SrcState MethodState Statement)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value
    -> HdrState MethodState Doc
    -> HdrState MethodState Statement)
-> PairState MethodState p Variable
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r var) -> VS (r val) -> MS (r bod) -> MS (r stmt)
forEach HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r var) -> VS (r val) -> MS (r bod) -> MS (r stmt)
forEach (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
e') (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v) MS (p CppSrcCode CppHdrCode Doc)
b
    toState loop
  while :: VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
while VS (p CppSrcCode CppHdrCode Value)
v = (VS (CppSrcCode Value)
 -> SrcState MethodState Doc -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState MethodState Doc -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> SrcState MethodState Doc -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r bod) -> MS (r stmt)
while HdrState ValueState Value
-> HdrState MethodState Doc -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r bod) -> MS (r stmt)
while (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
v)

  tryCatch :: MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
tryCatch = (SrcState MethodState Doc
 -> SrcState MethodState Doc -> SrcState MethodState Statement)
-> (HdrState MethodState Doc
    -> HdrState MethodState Doc -> HdrState MethodState Statement)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState MethodState Doc
-> SrcState MethodState Doc -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r bod) -> MS (r bod) -> MS (r stmt)
tryCatch HdrState MethodState Doc
-> HdrState MethodState Doc -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r bod) -> MS (r bod) -> MS (r stmt)
tryCatch

  assert :: VS (p CppSrcCode CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value)
-> MS (p CppSrcCode CppHdrCode Statement)
assert VS (p CppSrcCode CppHdrCode Value)
cond VS (p CppSrcCode CppHdrCode Value)
errMsg = (VS (CppSrcCode Value)
 -> VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (HdrState ValueState Value
    -> HdrState ValueState Value -> HdrState MethodState Statement)
-> PairState MethodState p Value
-> PairState MethodState p Value
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> VS (r val) -> MS (r stmt)
assert HdrState ValueState Value
-> HdrState ValueState Value -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> VS (r val) -> MS (r stmt)
assert (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
cond) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Value)
errMsg)

instance (Pair p) => ObserverPattern (p CppSrcCode CppHdrCode) Statement TypeData where
  notifyObservers :: VS (p CppSrcCode CppHdrCode FuncData)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> MS (p CppSrcCode CppHdrCode Statement)
notifyObservers VS (p CppSrcCode CppHdrCode FuncData)
f VS (p CppSrcCode CppHdrCode TypeData)
t = (SrcState ValueState FuncData
 -> State ValueState (CppSrcCode TypeData)
 -> SrcState MethodState Statement)
-> (HdrState ValueState FuncData
    -> State ValueState (CppHdrCode TypeData)
    -> HdrState MethodState Statement)
-> PairState MethodState p FuncData
-> PairState MethodState p TypeData
-> MS (p CppSrcCode CppHdrCode Statement)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ValueState FuncData
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState Statement
forall (r :: * -> *) stmt typ.
ObserverPattern r stmt typ =>
VS (r FuncData) -> VS (r typ) -> MS (r stmt)
notifyObservers HdrState ValueState FuncData
-> State ValueState (CppHdrCode TypeData)
-> HdrState MethodState Statement
forall (r :: * -> *) stmt typ.
ObserverPattern r stmt typ =>
VS (r FuncData) -> VS (r typ) -> MS (r stmt)
notifyObservers
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode FuncData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode FuncData)
-> PairState MethodState p FuncData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode FuncData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode FuncData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode FuncData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode FuncData)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode TypeData)
t)

instance (Pair p) => StrategyPattern (p CppSrcCode CppHdrCode) Body Block Variable Value where
  -- How I handle values with both State and Maybe might cause problems later on,
  -- because it will make the state transitions run twice for the value in the
  -- Maybe. For now, given what we store in the State for Values/Variables, this
  -- doesn't matter. If problems occur in the future, an alternative way to do
  -- this (which wouldn't duplicate state transitions) would be to unwrap the
  -- maybes, pass them to a function like pair2, and then have the anonymous
  -- functions rewrap the values in Maybes. This would be messy so I don't want to
  -- do it unless there's a need.
  runStrategy :: String
-> [(String, MS (p CppSrcCode CppHdrCode Doc))]
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (VS (p CppSrcCode CppHdrCode Variable))
-> MS (p CppSrcCode CppHdrCode Doc)
runStrategy String
l [(String, MS (p CppSrcCode CppHdrCode Doc))]
strats Maybe (VS (p CppSrcCode CppHdrCode Value))
rv Maybe (VS (p CppSrcCode CppHdrCode Variable))
av = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [MS (p CppSrcCode CppHdrCode Doc)]
-> MS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List
    (\[SrcState MethodState Doc]
s -> String
-> [(String, SrcState MethodState Doc)]
-> Maybe (VS (CppSrcCode Value))
-> Maybe (SrcState ValueState Variable)
-> SrcState MethodState Doc
forall {k} (r :: k -> *) (bod :: k) (block :: k) (var :: k)
       (val :: k).
StrategyPattern r bod block var val =>
String
-> [(String, MS (r bod))]
-> Maybe (VS (r val))
-> Maybe (VS (r var))
-> MS (r block)
runStrategy String
l ([String]
-> [SrcState MethodState Doc]
-> [(String, SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, MS (p CppSrcCode CppHdrCode Doc)) -> String
forall a b. (a, b) -> a
fst ((String, MS (p CppSrcCode CppHdrCode Doc)) -> String)
-> [(String, MS (p CppSrcCode CppHdrCode Doc))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, MS (p CppSrcCode CppHdrCode Doc))]
strats) [SrcState MethodState Doc]
s) ((p CppSrcCode CppHdrCode Value -> CppSrcCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppSrcCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (VS (p CppSrcCode CppHdrCode Value) -> VS (CppSrcCode Value))
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (VS (CppSrcCode Value))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
rv)
      ((p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
-> SrcState ValueState Variable
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Variable -> CppSrcCode Variable
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (VS (p CppSrcCode CppHdrCode Variable)
 -> SrcState ValueState Variable)
-> Maybe (VS (p CppSrcCode CppHdrCode Variable))
-> Maybe (SrcState ValueState Variable)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Variable))
av))
    (\[HdrState MethodState Doc]
s -> String
-> [(String, HdrState MethodState Doc)]
-> Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Variable)
-> HdrState MethodState Doc
forall {k} (r :: k -> *) (bod :: k) (block :: k) (var :: k)
       (val :: k).
StrategyPattern r bod block var val =>
String
-> [(String, MS (r bod))]
-> Maybe (VS (r val))
-> Maybe (VS (r var))
-> MS (r block)
runStrategy String
l ([String]
-> [HdrState MethodState Doc]
-> [(String, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, MS (p CppSrcCode CppHdrCode Doc)) -> String
forall a b. (a, b) -> a
fst ((String, MS (p CppSrcCode CppHdrCode Doc)) -> String)
-> [(String, MS (p CppSrcCode CppHdrCode Doc))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, MS (p CppSrcCode CppHdrCode Doc))]
strats) [HdrState MethodState Doc]
s) ((p CppSrcCode CppHdrCode Value -> CppHdrCode Value)
-> VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Value -> CppHdrCode Value
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (VS (p CppSrcCode CppHdrCode Value) -> HdrState ValueState Value)
-> Maybe (VS (p CppSrcCode CppHdrCode Value))
-> Maybe (HdrState ValueState Value)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Value))
rv)
      ((p CppSrcCode CppHdrCode Variable -> CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
-> HdrState ValueState Variable
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode Variable -> CppHdrCode Variable
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (VS (p CppSrcCode CppHdrCode Variable)
 -> HdrState ValueState Variable)
-> Maybe (VS (p CppSrcCode CppHdrCode Variable))
-> Maybe (HdrState ValueState Variable)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe (VS (p CppSrcCode CppHdrCode Variable))
av)) ((String, MS (p CppSrcCode CppHdrCode Doc))
-> MS (p CppSrcCode CppHdrCode Doc)
forall a b. (a, b) -> b
snd ((String, MS (p CppSrcCode CppHdrCode Doc))
 -> MS (p CppSrcCode CppHdrCode Doc))
-> [(String, MS (p CppSrcCode CppHdrCode Doc))]
-> [MS (p CppSrcCode CppHdrCode Doc)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, MS (p CppSrcCode CppHdrCode Doc))]
strats)

instance (Pair p) => VisibilitySym (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) where
  private :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
private = CppSrcCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair CppSrcCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
private CppHdrCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
private
  public :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
public = CppSrcCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair CppSrcCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public CppHdrCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public

instance (Pair p) => RenderVisibility (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) where
  visibilityFromData :: VisibilityTag
-> Doc -> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
visibilityFromData VisibilityTag
s Doc
d = CppSrcCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (VisibilityTag -> Doc -> CppSrcCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k).
RenderVisibility r vis =>
VisibilityTag -> Doc -> r vis
visibilityFromData VisibilityTag
s Doc
d) (VisibilityTag -> Doc -> CppHdrCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k).
RenderVisibility r vis =>
VisibilityTag -> Doc -> r vis
visibilityFromData VisibilityTag
s Doc
d)

instance (Pair p) => VisibilityElim (p CppSrcCode CppHdrCode)
    (Doc, VisibilityTag) where
  visibility :: p CppSrcCode CppHdrCode (Doc, VisibilityTag) -> Doc
visibility p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s = CppSrcCode (Doc, VisibilityTag) -> Doc
forall {k} (r :: k -> *) (vis :: k).
VisibilityElim r vis =>
r vis -> Doc
RC.visibility (CppSrcCode (Doc, VisibilityTag) -> Doc)
-> CppSrcCode (Doc, VisibilityTag) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s

instance (Pair p) => MethodTypeSym (p CppSrcCode CppHdrCode) TypeData where
  mType :: VS (p CppSrcCode CppHdrCode TypeData)
-> MS (p CppSrcCode CppHdrCode TypeData)
mType = (State ValueState (CppSrcCode TypeData)
 -> SrcState MethodState TypeData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState MethodState TypeData)
-> MS (p CppSrcCode CppHdrCode TypeData)
-> MS (p CppSrcCode CppHdrCode TypeData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
forall {k} (r :: k -> *) (typ :: k).
MethodTypeSym r typ =>
VS (r typ) -> MS (r typ)
mType State ValueState (CppHdrCode TypeData)
-> HdrState MethodState TypeData
forall {k} (r :: k -> *) (typ :: k).
MethodTypeSym r typ =>
VS (r typ) -> MS (r typ)
mType (MS (p CppSrcCode CppHdrCode TypeData)
 -> MS (p CppSrcCode CppHdrCode TypeData))
-> (VS (p CppSrcCode CppHdrCode TypeData)
    -> MS (p CppSrcCode CppHdrCode TypeData))
-> VS (p CppSrcCode CppHdrCode TypeData)
-> MS (p CppSrcCode CppHdrCode TypeData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode TypeData)
-> MS (p CppSrcCode CppHdrCode TypeData)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS

instance (Pair p) => OOMethodTypeSym (p CppSrcCode CppHdrCode) TypeData where
  construct :: String -> MS (p CppSrcCode CppHdrCode TypeData)
construct String
n = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> SrcState MethodState TypeData
-> HdrState MethodState TypeData
-> MS (p CppSrcCode CppHdrCode TypeData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> SrcState MethodState TypeData
forall {k} (r :: k -> *) (typ :: k).
OOMethodTypeSym r typ =>
String -> MS (r typ)
construct String
n) (String -> HdrState MethodState TypeData
forall {k} (r :: k -> *) (typ :: k).
OOMethodTypeSym r typ =>
String -> MS (r typ)
construct String
n)

instance (Pair p) => ParameterSym (p CppSrcCode CppHdrCode) ParamData Variable where
  param :: VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode ParamData)
param = (SrcState ValueState Variable -> SrcState MethodState ParamData)
-> (HdrState ValueState Variable -> HdrState MethodState ParamData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode ParamData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
param HdrState ValueState Variable -> HdrState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
param (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode ParamData))
-> (VS (p CppSrcCode CppHdrCode Variable)
    -> PairState MethodState p Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode ParamData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS
  pointerParam :: VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode ParamData)
pointerParam = (SrcState ValueState Variable -> SrcState MethodState ParamData)
-> (HdrState ValueState Variable -> HdrState MethodState ParamData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode ParamData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
pointerParam HdrState ValueState Variable -> HdrState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
pointerParam (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode ParamData))
-> (VS (p CppSrcCode CppHdrCode Variable)
    -> PairState MethodState p Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode ParamData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS

instance (Pair p) => RenderParam (p CppSrcCode CppHdrCode) ParamData Variable where
  paramFromData :: VS (p CppSrcCode CppHdrCode Variable)
-> Doc -> MS (p CppSrcCode CppHdrCode ParamData)
paramFromData VS (p CppSrcCode CppHdrCode Variable)
v' Doc
d = (SrcState ValueState Variable -> SrcState MethodState ParamData)
-> (HdrState ValueState Variable -> HdrState MethodState ParamData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode ParamData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (SrcState ValueState Variable
-> Doc -> SrcState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
RenderParam r param var =>
VS (r var) -> Doc -> MS (r param)
`paramFromData` Doc
d) (HdrState ValueState Variable
-> Doc -> HdrState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
RenderParam r param var =>
VS (r var) -> Doc -> MS (r param)
`paramFromData` Doc
d) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode Variable)
v')

instance (Pair p) => ParamElim (p CppSrcCode CppHdrCode) ParamData TypeData where
  parameterName :: p CppSrcCode CppHdrCode ParamData -> String
parameterName p CppSrcCode CppHdrCode ParamData
p = CppSrcCode ParamData -> String
forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
r param -> String
parameterName (CppSrcCode ParamData -> String) -> CppSrcCode ParamData -> String
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ParamData -> CppSrcCode ParamData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ParamData
p
  parameterType :: p CppSrcCode CppHdrCode ParamData
-> p CppSrcCode CppHdrCode TypeData
parameterType p CppSrcCode CppHdrCode ParamData
p = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (CppSrcCode ParamData -> CppSrcCode TypeData
forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
r param -> r typ
parameterType (CppSrcCode ParamData -> CppSrcCode TypeData)
-> CppSrcCode ParamData -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ParamData -> CppSrcCode ParamData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ParamData
p) (CppHdrCode ParamData -> CppHdrCode TypeData
forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
r param -> r typ
parameterType (CppHdrCode ParamData -> CppHdrCode TypeData)
-> CppHdrCode ParamData -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ParamData -> CppHdrCode ParamData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ParamData
p)
  parameter :: p CppSrcCode CppHdrCode ParamData -> Doc
parameter p CppSrcCode CppHdrCode ParamData
p = CppSrcCode ParamData -> Doc
forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
r param -> Doc
RC.parameter (CppSrcCode ParamData -> Doc) -> CppSrcCode ParamData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ParamData -> CppSrcCode ParamData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ParamData
p

instance (Pair p) => MethodSym (p CppSrcCode CppHdrCode) MethodData (Doc, VisibilityTag) ParamData Body Variable TypeData where
  docMain :: MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
docMain = (SrcState MethodState Doc -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState MethodState Doc -> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
MS (r bod) -> MS (r mthd)
docMain HdrState MethodState Doc -> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
MS (r bod) -> MS (r mthd)
docMain
  function :: String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
function String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s VS (p CppSrcCode CppHdrCode TypeData)
t = (State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState MethodState ParamData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> PairState MethodState p TypeData
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal
    (String
-> CppSrcCode (Doc, VisibilityTag)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String
-> r vis
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
function String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s)) (String
-> CppHdrCode (Doc, VisibilityTag)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String
-> r vis
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
function String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode TypeData)
t)
  mainFunction :: MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
mainFunction = (SrcState MethodState Doc -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState MethodState Doc -> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
MS (r bod) -> MS (r mthd)
mainFunction HdrState MethodState Doc -> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
MS (r bod) -> MS (r mthd)
mainFunction
  docFunc :: String
-> [String]
-> Maybe String
-> MS (p CppSrcCode CppHdrCode MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
docFunc String
desc [String]
pComms Maybe String
rComm = (SrcState MethodState MethodData
 -> SrcState MethodState MethodData)
-> (HdrState MethodState MethodData
    -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String
-> [String]
-> Maybe String
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String -> [String] -> Maybe String -> MS (r mthd) -> MS (r mthd)
docFunc String
desc [String]
pComms Maybe String
rComm)
    (String
-> [String]
-> Maybe String
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String -> [String] -> Maybe String -> MS (r mthd) -> MS (r mthd)
docFunc String
desc [String]
pComms Maybe String
rComm)

  inOutFunc :: String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> InOutFunc (p CppSrcCode CppHdrCode) MethodData Doc Variable
inOutFunc String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s [VS (p CppSrcCode CppHdrCode Variable)]
is [VS (p CppSrcCode CppHdrCode Variable)]
os [VS (p CppSrcCode CppHdrCode Variable)]
bs = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (String
-> CppSrcCode (Doc, VisibilityTag)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String -> r vis -> InOutFunc r mthd bod var
inOutFunc String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s)) (String
-> CppHdrCode (Doc, VisibilityTag)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String -> r vis -> InOutFunc r mthd bod var
inOutFunc String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
is) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
os)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
bs)
  docInOutFunc :: String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> DocInOutFunc (p CppSrcCode CppHdrCode) MethodData Doc Variable
docInOutFunc String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s String
desc [(String, VS (p CppSrcCode CppHdrCode Variable))]
is [(String, VS (p CppSrcCode CppHdrCode Variable))]
os [(String, VS (p CppSrcCode CppHdrCode Variable))]
bs = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (\[SrcState ValueState Variable]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both -> String
-> CppSrcCode (Doc, VisibilityTag)
-> DocInOutFunc CppSrcCode MethodData Doc Variable
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String -> r vis -> DocInOutFunc r mthd bod var
docInOutFunc String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) String
desc ([String]
-> [SrcState ValueState Variable]
-> [(String, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst
      ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
is) [SrcState ValueState Variable]
ins) ([String]
-> [SrcState ValueState Variable]
-> [(String, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
os) [SrcState ValueState Variable]
outs) ([String]
-> [SrcState ValueState Variable]
-> [(String, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
bs) [SrcState ValueState Variable]
both))
    (\[HdrState ValueState Variable]
ins [HdrState ValueState Variable]
outs [HdrState ValueState Variable]
both -> String
-> CppHdrCode (Doc, VisibilityTag)
-> DocInOutFunc CppHdrCode MethodData Doc Variable
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String -> r vis -> DocInOutFunc r mthd bod var
docInOutFunc String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) String
desc ([String]
-> [HdrState ValueState Variable]
-> [(String, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst
      ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
is) [HdrState ValueState Variable]
ins) ([String]
-> [HdrState ValueState Variable]
-> [(String, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
os) [HdrState ValueState Variable]
outs) ([String]
-> [HdrState ValueState Variable]
-> [(String, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
bs) [HdrState ValueState Variable]
both))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> ((String, VS (p CppSrcCode CppHdrCode Variable))
    -> VS (p CppSrcCode CppHdrCode Variable))
-> (String, VS (p CppSrcCode CppHdrCode Variable))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, VS (p CppSrcCode CppHdrCode Variable))
-> VS (p CppSrcCode CppHdrCode Variable)
forall a b. (a, b) -> b
snd ((String, VS (p CppSrcCode CppHdrCode Variable))
 -> PairState MethodState p Variable)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
is) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> ((String, VS (p CppSrcCode CppHdrCode Variable))
    -> VS (p CppSrcCode CppHdrCode Variable))
-> (String, VS (p CppSrcCode CppHdrCode Variable))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, VS (p CppSrcCode CppHdrCode Variable))
-> VS (p CppSrcCode CppHdrCode Variable)
forall a b. (a, b) -> b
snd ((String, VS (p CppSrcCode CppHdrCode Variable))
 -> PairState MethodState p Variable)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
os)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> ((String, VS (p CppSrcCode CppHdrCode Variable))
    -> VS (p CppSrcCode CppHdrCode Variable))
-> (String, VS (p CppSrcCode CppHdrCode Variable))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, VS (p CppSrcCode CppHdrCode Variable))
-> VS (p CppSrcCode CppHdrCode Variable)
forall a b. (a, b) -> b
snd ((String, VS (p CppSrcCode CppHdrCode Variable))
 -> PairState MethodState p Variable)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
bs)

instance (Pair p) => OOMethodSym (p CppSrcCode CppHdrCode) MethodData AttachmentData (Doc, VisibilityTag) ParamData Body Variable Value TypeData where
  method :: String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> VS (p CppSrcCode CppHdrCode TypeData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
method String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p VS (p CppSrcCode CppHdrCode TypeData)
t = (State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState MethodState ParamData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> PairState MethodState p TypeData
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal
    (String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String
-> r vis
-> r attch
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
method String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String
-> r vis
-> r attch
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
method String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (p CppSrcCode CppHdrCode TypeData)
t)
  getMethod :: VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode MethodData)
getMethod = (SrcState ValueState Variable -> SrcState MethodState MethodData)
-> (HdrState ValueState Variable
    -> HdrState MethodState MethodData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
VS (r var) -> MS (r mthd)
getMethod HdrState ValueState Variable -> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
VS (r var) -> MS (r mthd)
getMethod (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode MethodData))
-> (VS (p CppSrcCode CppHdrCode Variable)
    -> PairState MethodState p Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS
  setMethod :: VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode MethodData)
setMethod = (SrcState ValueState Variable -> SrcState MethodState MethodData)
-> (HdrState ValueState Variable
    -> HdrState MethodState MethodData)
-> PairState MethodState p Variable
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState ValueState Variable -> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
VS (r var) -> MS (r mthd)
setMethod HdrState ValueState Variable -> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
VS (r var) -> MS (r mthd)
setMethod (PairState MethodState p Variable
 -> MS (p CppSrcCode CppHdrCode MethodData))
-> (VS (p CppSrcCode CppHdrCode Variable)
    -> PairState MethodState p Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS
  constructor :: [MS (p CppSrcCode CppHdrCode ParamData)]
-> Initializers (p CppSrcCode CppHdrCode) Variable Value
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
constructor [MS (p CppSrcCode CppHdrCode ParamData)]
ps Initializers (p CppSrcCode CppHdrCode) Variable Value
is = ([SrcState MethodState ParamData]
 -> [SrcState ValueState Variable]
 -> [VS (CppSrcCode Value)]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState MethodState ParamData]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Value]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Value]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (\[SrcState MethodState ParamData]
pms [SrcState ValueState Variable]
ivars [VS (CppSrcCode Value)]
ivals -> [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
[MS (r param)]
-> Initializers r var val -> MS (r bod) -> MS (r mthd)
constructor [SrcState MethodState ParamData]
pms ([SrcState ValueState Variable]
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState ValueState Variable]
ivars [VS (CppSrcCode Value)]
ivals))
    (\[HdrState MethodState ParamData]
pms [HdrState ValueState Variable]
ivars [HdrState ValueState Value]
ivals -> [HdrState MethodState ParamData]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
[MS (r param)]
-> Initializers r var val -> MS (r bod) -> MS (r mthd)
constructor [HdrState MethodState ParamData]
pms ([HdrState ValueState Variable]
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState Variable]
ivars [HdrState ValueState Value]
ivals))
    [MS (p CppSrcCode CppHdrCode ParamData)]
ps (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> ((VS (p CppSrcCode CppHdrCode Variable),
     VS (p CppSrcCode CppHdrCode Value))
    -> VS (p CppSrcCode CppHdrCode Variable))
-> (VS (p CppSrcCode CppHdrCode Variable),
    VS (p CppSrcCode CppHdrCode Value))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (VS (p CppSrcCode CppHdrCode Variable),
 VS (p CppSrcCode CppHdrCode Value))
-> VS (p CppSrcCode CppHdrCode Variable)
forall a b. (a, b) -> a
fst ((VS (p CppSrcCode CppHdrCode Variable),
  VS (p CppSrcCode CppHdrCode Value))
 -> PairState MethodState p Variable)
-> Initializers (p CppSrcCode CppHdrCode) Variable Value
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Initializers (p CppSrcCode CppHdrCode) Variable Value
is) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState MethodState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Value)
 -> PairState MethodState p Value)
-> ((VS (p CppSrcCode CppHdrCode Variable),
     VS (p CppSrcCode CppHdrCode Value))
    -> VS (p CppSrcCode CppHdrCode Value))
-> (VS (p CppSrcCode CppHdrCode Variable),
    VS (p CppSrcCode CppHdrCode Value))
-> PairState MethodState p Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (VS (p CppSrcCode CppHdrCode Variable),
 VS (p CppSrcCode CppHdrCode Value))
-> VS (p CppSrcCode CppHdrCode Value)
forall a b. (a, b) -> b
snd ((VS (p CppSrcCode CppHdrCode Variable),
  VS (p CppSrcCode CppHdrCode Value))
 -> PairState MethodState p Value)
-> Initializers (p CppSrcCode CppHdrCode) Variable Value
-> [PairState MethodState p Value]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Initializers (p CppSrcCode CppHdrCode) Variable Value
is)

  inOutMethod :: String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> InOutFunc (p CppSrcCode CppHdrCode) MethodData Doc Variable
inOutMethod String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p [VS (p CppSrcCode CppHdrCode Variable)]
is [VS (p CppSrcCode CppHdrCode Variable)]
os [VS (p CppSrcCode CppHdrCode Variable)]
bs = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String -> r vis -> r attch -> InOutFunc r mthd bod var
inOutMethod String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String -> r vis -> r attch -> InOutFunc r mthd bod var
inOutMethod String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
is) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
os)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> [VS (p CppSrcCode CppHdrCode Variable)]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (p CppSrcCode CppHdrCode Variable)]
bs)
  docInOutMethod :: String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> DocInOutFunc (p CppSrcCode CppHdrCode) MethodData Doc Variable
docInOutMethod String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p String
desc [(String, VS (p CppSrcCode CppHdrCode Variable))]
is [(String, VS (p CppSrcCode CppHdrCode Variable))]
os [(String, VS (p CppSrcCode CppHdrCode Variable))]
bs = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> [HdrState ValueState Variable]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> [PairState MethodState p Variable]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val
    (\[SrcState ValueState Variable]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both -> String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> DocInOutFunc CppSrcCode MethodData Doc Variable
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String -> r vis -> r attch -> DocInOutFunc r mthd bod var
docInOutMethod String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p) String
desc ([String]
-> [SrcState ValueState Variable]
-> [(String, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst
      ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
is) [SrcState ValueState Variable]
ins) ([String]
-> [SrcState ValueState Variable]
-> [(String, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
os) [SrcState ValueState Variable]
outs) ([String]
-> [SrcState ValueState Variable]
-> [(String, SrcState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
bs) [SrcState ValueState Variable]
both))
    (\[HdrState ValueState Variable]
ins [HdrState ValueState Variable]
outs [HdrState ValueState Variable]
both -> String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> DocInOutFunc CppHdrCode MethodData Doc Variable
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String -> r vis -> r attch -> DocInOutFunc r mthd bod var
docInOutMethod String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p) String
desc ([String]
-> [HdrState ValueState Variable]
-> [(String, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst
      ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
is) [HdrState ValueState Variable]
ins) ([String]
-> [HdrState ValueState Variable]
-> [(String, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
os) [HdrState ValueState Variable]
outs) ([String]
-> [HdrState ValueState Variable]
-> [(String, HdrState ValueState Variable)]
forall a b. [a] -> [b] -> [(a, b)]
zip ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String
forall a b. (a, b) -> a
fst ((String, VS (p CppSrcCode CppHdrCode Variable)) -> String)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
bs) [HdrState ValueState Variable]
both))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> ((String, VS (p CppSrcCode CppHdrCode Variable))
    -> VS (p CppSrcCode CppHdrCode Variable))
-> (String, VS (p CppSrcCode CppHdrCode Variable))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, VS (p CppSrcCode CppHdrCode Variable))
-> VS (p CppSrcCode CppHdrCode Variable)
forall a b. (a, b) -> b
snd ((String, VS (p CppSrcCode CppHdrCode Variable))
 -> PairState MethodState p Variable)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
is) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> ((String, VS (p CppSrcCode CppHdrCode Variable))
    -> VS (p CppSrcCode CppHdrCode Variable))
-> (String, VS (p CppSrcCode CppHdrCode Variable))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, VS (p CppSrcCode CppHdrCode Variable))
-> VS (p CppSrcCode CppHdrCode Variable)
forall a b. (a, b) -> b
snd ((String, VS (p CppSrcCode CppHdrCode Variable))
 -> PairState MethodState p Variable)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
os)
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState MethodState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode Variable)
 -> PairState MethodState p Variable)
-> ((String, VS (p CppSrcCode CppHdrCode Variable))
    -> VS (p CppSrcCode CppHdrCode Variable))
-> (String, VS (p CppSrcCode CppHdrCode Variable))
-> PairState MethodState p Variable
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, VS (p CppSrcCode CppHdrCode Variable))
-> VS (p CppSrcCode CppHdrCode Variable)
forall a b. (a, b) -> b
snd ((String, VS (p CppSrcCode CppHdrCode Variable))
 -> PairState MethodState p Variable)
-> [(String, VS (p CppSrcCode CppHdrCode Variable))]
-> [PairState MethodState p Variable]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, VS (p CppSrcCode CppHdrCode Variable))]
bs)

instance (Pair p) => RenderMethod (p CppSrcCode CppHdrCode) MethodData where
  commentedFunc :: MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
commentedFunc = (SrcState MethodState Doc
 -> SrcState MethodState MethodData
 -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc
    -> HdrState MethodState MethodData
    -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState MethodState Doc
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *) mthd.
RenderMethod r mthd =>
MS (r Doc) -> MS (r mthd) -> MS (r mthd)
commentedFunc HdrState MethodState Doc
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *) mthd.
RenderMethod r mthd =>
MS (r Doc) -> MS (r mthd) -> MS (r mthd)
commentedFunc

  mthdFromData :: VisibilityTag -> Doc -> MS (p CppSrcCode CppHdrCode MethodData)
mthdFromData VisibilityTag
s Doc
d = (CppSrcCode MethodData
 -> CppHdrCode MethodData -> p CppSrcCode CppHdrCode MethodData)
-> SrcState MethodState MethodData
-> HdrState MethodState MethodData
-> MS (p CppSrcCode CppHdrCode MethodData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode MethodData
-> CppHdrCode MethodData -> p CppSrcCode CppHdrCode MethodData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (VisibilityTag -> Doc -> SrcState MethodState MethodData
forall (r :: * -> *) mthd.
RenderMethod r mthd =>
VisibilityTag -> Doc -> MS (r mthd)
mthdFromData VisibilityTag
s Doc
d) (VisibilityTag -> Doc -> HdrState MethodState MethodData
forall (r :: * -> *) mthd.
RenderMethod r mthd =>
VisibilityTag -> Doc -> MS (r mthd)
mthdFromData VisibilityTag
s Doc
d)

instance (Pair p) => OORenderMethod (p CppSrcCode CppHdrCode) MethodData AttachmentData (Doc, VisibilityTag) ParamData Body TypeData where
  intMethod :: Bool
-> String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> MS (p CppSrcCode CppHdrCode TypeData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
intMethod Bool
m String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p = (SrcState MethodState TypeData
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> (HdrState MethodState TypeData
    -> [HdrState MethodState ParamData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode TypeData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal
    (Bool
-> String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (typ :: k).
OORenderMethod r mthd attch vis param bod typ =>
Bool
-> String
-> r vis
-> r attch
-> MS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
intMethod Bool
m String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (Bool
-> String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (typ :: k).
OORenderMethod r mthd attch vis param bod typ =>
Bool
-> String
-> r vis
-> r attch
-> MS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
intMethod Bool
m String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
  intFunc :: Bool
-> String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> MS (p CppSrcCode CppHdrCode TypeData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
intFunc Bool
m String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p = (SrcState MethodState TypeData
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> (HdrState MethodState TypeData
    -> [HdrState MethodState ParamData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> MS (p CppSrcCode CppHdrCode TypeData)
-> [MS (p CppSrcCode CppHdrCode ParamData)]
-> MS (p CppSrcCode CppHdrCode Doc)
-> MS (p CppSrcCode CppHdrCode MethodData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal
    (Bool
-> String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (typ :: k).
OORenderMethod r mthd attch vis param bod typ =>
Bool
-> String
-> r vis
-> r attch
-> MS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
intFunc Bool
m String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (Bool
-> String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (typ :: k).
OORenderMethod r mthd attch vis param bod typ =>
Bool
-> String
-> r vis
-> r attch
-> MS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
intFunc Bool
m String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
  destructor :: forall stvr.
[CSStateVar (p CppSrcCode CppHdrCode) stvr]
-> MS (p CppSrcCode CppHdrCode MethodData)
destructor = String
-> [CSStateVar (p CppSrcCode CppHdrCode) stvr]
-> MS (p CppSrcCode CppHdrCode MethodData)
forall a. HasCallStack => String -> a
error (String
 -> [CSStateVar (p CppSrcCode CppHdrCode) stvr]
 -> MS (p CppSrcCode CppHdrCode MethodData))
-> String
-> [CSStateVar (p CppSrcCode CppHdrCode) stvr]
-> MS (p CppSrcCode CppHdrCode MethodData)
forall a b. (a -> b) -> a -> b
$ String -> String
CP.destructorError String
cppName

instance (Pair p) => MethodElim (p CppSrcCode CppHdrCode) MethodData where
  method :: p CppSrcCode CppHdrCode MethodData -> Doc
method p CppSrcCode CppHdrCode MethodData
m = CppSrcCode MethodData -> Doc
forall {k} (r :: k -> *) (mthd :: k).
MethodElim r mthd =>
r mthd -> Doc
RC.method (CppSrcCode MethodData -> Doc) -> CppSrcCode MethodData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode MethodData -> CppSrcCode MethodData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode MethodData
m

instance (Pair p) => StateVarSym (p CppSrcCode CppHdrCode) StateVarData AttachmentData (Doc, VisibilityTag) Variable Value where
  stateVar :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> VS (p CppSrcCode CppHdrCode Variable)
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
stateVar p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p = (SrcState ValueState Variable -> SrcState ClassState StateVarData)
-> (HdrState ValueState Variable
    -> HdrState ClassState StateVarData)
-> PairState ClassState p Variable
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ClassState StateVarData
forall {k} (r :: k -> *) (stvr :: k) (attch :: k) (vis :: k)
       (var :: k) (val :: k).
StateVarSym r stvr attch vis var val =>
r vis -> r attch -> VS (r var) -> CSStateVar r stvr
stateVar (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p)) (CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ClassState StateVarData
forall {k} (r :: k -> *) (stvr :: k) (attch :: k) (vis :: k)
       (var :: k) (val :: k).
StateVarSym r stvr attch vis var val =>
r vis -> r attch -> VS (r var) -> CSStateVar r stvr
stateVar (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p))
    (PairState ClassState p Variable
 -> CSStateVar (p CppSrcCode CppHdrCode) StateVarData)
-> (VS (p CppSrcCode CppHdrCode Variable)
    -> PairState ClassState p Variable)
-> VS (p CppSrcCode CppHdrCode Variable)
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState ClassState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS
  stateVarDef :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode AttachmentData
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
stateVarDef p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode AttachmentData
p VS (p CppSrcCode CppHdrCode Variable)
vr VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState ClassState StateVarData)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState ClassState StateVarData)
-> PairState ClassState p Variable
-> PairState ClassState p Value
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2
    (CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ClassState StateVarData
forall {k} (r :: k -> *) (stvr :: k) (attch :: k) (vis :: k)
       (var :: k) (val :: k).
StateVarSym r stvr attch vis var val =>
r vis -> r attch -> VS (r var) -> VS (r val) -> CSStateVar r stvr
stateVarDef (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppSrcCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode AttachmentData
p))
    (CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ClassState StateVarData
forall {k} (r :: k -> *) (stvr :: k) (attch :: k) (vis :: k)
       (var :: k) (val :: k).
StateVarSym r stvr attch vis var val =>
r vis -> r attch -> VS (r var) -> VS (r val) -> CSStateVar r stvr
stateVarDef (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode AttachmentData -> CppHdrCode AttachmentData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode AttachmentData
p)) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState ClassState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  ClassState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState ClassState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) ClassState
Lens' ClassState ValueState
lensCStoVS VS (p CppSrcCode CppHdrCode Value)
vl)
  constVar :: p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> VS (p CppSrcCode CppHdrCode Variable)
-> VS (p CppSrcCode CppHdrCode Value)
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
constVar p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s VS (p CppSrcCode CppHdrCode Variable)
vr VS (p CppSrcCode CppHdrCode Value)
vl = (SrcState ValueState Variable
 -> VS (CppSrcCode Value) -> SrcState ClassState StateVarData)
-> (HdrState ValueState Variable
    -> HdrState ValueState Value -> HdrState ClassState StateVarData)
-> PairState ClassState p Variable
-> PairState ClassState p Value
-> CSStateVar (p CppSrcCode CppHdrCode) StateVarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 (CppSrcCode (Doc, VisibilityTag)
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ClassState StateVarData
forall {k} (r :: k -> *) (stvr :: k) (attch :: k) (vis :: k)
       (var :: k) (val :: k).
StateVarSym r stvr attch vis var val =>
r vis -> VS (r var) -> VS (r val) -> CSStateVar r stvr
constVar (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s)) (CppHdrCode (Doc, VisibilityTag)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ClassState StateVarData
forall {k} (r :: k -> *) (stvr :: k) (attch :: k) (vis :: k)
       (var :: k) (val :: k).
StateVarSym r stvr attch vis var val =>
r vis -> VS (r var) -> VS (r val) -> CSStateVar r stvr
constVar (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
-> VS (p CppSrcCode CppHdrCode Variable)
-> PairState ClassState p Variable
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Variable))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Variable) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS VS (p CppSrcCode CppHdrCode Variable)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  ClassState
  ValueState
-> VS (p CppSrcCode CppHdrCode Value)
-> PairState ClassState p Value
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode Value))
  ClassState
  ValueState
(ValueState
 -> Focusing Identity (p CppSrcCode CppHdrCode Value) ValueState)
-> ClassState
-> Focusing Identity (p CppSrcCode CppHdrCode Value) ClassState
Lens' ClassState ValueState
lensCStoVS VS (p CppSrcCode CppHdrCode Value)
vl)

instance (Pair p) => StateVarElim (p CppSrcCode CppHdrCode) StateVarData where
  stateVar :: p CppSrcCode CppHdrCode StateVarData -> Doc
stateVar p CppSrcCode CppHdrCode StateVarData
v = CppSrcCode StateVarData -> Doc
forall {k} (r :: k -> *) (stvr :: k).
StateVarElim r stvr =>
r stvr -> Doc
RC.stateVar (CppSrcCode StateVarData -> Doc) -> CppSrcCode StateVarData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode StateVarData -> CppSrcCode StateVarData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode StateVarData
v

instance (Pair p) => ClassSym (p CppSrcCode CppHdrCode) Class StateVarData MethodData where
  buildClass :: Maybe String
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> CS (p CppSrcCode CppHdrCode Doc)
buildClass Maybe String
p [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs [MS (p CppSrcCode CppHdrCode MethodData)]
cs [MS (p CppSrcCode CppHdrCode MethodData)]
fs = do
    n <- LensLike'
  (Zoomed (StateT FileState Identity) String) ClassState FileState
-> StateT FileState Identity String
-> StateT ClassState Identity String
forall c.
LensLike'
  (Zoomed (StateT FileState Identity) c) ClassState FileState
-> StateT FileState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT FileState Identity) String) ClassState FileState
(FileState -> Focusing Identity String FileState)
-> ClassState -> Focusing Identity String ClassState
Lens' ClassState FileState
lensCStoFS StateT FileState Identity String
getModuleName
    modify (setClassName n)
    pair3Lists (buildClass p) (buildClass p) vs (zoom lensCStoMS <$> cs)
      (zoom lensCStoMS <$> fs)
  extraClass :: String
-> Maybe String
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> CS (p CppSrcCode CppHdrCode Doc)
extraClass String
n Maybe String
p [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs [MS (p CppSrcCode CppHdrCode MethodData)]
cs [MS (p CppSrcCode CppHdrCode MethodData)]
fs = (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ClassState -> ClassState
setClassName String
n) StateT ClassState Identity ()
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
forall a b.
StateT ClassState Identity a
-> StateT ClassState Identity b -> StateT ClassState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData]
 -> [SrcState MethodState MethodData]
 -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData]
    -> [HdrState MethodState MethodData]
    -> HdrState ClassState Doc)
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [PairState ClassState p MethodData]
-> [PairState ClassState p MethodData]
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists
    (String
-> Maybe String
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall {k} (r :: k -> *) (cls :: k) (stvr :: k) (mthd :: k).
ClassSym r cls stvr mthd =>
String
-> Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
extraClass String
n Maybe String
p) (String
-> Maybe String
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall {k} (r :: k -> *) (cls :: k) (stvr :: k) (mthd :: k).
ClassSym r cls stvr mthd =>
String
-> Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
extraClass String
n Maybe String
p)
    [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS (MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MS (p CppSrcCode CppHdrCode MethodData)]
cs) (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS (MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MS (p CppSrcCode CppHdrCode MethodData)]
fs)
  implementingClass :: String
-> [String]
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> CS (p CppSrcCode CppHdrCode Doc)
implementingClass String
n [String]
is [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs [MS (p CppSrcCode CppHdrCode MethodData)]
cs [MS (p CppSrcCode CppHdrCode MethodData)]
fs = (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ClassState -> ClassState
setClassName String
n) StateT ClassState Identity ()
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
forall a b.
StateT ClassState Identity a
-> StateT ClassState Identity b -> StateT ClassState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData]
 -> [SrcState MethodState MethodData]
 -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData]
    -> [HdrState MethodState MethodData]
    -> HdrState ClassState Doc)
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [PairState ClassState p MethodData]
-> [PairState ClassState p MethodData]
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists
    (String
-> [String]
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall {k} (r :: k -> *) (cls :: k) (stvr :: k) (mthd :: k).
ClassSym r cls stvr mthd =>
String
-> [String]
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
implementingClass String
n [String]
is) (String
-> [String]
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall {k} (r :: k -> *) (cls :: k) (stvr :: k) (mthd :: k).
ClassSym r cls stvr mthd =>
String
-> [String]
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
implementingClass String
n [String]
is)
    [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS (MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MS (p CppSrcCode CppHdrCode MethodData)]
cs) (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS (MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MS (p CppSrcCode CppHdrCode MethodData)]
fs)

  docClass :: String
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
docClass String
d = (SrcState ClassState Doc -> SrcState ClassState Doc)
-> (HdrState ClassState Doc -> HdrState ClassState Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 (String -> SrcState ClassState Doc -> SrcState ClassState Doc
forall {k} (r :: k -> *) (cls :: k) (stvr :: k) (mthd :: k).
ClassSym r cls stvr mthd =>
String -> CS (r cls) -> CS (r cls)
docClass String
d) (String -> HdrState ClassState Doc -> HdrState ClassState Doc
forall {k} (r :: k -> *) (cls :: k) (stvr :: k) (mthd :: k).
ClassSym r cls stvr mthd =>
String -> CS (r cls) -> CS (r cls)
docClass String
d)

instance (Pair p) => RenderClass (p CppSrcCode CppHdrCode) Class StateVarData MethodData (Doc, VisibilityTag) where
  intClass :: String
-> p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> p CppSrcCode CppHdrCode Doc
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> CS (p CppSrcCode CppHdrCode Doc)
intClass String
n p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s p CppSrcCode CppHdrCode Doc
i [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs [MS (p CppSrcCode CppHdrCode MethodData)]
cs [MS (p CppSrcCode CppHdrCode MethodData)]
fs = ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData]
 -> [SrcState MethodState MethodData]
 -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData]
    -> [HdrState MethodState MethodData]
    -> HdrState ClassState Doc)
-> [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
-> [PairState ClassState p MethodData]
-> [PairState ClassState p MethodData]
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists
    (String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode Doc
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
RenderClass r cls stvr mthd vis =>
String
-> r vis
-> r Doc
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
intClass String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppSrcCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
i)) (String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode Doc
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
RenderClass r cls stvr mthd vis =>
String
-> r vis
-> r Doc
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
intClass String
n (p CppSrcCode CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, VisibilityTag)
s) (p CppSrcCode CppHdrCode Doc -> CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode Doc
i))
    [CSStateVar (p CppSrcCode CppHdrCode) StateVarData]
vs (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS (MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MS (p CppSrcCode CppHdrCode MethodData)]
cs) (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing
     Identity (p CppSrcCode CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS (MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MS (p CppSrcCode CppHdrCode MethodData)]
fs)

  inherit :: Maybe String -> p CppSrcCode CppHdrCode Doc
inherit Maybe String
n = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (Maybe String -> CppSrcCode Doc
forall (r :: * -> *) cls stvr mthd vis.
RenderClass r cls stvr mthd vis =>
Maybe String -> r Doc
inherit Maybe String
n) (Maybe String -> CppHdrCode Doc
forall (r :: * -> *) cls stvr mthd vis.
RenderClass r cls stvr mthd vis =>
Maybe String -> r Doc
inherit Maybe String
n)
  implements :: [String] -> p CppSrcCode CppHdrCode Doc
implements [String]
is = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair ([String] -> CppSrcCode Doc
forall (r :: * -> *) cls stvr mthd vis.
RenderClass r cls stvr mthd vis =>
[String] -> r Doc
implements [String]
is) ([String] -> CppHdrCode Doc
forall (r :: * -> *) cls stvr mthd vis.
RenderClass r cls stvr mthd vis =>
[String] -> r Doc
implements [String]
is)

  commentedClass :: CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
commentedClass = (SrcState ClassState Doc
 -> SrcState ClassState Doc -> SrcState ClassState Doc)
-> (HdrState ClassState Doc
    -> HdrState ClassState Doc -> HdrState ClassState Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
-> CS (p CppSrcCode CppHdrCode Doc)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState ClassState Doc
-> SrcState ClassState Doc -> SrcState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
RenderClass r cls stvr mthd vis =>
CS (r Doc) -> CS (r cls) -> CS (r cls)
commentedClass HdrState ClassState Doc
-> HdrState ClassState Doc -> HdrState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
RenderClass r cls stvr mthd vis =>
CS (r Doc) -> CS (r cls) -> CS (r cls)
commentedClass

instance (Pair p) => ClassElim (p CppSrcCode CppHdrCode) Class where
  class' :: p CppSrcCode CppHdrCode Doc -> Doc
class' p CppSrcCode CppHdrCode Doc
c = CppSrcCode Doc -> Doc
forall {k} (r :: k -> *) (cls :: k).
ClassElim r cls =>
r cls -> Doc
RC.class' (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
c

instance (Pair p) => ModuleSym (p CppSrcCode CppHdrCode) ModData Class MethodData where
  buildModule :: String
-> [String]
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [CS (p CppSrcCode CppHdrCode Doc)]
-> FS (p CppSrcCode CppHdrCode ModData)
buildModule String
n [String]
is [MS (p CppSrcCode CppHdrCode MethodData)]
ms [CS (p CppSrcCode CppHdrCode Doc)]
cs = do
    (FileState -> FileState) -> StateT FileState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> FileState -> FileState
setModuleName String
n)
    ([SrcState MethodState MethodData]
 -> [SrcState ClassState Doc] -> SrcState FileState ModData)
-> ([HdrState MethodState MethodData]
    -> [HdrState ClassState Doc] -> HdrState FileState ModData)
-> [PairState FileState p MethodData]
-> [PairState FileState p Doc]
-> FS (p CppSrcCode CppHdrCode ModData)
forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c)
-> ([HdrState r a] -> [HdrState s b] -> HdrState t c)
-> [PairState t p a]
-> [PairState t p b]
-> PairState t p c
pair2Lists (String
-> [String]
-> [SrcState MethodState MethodData]
-> [SrcState ClassState Doc]
-> SrcState FileState ModData
forall {k} (r :: k -> *) (mod :: k) (cls :: k) (mthd :: k).
ModuleSym r mod cls mthd =>
String -> [String] -> [MS (r mthd)] -> [CS (r cls)] -> FS (r mod)
buildModule String
n [String]
is) (String
-> [String]
-> [HdrState MethodState MethodData]
-> [HdrState ClassState Doc]
-> HdrState FileState ModData
forall {k} (r :: k -> *) (mod :: k) (cls :: k) (mthd :: k).
ModuleSym r mod cls mthd =>
String -> [String] -> [MS (r mthd)] -> [CS (r cls)] -> FS (r mod)
buildModule String
n [String]
is)
      (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  FileState
  MethodState
-> MS (p CppSrcCode CppHdrCode MethodData)
-> PairState FileState p MethodData
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) FileState MethodState
-> StateT MethodState Identity c -> StateT FileState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  FileState
  MethodState
(MethodState
 -> Focusing
      Identity (p CppSrcCode CppHdrCode MethodData) MethodState)
-> FileState
-> Focusing Identity (p CppSrcCode CppHdrCode MethodData) FileState
Lens' FileState MethodState
lensFStoMS (MS (p CppSrcCode CppHdrCode MethodData)
 -> PairState FileState p MethodData)
-> [MS (p CppSrcCode CppHdrCode MethodData)]
-> [PairState FileState p MethodData]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MS (p CppSrcCode CppHdrCode MethodData)]
ms) (LensLike'
  (Zoomed (StateT ClassState Identity) (p CppSrcCode CppHdrCode Doc))
  FileState
  ClassState
-> CS (p CppSrcCode CppHdrCode Doc) -> PairState FileState p Doc
forall c.
LensLike'
  (Zoomed (StateT ClassState Identity) c) FileState ClassState
-> StateT ClassState Identity c -> StateT FileState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ClassState Identity) (p CppSrcCode CppHdrCode Doc))
  FileState
  ClassState
(ClassState
 -> Focusing Identity (p CppSrcCode CppHdrCode Doc) ClassState)
-> FileState
-> Focusing Identity (p CppSrcCode CppHdrCode Doc) FileState
Lens' FileState ClassState
lensFStoCS (CS (p CppSrcCode CppHdrCode Doc) -> PairState FileState p Doc)
-> [CS (p CppSrcCode CppHdrCode Doc)]
-> [PairState FileState p Doc]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [CS (p CppSrcCode CppHdrCode Doc)]
cs)

instance (Pair p) => RenderMod (p CppSrcCode CppHdrCode) ModData where
  modFromData :: String -> FS Doc -> FS (p CppSrcCode CppHdrCode ModData)
modFromData String
n FS Doc
d = (CppSrcCode ModData
 -> CppHdrCode ModData -> p CppSrcCode CppHdrCode ModData)
-> SrcState FileState ModData
-> HdrState FileState ModData
-> FS (p CppSrcCode CppHdrCode ModData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ModData
-> CppHdrCode ModData -> p CppSrcCode CppHdrCode ModData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (String -> FS Doc -> SrcState FileState ModData
forall {k} (r :: k -> *) (mod :: k).
RenderMod r mod =>
String -> FS Doc -> FS (r mod)
modFromData String
n FS Doc
d) (String -> FS Doc -> HdrState FileState ModData
forall {k} (r :: k -> *) (mod :: k).
RenderMod r mod =>
String -> FS Doc -> FS (r mod)
modFromData String
n FS Doc
d)
  updateModuleDoc :: (Doc -> Doc)
-> p CppSrcCode CppHdrCode ModData
-> p CppSrcCode CppHdrCode ModData
updateModuleDoc Doc -> Doc
f p CppSrcCode CppHdrCode ModData
m = CppSrcCode ModData
-> CppHdrCode ModData -> p CppSrcCode CppHdrCode ModData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair
    ((Doc -> Doc) -> CppSrcCode ModData -> CppSrcCode ModData
forall {k} (r :: k -> *) (mod :: k).
RenderMod r mod =>
(Doc -> Doc) -> r mod -> r mod
updateModuleDoc Doc -> Doc
f (CppSrcCode ModData -> CppSrcCode ModData)
-> CppSrcCode ModData -> CppSrcCode ModData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppSrcCode ModData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ModData
m) ((Doc -> Doc) -> CppHdrCode ModData -> CppHdrCode ModData
forall {k} (r :: k -> *) (mod :: k).
RenderMod r mod =>
(Doc -> Doc) -> r mod -> r mod
updateModuleDoc Doc -> Doc
f (CppHdrCode ModData -> CppHdrCode ModData)
-> CppHdrCode ModData -> CppHdrCode ModData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppHdrCode ModData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode ModData
m)

instance (Pair p) => ModuleElim (p CppSrcCode CppHdrCode) ModData where
  module' :: p CppSrcCode CppHdrCode ModData -> Doc
module' p CppSrcCode CppHdrCode ModData
m = CppSrcCode ModData -> Doc
forall {k} (r :: k -> *) (mod :: k).
ModuleElim r mod =>
r mod -> Doc
RC.module' (CppSrcCode ModData -> Doc) -> CppSrcCode ModData -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppSrcCode ModData
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode ModData
m

instance (Pair p) => BlockCommentSym (p CppSrcCode CppHdrCode) where
  blockComment :: [String] -> p CppSrcCode CppHdrCode Doc
blockComment [String]
lns = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair ([String] -> CppSrcCode Doc
forall (r :: * -> *). BlockCommentSym r => [String] -> r Doc
blockComment [String]
lns) ([String] -> CppHdrCode Doc
forall (r :: * -> *). BlockCommentSym r => [String] -> r Doc
blockComment [String]
lns)
  docComment :: forall a. State a [String] -> State a (p CppSrcCode CppHdrCode Doc)
docComment State a [String]
lns = (CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc)
-> State a (CppSrcCode Doc)
-> State a (CppHdrCode Doc)
-> State a (p CppSrcCode CppHdrCode Doc)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (a :: k) (y :: k -> *).
Pair p =>
x a -> y a -> p x y a
forall (x :: * -> *) a (y :: * -> *). x a -> y a -> p x y a
pair (State a [String] -> State a (CppSrcCode Doc)
forall a. State a [String] -> State a (CppSrcCode Doc)
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [String] -> State a (r Doc)
docComment State a [String]
lns) (State a [String] -> State a (CppHdrCode Doc)
forall a. State a [String] -> State a (CppHdrCode Doc)
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [String] -> State a (r Doc)
docComment State a [String]
lns)

instance (Pair p) => BlockCommentElim (p CppSrcCode CppHdrCode) where
  blockComment' :: p CppSrcCode CppHdrCode Doc -> Doc
blockComment' p CppSrcCode CppHdrCode Doc
c = CppSrcCode Doc -> Doc
forall (r :: * -> *). BlockCommentElim r => r Doc -> Doc
RC.blockComment' (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
c

-- Helpers for pair instance

type SrcState s a = State s (CppSrcCode a)
type HdrState s a = State s (CppHdrCode a)
type PairState s p a = State s (p CppSrcCode CppHdrCode a)

pair1 :: (Pair p) => (SrcState r a -> SrcState s b) -> (HdrState r a ->
  HdrState s b) -> PairState s p a -> PairState s p b
pair1 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
(SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 SrcState r a -> SrcState s b
srcf HdrState r a -> HdrState s b
hdrf PairState s p a
stv = do
  v <- PairState s p a
stv
  let fp = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v
      sp = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v
  p1 <- srcf fp
  p2 <- hdrf sp
  pure $ pair p1 p2

pair2 :: (Pair p) => (SrcState r a -> SrcState s b -> SrcState t c) ->
  (HdrState r a -> HdrState s b -> HdrState t c) -> PairState t p a ->
  PairState t p b -> PairState t p c
pair2 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c)
-> (HdrState r a -> HdrState s b -> HdrState t c)
-> PairState t p a
-> PairState t p b
-> PairState t p c
pair2 SrcState r a -> SrcState s b -> SrcState t c
srcf HdrState r a -> HdrState s b -> HdrState t c
hdrf PairState t p a
stv1 PairState t p b
stv2 = do
  v1 <- PairState t p a
stv1
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  pair1 (srcf fv1) (hdrf sv1) stv2

pair3 :: (Pair p) => (SrcState r a -> SrcState s b -> SrcState t c ->
  SrcState u d) -> (HdrState r a -> HdrState s b -> HdrState t c ->
  HdrState u d) -> PairState u p a -> PairState u p b -> PairState u p c ->
  PairState u p d
pair3 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p a
-> PairState u p b
-> PairState u p c
-> PairState u p d
pair3 SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d
srcf HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d
hdrf PairState u p a
stv1 PairState u p b
stv2 PairState u p c
stv3 = do
  v1 <- PairState u p a
stv1
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  pair2 (srcf fv1) (hdrf sv1) stv2 stv3

pair4 :: (Pair p) => (SrcState r a -> SrcState s b -> SrcState t c ->
  SrcState u d -> SrcState v e) -> (HdrState r a -> HdrState s b -> HdrState t c
  -> HdrState u d -> HdrState v e) -> PairState v p a -> PairState v p b ->
  PairState v p c -> PairState v p d -> PairState v p e
pair4 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e)
-> (HdrState r a
    -> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e)
-> PairState v p a
-> PairState v p b
-> PairState v p c
-> PairState v p d
-> PairState v p e
pair4 SrcState r a
-> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e
srcf HdrState r a
-> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e
hdrf PairState v p a
stv1 PairState v p b
stv2 PairState v p c
stv3 PairState v p d
stv4 = do
  v1 <- PairState v p a
stv1
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  pair3 (srcf fv1) (hdrf sv1) stv2 stv3 stv4

pair5 :: (Pair p) => (SrcState r a -> SrcState s b -> SrcState t c ->
  SrcState u d -> SrcState v e -> SrcState w f) -> (HdrState r a -> HdrState s b
  -> HdrState t c -> HdrState u d -> HdrState v e -> HdrState w f) ->
  PairState w p a -> PairState w p b -> PairState w p c -> PairState w p d ->
  PairState w p e -> PairState w p f
pair5 :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> SrcState t c
 -> SrcState u d
 -> SrcState v e
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> HdrState t c
    -> HdrState u d
    -> HdrState v e
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> PairState w p c
-> PairState w p d
-> PairState w p e
-> PairState w p f
pair5 SrcState r a
-> SrcState s b
-> SrcState t c
-> SrcState u d
-> SrcState v e
-> SrcState w f
srcf HdrState r a
-> HdrState s b
-> HdrState t c
-> HdrState u d
-> HdrState v e
-> HdrState w f
hdrf PairState w p a
stv1 PairState w p b
stv2 PairState w p c
stv3 PairState w p d
stv4 PairState w p e
stv5 = do
  v1 <- PairState w p a
stv1
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  pair4 (srcf fv1) (hdrf sv1) stv2 stv3 stv4 stv5

pair1List :: (Pair p) => ([SrcState r a] -> SrcState s b) -> ([HdrState r a] ->
  HdrState s b) -> [PairState s p a] -> PairState s p b
pair1List :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b.
Pair p =>
([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List [SrcState r a] -> SrcState s b
srcf [HdrState r a] -> HdrState s b
hdrf [PairState s p a]
stv = do
  v <- [PairState s p a] -> StateT s Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState s p a]
stv
  let fl = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v
      sl = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v
  p1 <- srcf fl
  p2 <- hdrf sl
  pure $ pair p1 p2

pair2Lists :: (Pair p) => ([SrcState r a] -> [SrcState s b] -> SrcState t c) ->
  ([HdrState r a] -> [HdrState s b] -> HdrState t c) -> [PairState t p a] ->
  [PairState t p b] -> PairState t p c
pair2Lists :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c)
-> ([HdrState r a] -> [HdrState s b] -> HdrState t c)
-> [PairState t p a]
-> [PairState t p b]
-> PairState t p c
pair2Lists [SrcState r a] -> [SrcState s b] -> SrcState t c
srcf [HdrState r a] -> [HdrState s b] -> HdrState t c
hdrf [PairState t p a]
stv1 [PairState t p b]
stv2 = do
  v1 <- [PairState t p a] -> StateT t Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState t p a]
stv1
  let fl1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
      sl1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
  pair1List (srcf fl1) (hdrf sl1) stv2

pair3Lists :: (Pair p) => ([SrcState r a] -> [SrcState s b] -> [SrcState t c] ->
  SrcState u d) -> ([HdrState r a] -> [HdrState s b] -> [HdrState t c] ->
  HdrState u d) -> [PairState u p a] -> [PairState u p b] -> [PairState u p c]
  -> PairState u p d
pair3Lists :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a]
 -> [SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
pair3Lists [SrcState r a] -> [SrcState s b] -> [SrcState t c] -> SrcState u d
srcf [HdrState r a] -> [HdrState s b] -> [HdrState t c] -> HdrState u d
hdrf [PairState u p a]
stv1 [PairState u p b]
stv2 [PairState u p c]
stv3 = do
  v1 <- [PairState u p a] -> StateT u Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState u p a]
stv1
  let fl1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
      sl1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
  pair2Lists (srcf fl1) (hdrf sl1) stv2 stv3

pair1List1Val :: (Pair p) => ([SrcState r a] -> SrcState s b -> SrcState t c) ->
  ([HdrState r a] -> HdrState s b -> HdrState t c) -> [PairState t p a] ->
  PairState t p b -> PairState t p c
pair1List1Val :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
([SrcState r a] -> SrcState s b -> SrcState t c)
-> ([HdrState r a] -> HdrState s b -> HdrState t c)
-> [PairState t p a]
-> PairState t p b
-> PairState t p c
pair1List1Val [SrcState r a] -> SrcState s b -> SrcState t c
srcf [HdrState r a] -> HdrState s b -> HdrState t c
hdrf [PairState t p a]
stv1 PairState t p b
stv2 = do
  v1 <- [PairState t p a] -> StateT t Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState t p a]
stv1
  let fl1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
      sl1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
  pair1 (srcf fl1) (hdrf sl1) stv2

pair1Val1List :: (Pair p) => (SrcState r a -> [SrcState s b] -> SrcState t c) ->
  (HdrState r a -> [HdrState s b] -> HdrState t c) -> PairState t p a ->
  [PairState t p b] -> PairState t p c
pair1Val1List :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c)
-> (HdrState r a -> [HdrState s b] -> HdrState t c)
-> PairState t p a
-> [PairState t p b]
-> PairState t p c
pair1Val1List SrcState r a -> [SrcState s b] -> SrcState t c
srcf HdrState r a -> [HdrState s b] -> HdrState t c
hdrf PairState t p a
stv1 [PairState t p b]
stv2 = do
  v1 <- PairState t p a
stv1
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  pair1List (srcf fv1) (hdrf sv1) stv2

pair2Lists1Val :: (Pair p) => ([SrcState r a] -> [SrcState s b] -> SrcState t c
  -> SrcState u d) -> ([HdrState r a] -> [HdrState s b] -> HdrState t c ->
  HdrState u d) -> [PairState u p a] -> [PairState u p b] -> PairState u p c ->
  PairState u p d
pair2Lists1Val :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
([SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState r a]
    -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p a]
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pair2Lists1Val [SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d
srcf [HdrState r a] -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf [PairState u p a]
stv1 [PairState u p b]
stv2 PairState u p c
stv3 = do
  v1 <- [PairState u p a] -> StateT u Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState u p a]
stv1
  let fl1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
      sl1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
  pair1List1Val (srcf fl1) (hdrf sl1) stv2 stv3

pairValListVal :: (Pair p) => (SrcState r a -> [SrcState s b] -> SrcState t c ->
  SrcState u d) -> (HdrState r a -> [HdrState s b] -> HdrState t c ->
  HdrState u d) -> PairState u p a -> [PairState u p b] -> PairState u p c ->
  PairState u p d
pairValListVal :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d.
Pair p =>
(SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d)
-> (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d)
-> PairState u p a
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
pairValListVal SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d
srcf HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf PairState u p a
stv1 [PairState u p b]
stv2 PairState u p c
stv3 = do
  v1 <- PairState u p a
stv1
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  pair1List1Val (srcf fv1) (hdrf sv1) stv2 stv3

pair3Lists1Val :: (Pair p) => ([SrcState r a] -> [SrcState s b] ->
  [SrcState t c] -> SrcState u d -> SrcState v e) -> ([HdrState r a] ->
  [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e) ->
  [PairState v p a] -> [PairState v p b] -> [PairState v p c] -> PairState v p d
  -> PairState v p e
pair3Lists1Val :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
([SrcState r a]
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> ([HdrState r a]
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> [PairState v p a]
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pair3Lists1Val [SrcState r a]
-> [SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e
srcf [HdrState r a]
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf [PairState v p a]
stv1 [PairState v p b]
stv2 [PairState v p c]
stv3 PairState v p d
stv4 = do
  v1 <- [PairState v p a] -> StateT v Identity [p CppSrcCode CppHdrCode a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [PairState v p a]
stv1
  let fl1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a)
-> (p CppSrcCode CppHdrCode a -> CppSrcCode a)
-> p CppSrcCode CppHdrCode a
-> SrcState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
      sl1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a)
-> (p CppSrcCode CppHdrCode a -> CppHdrCode a)
-> p CppSrcCode CppHdrCode a
-> HdrState r a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode a]
v1
  pair2Lists1Val (srcf fl1) (hdrf sl1) stv2 stv3 stv4

pair1Val3Lists :: (Pair p) => (SrcState r a -> [SrcState s b] ->
  [(SrcState t c, SrcState u d)] -> SrcState v e) -> (HdrState r a ->
  [HdrState s b] -> [(HdrState t c, HdrState u d)] -> HdrState v e) ->
  PairState v p a -> [PairState v p b] -> [(PairState v p c, PairState v p d)]
  -> PairState v p e
pair1Val3Lists :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [(SrcState t c, SrcState u d)]
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [(HdrState t c, HdrState u d)]
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [(PairState v p c, PairState v p d)]
-> PairState v p e
pair1Val3Lists SrcState r a
-> [SrcState s b] -> [(SrcState t c, SrcState u d)] -> SrcState v e
srcf HdrState r a
-> [HdrState s b] -> [(HdrState t c, HdrState u d)] -> HdrState v e
hdrf PairState v p a
stv1 [PairState v p b]
stv2 [(PairState v p c, PairState v p d)]
stv34 = do
  v1 <- PairState v p a
stv1
  v2 <- sequence stv2
  v3 <- mapM fst stv34
  v4 <- mapM snd stv34
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
      fv2 = CppSrcCode b -> SrcState s b
forall a. a -> StateT s Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode b -> SrcState s b)
-> (p CppSrcCode CppHdrCode b -> CppSrcCode b)
-> p CppSrcCode CppHdrCode b
-> SrcState s b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode b -> CppSrcCode b
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode b -> SrcState s b)
-> [p CppSrcCode CppHdrCode b] -> [SrcState s b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode b]
v2
      sv2 = CppHdrCode b -> HdrState s b
forall a. a -> StateT s Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode b -> HdrState s b)
-> (p CppSrcCode CppHdrCode b -> CppHdrCode b)
-> p CppSrcCode CppHdrCode b
-> HdrState s b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode b -> CppHdrCode b
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode b -> HdrState s b)
-> [p CppSrcCode CppHdrCode b] -> [HdrState s b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode b]
v2
      fv3 = CppSrcCode c -> SrcState t c
forall a. a -> StateT t Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode c -> SrcState t c)
-> (p CppSrcCode CppHdrCode c -> CppSrcCode c)
-> p CppSrcCode CppHdrCode c
-> SrcState t c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode c -> CppSrcCode c
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode c -> SrcState t c)
-> [p CppSrcCode CppHdrCode c] -> [SrcState t c]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode c]
v3
      sv3 = CppHdrCode c -> HdrState t c
forall a. a -> StateT t Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode c -> HdrState t c)
-> (p CppSrcCode CppHdrCode c -> CppHdrCode c)
-> p CppSrcCode CppHdrCode c
-> HdrState t c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode c -> CppHdrCode c
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode c -> HdrState t c)
-> [p CppSrcCode CppHdrCode c] -> [HdrState t c]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode c]
v3
      fv4 = CppSrcCode d -> SrcState u d
forall a. a -> StateT u Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode d -> SrcState u d)
-> (p CppSrcCode CppHdrCode d -> CppSrcCode d)
-> p CppSrcCode CppHdrCode d
-> SrcState u d
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode d -> CppSrcCode d
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst (p CppSrcCode CppHdrCode d -> SrcState u d)
-> [p CppSrcCode CppHdrCode d] -> [SrcState u d]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode d]
v4
      sv4 = CppHdrCode d -> HdrState u d
forall a. a -> StateT u Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode d -> HdrState u d)
-> (p CppSrcCode CppHdrCode d -> CppHdrCode d)
-> p CppSrcCode CppHdrCode d
-> HdrState u d
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CppSrcCode CppHdrCode d -> CppHdrCode d
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd (p CppSrcCode CppHdrCode d -> HdrState u d)
-> [p CppSrcCode CppHdrCode d] -> [HdrState u d]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [p CppSrcCode CppHdrCode d]
v4
  p1 <- srcf fv1 fv2 (zip fv3 fv4)
  p2 <- hdrf sv1 sv2 (zip sv3 sv4)
  pure $ pair p1 p2

pair2Vals3Lists :: (Pair p) => (SrcState r a -> SrcState s b -> [SrcState t c]
  -> [(SrcState u d, SrcState v e)] -> SrcState w f) -> (HdrState r a ->
  HdrState s b -> [HdrState t c] -> [(HdrState u d, HdrState v e)] ->
  HdrState w f) -> PairState w p a -> PairState w p b -> [PairState w p c] ->
  [(PairState w p d, PairState w p e)] -> PairState w p f
pair2Vals3Lists :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e w
       f.
Pair p =>
(SrcState r a
 -> SrcState s b
 -> [SrcState t c]
 -> [(SrcState u d, SrcState v e)]
 -> SrcState w f)
-> (HdrState r a
    -> HdrState s b
    -> [HdrState t c]
    -> [(HdrState u d, HdrState v e)]
    -> HdrState w f)
-> PairState w p a
-> PairState w p b
-> [PairState w p c]
-> [(PairState w p d, PairState w p e)]
-> PairState w p f
pair2Vals3Lists SrcState r a
-> SrcState s b
-> [SrcState t c]
-> [(SrcState u d, SrcState v e)]
-> SrcState w f
srcf HdrState r a
-> HdrState s b
-> [HdrState t c]
-> [(HdrState u d, HdrState v e)]
-> HdrState w f
hdrf PairState w p a
stv1 PairState w p b
stv2 [PairState w p c]
stv3 [(PairState w p d, PairState w p e)]
stv45 = do
  v1 <- PairState w p a
stv1
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  pair1Val3Lists (srcf fv1) (hdrf sv1) stv2 stv3 stv45

pairVal2ListsVal :: (Pair p) => (SrcState r a -> [SrcState s b] ->
  [SrcState t c] -> SrcState u d -> SrcState v e) -> (HdrState r a ->
  [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e) ->
  PairState v p a -> [PairState v p b] -> [PairState v p c] -> PairState v p d
  -> PairState v p e
pairVal2ListsVal :: forall (p :: (* -> *) -> (* -> *) -> * -> *) r a s b t c u d v e.
Pair p =>
(SrcState r a
 -> [SrcState s b]
 -> [SrcState t c]
 -> SrcState u d
 -> SrcState v e)
-> (HdrState r a
    -> [HdrState s b]
    -> [HdrState t c]
    -> HdrState u d
    -> HdrState v e)
-> PairState v p a
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
pairVal2ListsVal SrcState r a
-> [SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e
srcf HdrState r a
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf PairState v p a
stv1 [PairState v p b]
stv2 [PairState v p c]
stv3 PairState v p d
stv4 = do
  v1 <- PairState v p a
stv1
  let fv1 = CppSrcCode a -> SrcState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (a :: k).
Pair p =>
p x y a -> x a
forall (x :: * -> *) (y :: * -> *) a. p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 = CppHdrCode a -> HdrState r a
forall a. a -> StateT r Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall {k} (p :: (k -> *) -> (k -> *) -> k -> *) (x :: k -> *)
       (y :: k -> *) (b :: k).
Pair p =>
p x y b -> y b
forall (x :: * -> *) (y :: * -> *) b. p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  pair2Lists1Val (srcf fv1) (hdrf sv1) stv2 stv3 stv4

-----------------
-- Source File --
-----------------

newtype CppSrcCode a = CPPSC {forall a. CppSrcCode a -> a
unCPPSC :: a} deriving CppSrcCode a -> CppSrcCode a -> Bool
(CppSrcCode a -> CppSrcCode a -> Bool)
-> (CppSrcCode a -> CppSrcCode a -> Bool) -> Eq (CppSrcCode a)
forall a. Eq a => CppSrcCode a -> CppSrcCode a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => CppSrcCode a -> CppSrcCode a -> Bool
== :: CppSrcCode a -> CppSrcCode a -> Bool
$c/= :: forall a. Eq a => CppSrcCode a -> CppSrcCode a -> Bool
/= :: CppSrcCode a -> CppSrcCode a -> Bool
Eq

instance Functor CppSrcCode where
  fmap :: forall a b. (a -> b) -> CppSrcCode a -> CppSrcCode b
fmap a -> b
f (CPPSC a
x) = b -> CppSrcCode b
forall a. a -> CppSrcCode a
CPPSC (a -> b
f a
x)

instance Applicative CppSrcCode where
  pure :: forall a. a -> CppSrcCode a
pure = a -> CppSrcCode a
forall a. a -> CppSrcCode a
CPPSC
  (CPPSC a -> b
f) <*> :: forall a b. CppSrcCode (a -> b) -> CppSrcCode a -> CppSrcCode b
<*> (CPPSC a
x) = b -> CppSrcCode b
forall a. a -> CppSrcCode a
CPPSC (a -> b
f a
x)

instance Monad CppSrcCode where
  CPPSC a
x >>= :: forall a b. CppSrcCode a -> (a -> CppSrcCode b) -> CppSrcCode b
>>= a -> CppSrcCode b
f = a -> CppSrcCode b
f a
x

instance ProgramSym CppSrcCode ProgData FileData where
  prog :: String
-> String
-> [FS (CppSrcCode FileData)]
-> GSProgram CppSrcCode ProgData
prog String
n String
st = ([CppSrcCode FileData] -> CppSrcCode ProgData)
-> [State GOOLState (CppSrcCode FileData)]
-> GSProgram CppSrcCode ProgData
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([FileData] -> ProgData)
-> [CppSrcCode FileData] -> CppSrcCode ProgData
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList (String -> String -> [FileData] -> ProgData
progD String
n String
st)) ([State GOOLState (CppSrcCode FileData)]
 -> GSProgram CppSrcCode ProgData)
-> ([FS (CppSrcCode FileData)]
    -> [State GOOLState (CppSrcCode FileData)])
-> [FS (CppSrcCode FileData)]
-> GSProgram CppSrcCode ProgData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (FS (CppSrcCode FileData) -> State GOOLState (CppSrcCode FileData))
-> [FS (CppSrcCode FileData)]
-> [State GOOLState (CppSrcCode FileData)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (LensLike'
  (Zoomed (StateT FileState Identity) (CppSrcCode FileData))
  GOOLState
  FileState
-> FS (CppSrcCode FileData)
-> State GOOLState (CppSrcCode FileData)
forall c.
LensLike'
  (Zoomed (StateT FileState Identity) c) GOOLState FileState
-> StateT FileState Identity c -> StateT GOOLState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT FileState Identity) (CppSrcCode FileData))
  GOOLState
  FileState
(FileState -> Focusing Identity (CppSrcCode FileData) FileState)
-> GOOLState -> Focusing Identity (CppSrcCode FileData) GOOLState
Lens' GOOLState FileState
lensGStoFS)

instance CommonRenderSym CppSrcCode MethodData (Doc, VisibilityTag) ParamData Body Block Statement Variable ScopeData Value BinderD TypeData
instance OORenderSym CppSrcCode FileData ModData Class StateVarData MethodData AttachmentData (Doc, VisibilityTag) ParamData Body Block Statement Variable ScopeData Value BinderD TypeData

instance UnRepr CppSrcCode contents where
  unRepr :: CppSrcCode contents -> contents
unRepr = CppSrcCode contents -> contents
forall a. CppSrcCode a -> a
unCPPSC

instance FileSym CppSrcCode FileData ModData where
  fileDoc :: SrcState FileState ModData -> FS (CppSrcCode FileData)
fileDoc SrcState FileState ModData
m = do
    (FileState -> FileState) -> StateT FileState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (FileType -> FileState -> FileState
setFileType FileType
Source)
    String
-> (CppSrcCode ModData -> CppSrcCode Doc)
-> CppSrcCode Doc
-> SrcState FileState ModData
-> FS (CppSrcCode FileData)
forall (r :: * -> *) block mod file.
(BlockElim r block, RenderMod r mod, RenderFile r file mod) =>
String
-> (r mod -> r block) -> r block -> FS (r mod) -> FS (r file)
G.fileDoc String
cppSrcExt CppSrcCode ModData -> CppSrcCode Doc
forall (r :: * -> *) file mod.
RenderFile r file mod =>
r mod -> r Doc
top CppSrcCode Doc
forall (r :: * -> *) file mod. RenderFile r file mod => r Doc
bottom SrcState FileState ModData
m

  docMod :: String
-> String
-> [String]
-> String
-> FS (CppSrcCode FileData)
-> FS (CppSrcCode FileData)
docMod = String
-> String
-> String
-> [String]
-> String
-> FS (CppSrcCode FileData)
-> FS (CppSrcCode FileData)
forall (r :: * -> *) file mod.
(BlockCommentSym r, RenderFile r file mod) =>
String
-> String
-> String
-> [String]
-> String
-> FS (r file)
-> FS (r file)
CP.doxMod String
cppSrcExt

instance RenderFile CppSrcCode FileData ModData where
  top :: CppSrcCode ModData -> CppSrcCode Doc
top CppSrcCode ModData
_ = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty
  bottom :: CppSrcCode Doc
bottom = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

  commentedMod :: FS (CppSrcCode FileData)
-> SrcState FileState Doc -> FS (CppSrcCode FileData)
commentedMod = (Bool
 -> CppSrcCode FileData -> CppSrcCode Doc -> CppSrcCode FileData)
-> State FileState Bool
-> FS (CppSrcCode FileData)
-> SrcState FileState Doc
-> FS (CppSrcCode FileData)
forall a b c d s.
(a -> b -> c -> d)
-> State s a -> State s b -> State s c -> State s d
on3StateValues (\Bool
mn CppSrcCode FileData
m CppSrcCode Doc
cmt -> if Bool
mn then (FileData -> Doc -> FileData)
-> CppSrcCode FileData -> CppSrcCode Doc -> CppSrcCode FileData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues
    FileData -> Doc -> FileData
R.commentedMod CppSrcCode FileData
m CppSrcCode Doc
cmt else CppSrcCode FileData
m) State FileState Bool
getCurrMain

  fileFromData :: String -> SrcState FileState ModData -> FS (CppSrcCode FileData)
fileFromData = (String -> CppSrcCode ModData -> CppSrcCode FileData)
-> String -> SrcState FileState ModData -> FS (CppSrcCode FileData)
forall {k} (r :: k -> *) (mod :: k) (file :: k).
ModuleElim r mod =>
(String -> r mod -> r file) -> String -> FS (r mod) -> FS (r file)
G.fileFromData ((ModData -> FileData) -> CppSrcCode ModData -> CppSrcCode FileData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ((ModData -> FileData)
 -> CppSrcCode ModData -> CppSrcCode FileData)
-> (String -> ModData -> FileData)
-> String
-> CppSrcCode ModData
-> CppSrcCode FileData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ModData -> FileData
fileD)

instance ImportSym CppSrcCode where
  langImport :: String -> CppSrcCode Doc
langImport String
n = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> Doc -> Doc
angles (String -> Doc
text String
n)
  modImport :: String -> CppSrcCode Doc
modImport String
n = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> String -> Doc
doubleQuotedText (String -> String -> String
addExt String
cppHdrExt
    String
n)

instance AttachmentSym CppSrcCode AttachmentData where
  classLevel :: CppSrcCode AttachmentData
classLevel = AttachmentData -> CppSrcCode AttachmentData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (AttachmentData -> CppSrcCode AttachmentData)
-> AttachmentData -> CppSrcCode AttachmentData
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> AttachmentData
ad AttachmentTag
ClassLevel Doc
R.classLevel
  instanceLevel :: CppSrcCode AttachmentData
instanceLevel = AttachmentData -> CppSrcCode AttachmentData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (AttachmentData -> CppSrcCode AttachmentData)
-> AttachmentData -> CppSrcCode AttachmentData
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> AttachmentData
ad AttachmentTag
InstanceLevel Doc
R.instanceLevel

instance PermElim CppSrcCode AttachmentData where
  perm :: CppSrcCode AttachmentData -> Doc
perm = AttachmentData -> Doc
attachmentDoc (AttachmentData -> Doc)
-> (CppSrcCode AttachmentData -> AttachmentData)
-> CppSrcCode AttachmentData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode AttachmentData -> AttachmentData
forall a. CppSrcCode a -> a
unCPPSC
  binding :: CppSrcCode AttachmentData -> AttachmentTag
binding = AttachmentData -> AttachmentTag
attachment (AttachmentData -> AttachmentTag)
-> (CppSrcCode AttachmentData -> AttachmentData)
-> CppSrcCode AttachmentData
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode AttachmentData -> AttachmentData
forall a. CppSrcCode a -> a
unCPPSC

instance BodySym CppSrcCode Body Block where
  body :: [SrcState MethodState Doc] -> SrcState MethodState Doc
body = ([CppSrcCode Doc] -> CppSrcCode Doc)
-> [SrcState MethodState Doc] -> SrcState MethodState Doc
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([Doc] -> Doc) -> [CppSrcCode Doc] -> CppSrcCode Doc
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList [Doc] -> Doc
R.body)

  addComments :: String -> SrcState MethodState Doc -> SrcState MethodState Doc
addComments String
s = (CppSrcCode Doc -> CppSrcCode Doc)
-> SrcState MethodState Doc -> SrcState MethodState Doc
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((Doc -> Doc) -> CppSrcCode Doc -> CppSrcCode Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (String -> Doc -> Doc -> Doc
R.addComments String
s Doc
commentStart))

instance RenderBody CppSrcCode Body where
  multiBody :: [SrcState MethodState Doc] -> SrcState MethodState Doc
multiBody = [SrcState MethodState Doc] -> SrcState MethodState Doc
forall (r :: * -> *) bod.
(BodyElim r bod, Monad r) =>
[MS (r bod)] -> MS (r Doc)
G.multiBody

instance BodyElim CppSrcCode Body where
  body :: CppSrcCode Doc -> Doc
body = CppSrcCode Doc -> Doc
forall a. CppSrcCode a -> a
unCPPSC

instance BlockSym CppSrcCode Block Statement where
  block :: [SrcState MethodState Statement] -> SrcState MethodState Doc
block = [SrcState MethodState Statement] -> SrcState MethodState Doc
forall (r :: * -> *) stmt.
(Monad r, RenderStatement r stmt, StatementElim r stmt) =>
[MS (r stmt)] -> MS (r Doc)
G.block

instance RenderBlock CppSrcCode Block where
  multiBlock :: [SrcState MethodState Doc] -> SrcState MethodState Doc
multiBlock = [SrcState MethodState Doc] -> SrcState MethodState Doc
forall (r :: * -> *) block.
(BlockElim r block, Monad r) =>
[MS (r block)] -> MS (r Doc)
G.multiBlock

instance BlockElim CppSrcCode Block where
  block :: CppSrcCode Doc -> Doc
block = CppSrcCode Doc -> Doc
forall a. CppSrcCode a -> a
unCPPSC

instance TypeSym CppSrcCode TypeData where
  bool :: State ValueState (CppSrcCode TypeData)
bool = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppBoolType
  int :: State ValueState (CppSrcCode TypeData)
int = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
CP.int
  float :: State ValueState (CppSrcCode TypeData)
float = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.float
  double :: State ValueState (CppSrcCode TypeData)
double = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.double
  char :: State ValueState (CppSrcCode TypeData)
char = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.char
  string :: State ValueState (CppSrcCode TypeData)
string = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addUsing String
cppString (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addLangImportVS String
cppString)
    State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
CP.string
  infile :: State ValueState (CppSrcCode TypeData)
infile = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addUsing String
cppInfile)
    State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppInfileType
  outfile :: State ValueState (CppSrcCode TypeData)
outfile = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addUsing String
cppOutfile)
    State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppOutfileType
  referenceType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
referenceType = State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r TypeData, UnRepr r TypeData) =>
VS (r TypeData) -> VS (r TypeData)
cppReferenceType
  listType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
listType State ValueState (CppSrcCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addUsing String
vector (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addLangImportVS String
vector)
    String
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r TypeData, UnRepr r TypeData) =>
String -> VS (r TypeData) -> VS (r TypeData)
C.listType String
vector State ValueState (CppSrcCode TypeData)
t
  setType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
setType State ValueState (CppSrcCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addUsing String
cppSet (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addLangImportVS String
cppSet)
    String
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r TypeData, UnRepr r TypeData) =>
String -> VS (r TypeData) -> VS (r TypeData)
C.setType String
cppSet State ValueState (CppSrcCode TypeData)
t
  arrayType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
arrayType = State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
listType
  innerType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
innerType = State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
(TypeElim r typ, TypeSym r typ, OOTypeSym r typ) =>
VS (r typ) -> VS (r typ)
CG.innerType
  funcType :: [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
funcType = [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r TypeData) =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
cppFuncType
  void :: State ValueState (CppSrcCode TypeData)
void = State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.void

instance TypeElim CppSrcCode TypeData where
  getCodeType :: CppSrcCode TypeData -> CodeType
getCodeType = TypeData -> CodeType
cType (TypeData -> CodeType)
-> (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode TypeData -> TypeData
forall a. CppSrcCode a -> a
unCPPSC

instance OOTypeSym CppSrcCode TypeData where
  obj :: String -> State ValueState (CppSrcCode TypeData)
obj String
n = do
    cn <- LensLike'
  (Zoomed (StateT MethodState Identity) String)
  ValueState
  MethodState
-> StateT MethodState Identity String
-> StateT ValueState Identity String
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ValueState MethodState
-> StateT MethodState Identity c -> StateT ValueState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) String)
  ValueState
  MethodState
(MethodState -> Focusing Identity String MethodState)
-> ValueState -> Focusing Identity String ValueState
Lens' ValueState MethodState
lensVStoMS StateT MethodState Identity String
getClassName
    if cn == n then G.obj n else
      getClassMap >>= (\Map String String
cm -> (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (String
    -> State ValueState (CppSrcCode TypeData)
    -> State ValueState (CppSrcCode TypeData))
-> Maybe String
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a. a -> a
id (StateT ValueState Identity ()
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b.
StateT ValueState Identity a
-> StateT ValueState Identity b -> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (StateT ValueState Identity ()
 -> State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (String -> StateT ValueState Identity ())
-> String
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((ValueState -> ValueState) -> StateT ValueState Identity ())
-> (String -> ValueState -> ValueState)
-> String
-> StateT ValueState Identity ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addModuleImportVS)
        (String -> Map String String -> Maybe String
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup String
n Map String String
cm) (String -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => String -> VS (r TypeData)
G.obj String
n))

instance RenderType CppSrcCode TypeData where
  multiType :: [State ValueState (CppSrcCode TypeData)]
-> State ValueState (CppSrcCode TypeData)
multiType [State ValueState (CppSrcCode TypeData)]
_ = String -> State ValueState (CppSrcCode TypeData)
forall a. HasCallStack => String -> a
error (String -> State ValueState (CppSrcCode TypeData))
-> String -> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ String -> String
C.multiTypeError String
cppName

instance UnaryOpSym CppSrcCode where
  notOp :: State ValueState (CppSrcCode OpData)
notOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
C.notOp
  negateOp :: State ValueState (CppSrcCode OpData)
negateOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.negateOp
  sqrtOp :: State ValueState (CppSrcCode OpData)
sqrtOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppSqrtOp
  absOp :: State ValueState (CppSrcCode OpData)
absOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppAbsOp
  logOp :: State ValueState (CppSrcCode OpData)
logOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppLogOp
  lnOp :: State ValueState (CppSrcCode OpData)
lnOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppLnOp
  expOp :: State ValueState (CppSrcCode OpData)
expOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppExpOp
  sinOp :: State ValueState (CppSrcCode OpData)
sinOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppSinOp
  cosOp :: State ValueState (CppSrcCode OpData)
cosOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppCosOp
  tanOp :: State ValueState (CppSrcCode OpData)
tanOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppTanOp
  asinOp :: State ValueState (CppSrcCode OpData)
asinOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppAsinOp
  acosOp :: State ValueState (CppSrcCode OpData)
acosOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppAcosOp
  atanOp :: State ValueState (CppSrcCode OpData)
atanOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppAtanOp
  floorOp :: State ValueState (CppSrcCode OpData)
floorOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppFloorOp
  ceilOp :: State ValueState (CppSrcCode OpData)
ceilOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppCeilOp

instance BinaryOpSym CppSrcCode where
  equalOp :: State ValueState (CppSrcCode OpData)
equalOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.equalOp
  notEqualOp :: State ValueState (CppSrcCode OpData)
notEqualOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.notEqualOp
  greaterOp :: State ValueState (CppSrcCode OpData)
greaterOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.greaterOp
  greaterEqualOp :: State ValueState (CppSrcCode OpData)
greaterEqualOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.greaterEqualOp
  lessOp :: State ValueState (CppSrcCode OpData)
lessOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.lessOp
  lessEqualOp :: State ValueState (CppSrcCode OpData)
lessEqualOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.lessEqualOp
  plusOp :: State ValueState (CppSrcCode OpData)
plusOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.plusOp
  minusOp :: State ValueState (CppSrcCode OpData)
minusOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.minusOp
  multOp :: State ValueState (CppSrcCode OpData)
multOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.multOp
  divideOp :: State ValueState (CppSrcCode OpData)
divideOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.divideOp
  powerOp :: State ValueState (CppSrcCode OpData)
powerOp = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode OpData)
forall a. VS a -> VS a
addMathHImport State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
cppPowerOp
  moduloOp :: State ValueState (CppSrcCode OpData)
moduloOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
G.moduloOp
  andOp :: State ValueState (CppSrcCode OpData)
andOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
C.andOp
  orOp :: State ValueState (CppSrcCode OpData)
orOp = State ValueState (CppSrcCode OpData)
forall (r :: * -> *). Monad r => VSOp r
C.orOp

instance OpElim CppSrcCode where
  uOp :: CppSrcCode OpData -> Doc
uOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (CppSrcCode OpData -> OpData) -> CppSrcCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode OpData -> OpData
forall a. CppSrcCode a -> a
unCPPSC
  bOp :: CppSrcCode OpData -> Doc
bOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (CppSrcCode OpData -> OpData) -> CppSrcCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode OpData -> OpData
forall a. CppSrcCode a -> a
unCPPSC
  uOpPrec :: CppSrcCode OpData -> Int
uOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (CppSrcCode OpData -> OpData) -> CppSrcCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode OpData -> OpData
forall a. CppSrcCode a -> a
unCPPSC
  bOpPrec :: CppSrcCode OpData -> Int
bOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (CppSrcCode OpData -> OpData) -> CppSrcCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode OpData -> OpData
forall a. CppSrcCode a -> a
unCPPSC

instance ScopeSym CppSrcCode ScopeData where
  global :: CppSrcCode ScopeData
global = CppSrcCode ScopeData
forall (r :: * -> *). Monad r => r ScopeData
CP.global
  mainFn :: CppSrcCode ScopeData
mainFn = CppSrcCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
local
  local :: CppSrcCode ScopeData
local = CppSrcCode ScopeData
forall (r :: * -> *). Monad r => r ScopeData
G.local

instance ScopeElim CppSrcCode ScopeData where
  scopeData :: CppSrcCode ScopeData -> ScopeData
scopeData = CppSrcCode ScopeData -> ScopeData
forall a. CppSrcCode a -> a
unCPPSC

instance VariableSym CppSrcCode Variable TypeData where
  var :: String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
var          = String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> VS (r var)
G.var
  constant :: String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
constant     = String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
var
  extVar :: String
-> String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
extVar String
l String
n State ValueState (CppSrcCode TypeData)
t = (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addModuleImportVS String
l) StateT ValueState Identity ()
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall a b.
StateT ValueState Identity a
-> StateT ValueState Identity b -> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
var String
n State ValueState (CppSrcCode TypeData)
t

instance OOVariableSym CppSrcCode Variable Value TypeData where
  classVar :: String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
classVar = String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> VS (r var)
G.classVar
  classConst :: String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
classConst = String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
String -> VS (r typ) -> VS (r var)
classVar
  classVarAccess :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
classVarAccess State ValueState (CppSrcCode TypeData)
c' SrcState ValueState Variable
v'= do
    c <- State ValueState (CppSrcCode TypeData)
c'
    v <- v'
    vfd <- varFromData
      (variableBind v) (getTypeString c `nmSpcAccess` variableName v)
      (toState $ variableType v) (cppClassVarAccess (renderType c) (RC.variable v))
    toState $ classVarAccessCheck vfd
  extClassVarAccess :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable -> SrcState ValueState Variable
extClassVarAccess State ValueState (CppSrcCode TypeData)
c SrcState ValueState Variable
v = do
    t <- State ValueState (CppSrcCode TypeData)
c
    cm <- getClassMap
    maybe id ((>>) . modify . addModuleImportVS)
      (Map.lookup (getTypeString t) cm) $ classVarAccess (pure t) v
  instanceVarAccess :: VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState ValueState Variable
instanceVarAccess VS (CppSrcCode Value)
ob SrcState ValueState Variable
vr = do
    ob' <- VS (CppSrcCode Value)
ob
    vr' <- vr
    let objTp = TypeData -> CodeType
cType (TypeData -> CodeType) -> TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> TypeData
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData -> TypeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType CppSrcCode Value
ob'
    case objTp of
      (Reference CodeType
_) -> let
          instanceVarAccess' :: AttachmentTag -> SrcState ValueState Variable
instanceVarAccess' AttachmentTag
ClassLevel = String -> SrcState ValueState Variable
forall a. HasCallStack => String -> a
error
            String
"Cannot access class-level variables through an object, use classVarAccess instead"
          instanceVarAccess' AttachmentTag
InstanceLevel = String
-> CppSrcCode TypeData -> Doc -> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> r typ -> Doc -> VS (r var)
mkVar
            (Doc -> String
render (CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
ob') String -> String -> String
forall a. Semigroup a => a -> a -> a
P.<> String
ptrAccess String -> String -> String
forall a. Semigroup a => a -> a -> a
P.<> CppSrcCode Variable -> String
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> String
variableName CppSrcCode Variable
vr')
            (CppSrcCode Variable -> CppSrcCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType CppSrcCode Variable
vr') (CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
ob' Doc -> Doc -> Doc
<> Doc
ptrAccess' Doc -> Doc -> Doc
<> CppSrcCode Variable -> Doc
forall {k} (r :: k -> *) (var :: k).
InternalVarElim r var =>
r var -> Doc
RC.variable CppSrcCode Variable
vr')
        in AttachmentTag -> SrcState ValueState Variable
instanceVarAccess' (CppSrcCode Variable -> AttachmentTag
forall {k} (r :: k -> *) (var :: k).
InternalVarElim r var =>
r var -> AttachmentTag
variableBind CppSrcCode Variable
vr')
      CodeType
_ -> VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k) (val :: k).
(InternalVarElim r var, RenderVariable r var typ, ValueElim r val,
 VariableElim r var typ) =>
VS (r val) -> VS (r var) -> VS (r var)
G.instanceVarAccess VS (CppSrcCode Value)
ob SrcState ValueState Variable
vr

instance SelfSym CppSrcCode Variable where
  self :: SrcState ValueState Variable
self = do
    l <- LensLike'
  (Zoomed (StateT MethodState Identity) String)
  ValueState
  MethodState
-> StateT MethodState Identity String
-> StateT ValueState Identity String
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ValueState MethodState
-> StateT MethodState Identity c -> StateT ValueState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) String)
  ValueState
  MethodState
(MethodState -> Focusing Identity String MethodState)
-> ValueState -> Focusing Identity String ValueState
Lens' ValueState MethodState
lensVStoMS StateT MethodState Identity String
getClassName
    mkStateVar R.this (referenceType $ obj l) R.this'

instance VariableElim CppSrcCode Variable TypeData where
  variableName :: CppSrcCode Variable -> String
variableName = Variable -> String
varName (Variable -> String)
-> (CppSrcCode Variable -> Variable)
-> CppSrcCode Variable
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Variable -> Variable
forall a. CppSrcCode a -> a
unCPPSC
  variableType :: CppSrcCode Variable -> CppSrcCode TypeData
variableType = (Variable -> TypeData)
-> CppSrcCode Variable -> CppSrcCode TypeData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue Variable -> TypeData
varType

instance InternalVarElim CppSrcCode Variable where
  variableBind :: CppSrcCode Variable -> AttachmentTag
variableBind = Variable -> AttachmentTag
varBind (Variable -> AttachmentTag)
-> (CppSrcCode Variable -> Variable)
-> CppSrcCode Variable
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Variable -> Variable
forall a. CppSrcCode a -> a
unCPPSC
  variable :: CppSrcCode Variable -> Doc
variable = Variable -> Doc
varDoc (Variable -> Doc)
-> (CppSrcCode Variable -> Variable) -> CppSrcCode Variable -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Variable -> Variable
forall a. CppSrcCode a -> a
unCPPSC

instance RenderVariable CppSrcCode Variable TypeData where
  varFromData :: AttachmentTag
-> String
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> SrcState ValueState Variable
varFromData AttachmentTag
b String
n State ValueState (CppSrcCode TypeData)
t' Doc
d = do
    t <- State ValueState (CppSrcCode TypeData)
t'
    toState $ on2CodeValues (vard b n) t (toCode d)

instance ValueSym CppSrcCode Value TypeData where
  valueType :: CppSrcCode Value -> CppSrcCode TypeData
valueType = (Value -> TypeData) -> CppSrcCode Value -> CppSrcCode TypeData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue Value -> TypeData
valType

instance Argument CppSrcCode Value where
  pointerArg :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
pointerArg = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a. a -> a
id

instance Literal CppSrcCode Value TypeData where
  litTrue :: VS (CppSrcCode Value)
litTrue = VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
VS (r val)
C.litTrue
  litFalse :: VS (CppSrcCode Value)
litFalse = VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
VS (r val)
C.litFalse
  litChar :: Char -> VS (CppSrcCode Value)
litChar = (Doc -> Doc) -> Char -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
(Doc -> Doc) -> Char -> VS (r val)
G.litChar Doc -> Doc
quotes
  litDouble :: Double -> VS (CppSrcCode Value)
litDouble = Double -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
Double -> VS (r val)
G.litDouble
  litFloat :: Float -> VS (CppSrcCode Value)
litFloat = Float -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
Float -> VS (r val)
C.litFloat
  litInt :: Integer -> VS (CppSrcCode Value)
litInt = Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
Integer -> VS (r val)
G.litInt
  litString :: String -> VS (CppSrcCode Value)
litString = String -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
String -> VS (r val)
G.litString
  litArray :: State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value)
litArray = (Doc -> Doc)
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ, ValueElim r val) =>
(Doc -> Doc) -> VS (r typ) -> [VS (r val)] -> VS (r val)
CP.litArray Doc -> Doc
braces
  litSet :: State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value)
litSet = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, ValueElim r val) =>
(VS (r typ) -> VS (r typ))
-> VS (r typ) -> [VS (r val)] -> VS (r val)
cppLitSet State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
setType
  litList :: State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value)
litList = (Doc -> Doc)
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ, ValueElim r val) =>
(Doc -> Doc) -> VS (r typ) -> [VS (r val)] -> VS (r val)
CP.litArray Doc -> Doc
braces

instance MathConstant CppSrcCode Value where
  pi :: VS (CppSrcCode Value)
pi = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addDefine String
mathDefines)
    VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a. VS a -> VS a
addMathHImport (State ValueState (CppSrcCode TypeData)
-> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
double Doc
cppPi)

instance VariableValue CppSrcCode Variable Value where
  valueOf :: SrcState ValueState Variable -> VS (CppSrcCode Value)
valueOf = SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(InternalVarElim r var, RenderValue r var val typ,
 VariableElim r var typ) =>
VS (r var) -> VS (r val)
G.valueOf

instance CommandLineArgs CppSrcCode Value where
  arg :: Integer -> VS (CppSrcCode Value)
arg Integer
n = VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ, ValueElim r val) =>
VS (r val) -> VS (r val) -> VS (r val)
G.arg (Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Integer -> VS (r val)
litInt (Integer -> VS (CppSrcCode Value))
-> Integer -> VS (CppSrcCode Value)
forall a b. (a -> b) -> a -> b
$ Integer
nInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
1) VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
VS (r val)
argsList
  argsList :: VS (CppSrcCode Value)
argsList = State ValueState (CppSrcCode TypeData)
-> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
argvType (String -> Doc
text String
argv)
  argExists :: Integer -> VS (CppSrcCode Value)
argExists Integer
i = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val)
listSize VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
VS (r val)
argsList VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
Comparison r val =>
VS (r val) -> VS (r val) -> VS (r val)
?> Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Integer -> VS (r val)
litInt (Integer -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Integer -> Integer) -> Integer -> Integer
forall a b. (a -> b) -> a -> b
$ Integer
iInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
1)

instance NumericExpression CppSrcCode Value where
  #~ :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#~) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr' State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
negateOp
  #/^ :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#/^) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sqrtOp
  #| :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#|) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
absOp
  #+ :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#+) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, TypeElim r typ,
 ValueElim r val, ValueSym r val typ) =>
VSBinOp r -> VS (r val) -> VS (r val) -> VS (r val)
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
plusOp
  #- :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#-) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, TypeElim r typ,
 ValueElim r val, ValueSym r val typ) =>
VSBinOp r -> VS (r val) -> VS (r val) -> VS (r val)
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
minusOp
  #* :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#*) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, TypeElim r typ,
 ValueElim r val, ValueSym r val typ) =>
VSBinOp r -> VS (r val) -> VS (r val) -> VS (r val)
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
multOp
  #/ :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#/) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, TypeElim r typ,
 ValueElim r val, ValueSym r val typ) =>
VSBinOp r -> VS (r val) -> VS (r val) -> VS (r val)
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
divideOp
  #% :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#%) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, TypeElim r typ,
 ValueElim r val, ValueSym r val typ) =>
VSBinOp r -> VS (r val) -> VS (r val) -> VS (r val)
binExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
moduloOp
  #^ :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(#^) = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, TypeElim r typ,
 ValueElim r val, ValueSym r val typ) =>
VSBinOp r -> VS (r val) -> VS (r val) -> VS (r val)
binExpr' State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
powerOp

  log :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
log = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
logOp
  ln :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
ln = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
lnOp
  exp :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
exp = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
expOp
  sin :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
sin = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sinOp
  cos :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cos = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
cosOp
  tan :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
tan = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
tanOp
  csc :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
csc = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
(ValueSym r val typ, Literal r val typ, NumericExpression r val,
 TypeElim r typ) =>
VS (r val) -> VS (r val)
G.csc
  sec :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
sec = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
(ValueSym r val typ, Literal r val typ, NumericExpression r val,
 TypeElim r typ) =>
VS (r val) -> VS (r val)
G.sec
  cot :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cot = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
(ValueSym r val typ, Literal r val typ, NumericExpression r val,
 TypeElim r typ) =>
VS (r val) -> VS (r val)
G.cot
  arcsin :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
arcsin = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
asinOp
  arccos :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
arccos = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
acosOp
  arctan :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
arctan = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
atanOp
  floor :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
floor = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
floorOp
  ceil :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
ceil = State ValueState (CppSrcCode OpData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val,
 ValueSym r val typ) =>
VSUnOp r -> VS (r val) -> VS (r val)
unExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
ceilOp

instance BooleanExpression CppSrcCode Value where
  ?! :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?!) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSUnOp r -> VS (r typ) -> VS (r val) -> VS (r val)
typeUnExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
notOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool
  ?&& :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?&&) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSBinOp r -> VS (r typ) -> VS (r val) -> VS (r val) -> VS (r val)
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
andOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool
  ?|| :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?||) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSBinOp r -> VS (r typ) -> VS (r val) -> VS (r val) -> VS (r val)
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
orOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool

instance Comparison CppSrcCode Value where
  ?< :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?<) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSBinOp r -> VS (r typ) -> VS (r val) -> VS (r val) -> VS (r val)
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool
  ?<= :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?<=) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSBinOp r -> VS (r typ) -> VS (r val) -> VS (r val) -> VS (r val)
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessEqualOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool
  ?> :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?>) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSBinOp r -> VS (r typ) -> VS (r val) -> VS (r val) -> VS (r val)
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool
  ?>= :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?>=) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSBinOp r -> VS (r typ) -> VS (r val) -> VS (r val) -> VS (r val)
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterEqualOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool
  ?== :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?==) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSBinOp r -> VS (r typ) -> VS (r val) -> VS (r val) -> VS (r val)
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
equalOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool
  ?!= :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
(?!=) = State ValueState (CppSrcCode OpData)
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(OpElim r, RenderValue r var val typ, ValueElim r val) =>
VSBinOp r -> VS (r typ) -> VS (r val) -> VS (r val) -> VS (r val)
typeBinExpr State ValueState (CppSrcCode OpData)
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
notEqualOp State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
bool

instance ValueExpression CppSrcCode Variable Value BinderD TypeData where
  inlineIf :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
inlineIf = VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, ValueElim r val, ValueSym r val typ) =>
VS (r val) -> VS (r val) -> VS (r val) -> VS (r val)
C.inlineIf

  funcAppMixedArgs :: MixedCall CppSrcCode Variable Value TypeData
funcAppMixedArgs = MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
MixedCall r var val typ
G.funcAppMixedArgs
  extFuncAppMixedArgs :: String -> MixedCall CppSrcCode Variable Value TypeData
extFuncAppMixedArgs String
l String
n State ValueState (CppSrcCode TypeData)
t [VS (CppSrcCode Value)]
vs [(SrcState ValueState Variable, VS (CppSrcCode Value))]
ns = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addModuleImportVS String
l)
    MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
MixedCall r var val typ
funcAppMixedArgs String
n State ValueState (CppSrcCode TypeData)
t [VS (CppSrcCode Value)]
vs [(SrcState ValueState Variable, VS (CppSrcCode Value))]
ns
  libFuncAppMixedArgs :: String -> MixedCall CppSrcCode Variable Value TypeData
libFuncAppMixedArgs = String -> MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
String -> MixedCall r var val typ
C.libFuncAppMixedArgs

  lambda :: [SrcState ValueState BinderD]
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
lambda = ([CppSrcCode BinderD] -> CppSrcCode Value -> Doc)
-> [SrcState ValueState BinderD]
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (binder :: k) (typ :: k) (var :: k)
       (val :: k).
(BinderElim r binder typ, RenderValue r var val typ, TypeSym r typ,
 ValueSym r val typ) =>
([r binder] -> r val -> Doc)
-> [VS (r binder)] -> VS (r val) -> VS (r val)
G.lambda [CppSrcCode BinderD] -> CppSrcCode Value -> Doc
cppLambda

  notNull :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
notNull VS (CppSrcCode Value)
v = VS (CppSrcCode Value)
v

instance OOValueExpression CppSrcCode Variable Value TypeData where
  newObjMixedArgs :: State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> VS (CppSrcCode Value)
newObjMixedArgs = MixedCall CppSrcCode Variable Value TypeData
forall (r :: * -> *) var val.
(RenderValue r var val TypeData, UnRepr r TypeData) =>
String -> MixedCtorCall r var val TypeData
G.newObjMixedArgs String
""
  extNewObjMixedArgs :: MixedCall CppSrcCode Variable Value TypeData
extNewObjMixedArgs String
l State ValueState (CppSrcCode TypeData)
t [VS (CppSrcCode Value)]
vs [(SrcState ValueState Variable, VS (CppSrcCode Value))]
ns = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addModuleImportVS String
l)
    State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOValueExpression r var val typ =>
MixedCtorCall r var val typ
newObjMixedArgs State ValueState (CppSrcCode TypeData)
t [VS (CppSrcCode Value)]
vs [(SrcState ValueState Variable, VS (CppSrcCode Value))]
ns
  libNewObjMixedArgs :: MixedCall CppSrcCode Variable Value TypeData
libNewObjMixedArgs = MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOValueExpression r var val typ =>
String -> MixedCtorCall r var val typ
C.libNewObjMixedArgs

instance RenderValue CppSrcCode Variable Value TypeData where
  inputFunc :: VS (CppSrcCode Value)
inputFunc = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a. VS a -> VS a
addIOStreamImport (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
string (String -> Doc
text String
cin)
  printFunc :: VS (CppSrcCode Value)
printFunc = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a. VS a -> VS a
addIOStreamImport (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void (String -> Doc
text String
cout)
  printLnFunc :: VS (CppSrcCode Value)
printLnFunc = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a. VS a -> VS a
addIOStreamImport (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void (String -> Doc
text String
cout)
  printFileFunc :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
printFileFunc = (CppSrcCode TypeData -> CppSrcCode Value -> VS (CppSrcCode Value))
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m a -> m b -> m c
on2StateWrapped (\CppSrcCode TypeData
vt CppSrcCode Value
w -> CppSrcCode TypeData -> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
r typ -> Doc -> VS (r val)
mkVal CppSrcCode TypeData
vt (CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
w)) State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void
  printFileLnFunc :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
printFileLnFunc = (CppSrcCode TypeData -> CppSrcCode Value -> VS (CppSrcCode Value))
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m a -> m b -> m c
on2StateWrapped (\CppSrcCode TypeData
vt CppSrcCode Value
w -> CppSrcCode TypeData -> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
r typ -> Doc -> VS (r val)
mkVal CppSrcCode TypeData
vt (CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
w)) State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void

  cast :: State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cast = State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cppCast

  call :: Maybe String
-> Maybe Doc -> MixedCall CppSrcCode Variable Value TypeData
call = String
-> Maybe String
-> Maybe Doc
-> MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(InternalVarElim r var, RenderValue r var val typ,
 ValueElim r val) =>
String -> Maybe String -> Maybe Doc -> MixedCall r var val typ
CP.call' String
cppName

  valFromData :: Maybe Int
-> Maybe Integer
-> State ValueState (CppSrcCode TypeData)
-> Doc
-> VS (CppSrcCode Value)
valFromData Maybe Int
p Maybe Integer
i State ValueState (CppSrcCode TypeData)
t' Doc
d = do
    t <- State ValueState (CppSrcCode TypeData)
t'
    toState $ on2CodeValues (vd p i) t (toCode d)

instance ValueElim CppSrcCode Value where
  valuePrec :: CppSrcCode Value -> Maybe Int
valuePrec = Value -> Maybe Int
valPrec (Value -> Maybe Int)
-> (CppSrcCode Value -> Value) -> CppSrcCode Value -> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Value -> Value
forall a. CppSrcCode a -> a
unCPPSC
  valueInt :: CppSrcCode Value -> Maybe Integer
valueInt = Value -> Maybe Integer
valInt (Value -> Maybe Integer)
-> (CppSrcCode Value -> Value) -> CppSrcCode Value -> Maybe Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Value -> Value
forall a. CppSrcCode a -> a
unCPPSC
  value :: CppSrcCode Value -> Doc
value = Value -> Doc
val (Value -> Doc)
-> (CppSrcCode Value -> Value) -> CppSrcCode Value -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Value -> Value
forall a. CppSrcCode a -> a
unCPPSC

instance InternalValueExp CppSrcCode Variable Value TypeData where
  objMethodCallMixedArgs' :: String
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> VS (CppSrcCode Value)
objMethodCallMixedArgs' String
fn State ValueState (CppSrcCode TypeData)
tp VS (CppSrcCode Value)
ob [VS (CppSrcCode Value)]
posArgs [(SrcState ValueState Variable, VS (CppSrcCode Value))]
nmArgs = do
    ob' <- VS (CppSrcCode Value)
ob
    let objTp = TypeData -> CodeType
cType (TypeData -> CodeType) -> TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> TypeData
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData -> TypeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType CppSrcCode Value
ob'
    case objTp of
      (Reference CodeType
_) -> Maybe String
-> Maybe Doc -> MixedCall CppSrcCode Variable Value TypeData
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
Maybe String -> Maybe Doc -> MixedCall r var val typ
RC.call Maybe String
forall a. Maybe a
Nothing (Doc -> Maybe Doc
forall a. a -> Maybe a
Just (Doc -> Maybe Doc) -> Doc -> Maybe Doc
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
ob' Doc -> Doc -> Doc
<> Doc
ptrAccess') String
fn State ValueState (CppSrcCode TypeData)
tp [VS (CppSrcCode Value)]
posArgs [(SrcState ValueState Variable, VS (CppSrcCode Value))]
nmArgs
      CodeType
_ -> String
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, ValueElim r val) =>
String
-> VS (r typ)
-> VS (r val)
-> [VS (r val)]
-> NamedArgs r var val
-> VS (r val)
G.objMethodCall String
fn State ValueState (CppSrcCode TypeData)
tp VS (CppSrcCode Value)
ob [VS (CppSrcCode Value)]
posArgs [(SrcState ValueState Variable, VS (CppSrcCode Value))]
nmArgs
  classMethodCallMixedArgs' :: String
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> VS (CppSrcCode Value)
classMethodCallMixedArgs' String
f State ValueState (CppSrcCode TypeData)
t State ValueState (CppSrcCode TypeData)
cls [VS (CppSrcCode Value)]
vs [(SrcState ValueState Variable, VS (CppSrcCode Value))]
ns = do
    c <- State ValueState (CppSrcCode TypeData)
cls
    RC.call Nothing (Just $ renderType c <> text nmSpc) f t vs ns

instance OOFunctionSym CppSrcCode Value TypeData where
  func :: String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> SrcState ValueState FuncData
func = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> SrcState ValueState FuncData
forall (r :: * -> *) typ val var binder.
(RenderFunction r typ, ValueElim r val,
 ValueExpression r var val binder typ) =>
String -> VS (r typ) -> [VS (r val)] -> VS (r FuncData)
G.func
  objAccess :: VS (CppSrcCode Value)
-> SrcState ValueState FuncData -> VS (CppSrcCode Value)
objAccess = VS (CppSrcCode Value)
-> SrcState ValueState FuncData -> VS (CppSrcCode Value)
forall (r :: * -> *) typ var val.
(FunctionElim r typ, RenderValue r var val typ, ValueElim r val) =>
VS (r val) -> VS (r FuncData) -> VS (r val)
G.objAccess

instance GetSet CppSrcCode Variable Value where
  get :: VS (CppSrcCode Value)
-> SrcState ValueState Variable -> VS (CppSrcCode Value)
get = VS (CppSrcCode Value)
-> SrcState ValueState Variable -> VS (CppSrcCode Value)
forall (r :: * -> *) var val typ.
(InternalGetSet r var val typ, OOFunctionSym r val typ) =>
VS (r val) -> VS (r var) -> VS (r val)
G.get
  set :: VS (CppSrcCode Value)
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
set = VS (CppSrcCode Value)
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) val typ var.
(ValueSym r val typ, InternalGetSet r var val typ,
 OOFunctionSym r val typ) =>
VS (r val) -> VS (r var) -> VS (r val) -> VS (r val)
G.set

instance IndexTranslator CppSrcCode Value where
  intToIndex :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
intToIndex = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k). VS (r val) -> VS (r val)
CP.intToIndex
  indexToInt :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
indexToInt = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k). VS (r val) -> VS (r val)
CP.indexToInt

instance Reference CppSrcCode Value where
  makeRef :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
makeRef VS (CppSrcCode Value)
vl = do
    vl' <- VS (CppSrcCode Value)
vl
    let vlTyp = TypeData -> CodeType
cType (TypeData -> CodeType) -> TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> TypeData
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData -> TypeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType CppSrcCode Value
vl'
        vlDoc = CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
vl'
    mkStateVal (convTypeOO $ Reference vlTyp) (cppPtr <> vlDoc)
  maybeDeref :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
maybeDeref VS (CppSrcCode Value)
vl = do
    vl' <- VS (CppSrcCode Value)
vl
    let vlTyp = TypeData -> CodeType
cType (TypeData -> CodeType) -> TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> TypeData
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData -> TypeData
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType CppSrcCode Value
vl'
        vlDoc = CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
vl'
    case vlTyp of
      (Reference CodeType
tp) -> State ValueState (CppSrcCode TypeData)
-> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal (CodeType -> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
(TypeSym r typ, OOTypeSym r typ) =>
CodeType -> VS (r typ)
convTypeOO CodeType
tp) (Doc
cppDeref Doc -> Doc -> Doc
<> Doc
vlDoc)
      CodeType
_ -> VS (CppSrcCode Value)
vl

instance Array CppSrcCode Variable Value where
  arrayElem :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState ValueState Variable
arrayElem = VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState ValueState Variable
forall {k} (r :: k -> *) (typ :: k) (val :: k) (var :: k).
(TypeSym r typ, ValueSym r val typ, IndexTranslator r val,
 RenderVariable r var typ, ValueElim r val) =>
VS (r val) -> VS (r val) -> VS (r var)
G.arrayElem
  arrayLength :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
arrayLength = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val)
listSize
  arrayCopy :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
arrayCopy = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a. a -> a
id -- C++ automatically copies std::vectors on assignment

instance List CppSrcCode Value where
  -- TODO [Brandon Bosman, 06/10/2026]: Check if the cast is really necessary
  listSize :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
listSize VS (CppSrcCode Value)
v = State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> VS (r val) -> VS (r val)
cast State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
int (String -> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (typ :: k) (var :: k) (val :: k).
(TypeSym r typ, InternalValueExp r var val typ) =>
String -> VS (r val) -> VS (r val)
C.listSize String
"size" VS (CppSrcCode Value)
v)
  listAccess :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
listAccess = VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall (r :: * -> *) typ val var.
(TypeSym r typ, ValueSym r val typ, IndexTranslator r val,
 InternalListFunc r val typ, FunctionElim r typ,
 RenderFunction r typ, RenderValue r var val typ, TypeElim r typ,
 ValueElim r val) =>
VS (r val) -> VS (r val) -> VS (r val)
G.listAccess
  indexOf :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
indexOf VS (CppSrcCode Value)
l VS (CppSrcCode Value)
v = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a. VS a -> VS a
addAlgorithmImportVS (VS (CppSrcCode Value) -> VS (CppSrcCode Value))
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall a b. (a -> b) -> a -> b
$ VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cppIndexFunc VS (CppSrcCode Value)
l VS (CppSrcCode Value)
v VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
#- VS (CppSrcCode Value) -> VS (CppSrcCode Value)
iterBegin VS (CppSrcCode Value)
l

instance ListStatement CppSrcCode Statement Value where
  listAdd :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
listAdd VS (CppSrcCode Value)
list VS (CppSrcCode Value)
idx VS (CppSrcCode Value)
vl = VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ValueStatement r stmt val =>
VS (r val) -> MS (r stmt)
valStmt (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$
    State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> String
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
InternalValueExp r var val typ =>
VS (r typ) -> VS (r val) -> String -> [VS (r val)] -> VS (r val)
objMethodCall State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void VS (CppSrcCode Value)
list String
cppListAdd [VS (CppSrcCode Value) -> VS (CppSrcCode Value)
iterBegin VS (CppSrcCode Value)
list VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
NumericExpression r val =>
VS (r val) -> VS (r val) -> VS (r val)
#+ VS (CppSrcCode Value)
idx, VS (CppSrcCode Value)
vl]
  listAppend :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
listAppend = String
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (typ :: k) (var :: k) (val :: k)
       (stmt :: k).
(TypeSym r typ, InternalValueExp r var val typ,
 ValueStatement r stmt val) =>
String -> VS (r val) -> VS (r val) -> MS (r stmt)
CG.listAppend String
cppListAppend
  listSet :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
listSet VS (CppSrcCode Value)
list VS (CppSrcCode Value)
idx VS (CppSrcCode Value)
vl = do
    listAccessVal <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> VS (CppSrcCode Value)
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val) -> VS (r val)
listAccess VS (CppSrcCode Value)
list VS (CppSrcCode Value)
idx)
    let listAccessVar =
          String
-> CppSrcCode TypeData -> Doc -> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> r typ -> Doc -> VS (r var)
mkVar (Doc -> String
render (Doc -> String) -> Doc -> String
forall a b. (a -> b) -> a -> b
$ CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
listAccessVal) (CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType CppSrcCode Value
listAccessVal) (CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
listAccessVal)
    listAccessVar &= vl

instance Set CppSrcCode Value where
  contains :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
contains = String
-> String
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall (r :: * -> *) typ val.
(TypeSym r typ, Comparison r val, OOFunctionSym r val typ) =>
String -> String -> VS (r val) -> VS (r val) -> VS (r val)
CP.containsInt String
cppIndex String
cppIterEnd
  setAdd :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
setAdd = String
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (typ :: k) (val :: k) (var :: k).
(TypeSym r typ, ValueSym r val typ,
 InternalValueExp r var val typ) =>
String -> VS (r val) -> VS (r val) -> VS (r val)
CP.setMethodCall String
cppListAdd
  setRemove :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
setRemove = String
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (typ :: k) (val :: k) (var :: k).
(TypeSym r typ, ValueSym r val typ,
 InternalValueExp r var val typ) =>
String -> VS (r val) -> VS (r val) -> VS (r val)
CP.setMethodCall String
cppListRemove
  setUnion :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
setUnion = String
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall a. HasCallStack => String -> a
error String
"not done yet"

instance InternalList CppSrcCode Block Variable Value where
  listSlice' :: Maybe (VS (CppSrcCode Value))
-> Maybe (VS (CppSrcCode Value))
-> Maybe (VS (CppSrcCode Value))
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
listSlice' = Maybe (VS (CppSrcCode Value))
-> Maybe (VS (CppSrcCode Value))
-> Maybe (VS (CppSrcCode Value))
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
forall (r :: * -> *) bod block stmt var val typ binder.
(BodySym r bod block, BlockSym r block stmt, EmptyStatement r stmt,
 ScopeSym r ScopeData, DeclStatement r bod stmt var ScopeData val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, TypeSym r typ,
 Literal r val typ, BooleanExpression r val, Comparison r val,
 NumericExpression r val, ValueExpression r var val binder typ,
 VariableSym r var typ, VariableValue r var val,
 IndexTranslator r val, List r val, ListStatement r stmt val,
 ValueElim r val, VariableElim r var typ) =>
Maybe (VS (r val))
-> Maybe (VS (r val))
-> Maybe (VS (r val))
-> VS (r var)
-> VS (r val)
-> MS (r block)
M.listSlice

instance InternalGetSet CppSrcCode Variable Value TypeData where
  getFunc :: SrcState ValueState Variable -> SrcState ValueState FuncData
getFunc = SrcState ValueState Variable -> SrcState ValueState FuncData
forall (r :: * -> *) val typ var.
(OOFunctionSym r val typ, VariableElim r var typ) =>
VS (r var) -> VS (r FuncData)
G.getFunc
  setFunc :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ValueState FuncData
setFunc = State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ValueState FuncData
forall (r :: * -> *) val typ var.
(OOFunctionSym r val typ, VariableElim r var typ) =>
VS (r typ) -> VS (r var) -> VS (r val) -> VS (r FuncData)
G.setFunc

instance InternalListFunc CppSrcCode Value TypeData where
  listAccessFunc :: State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> SrcState ValueState FuncData
listAccessFunc = String
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> SrcState ValueState FuncData
forall (r :: * -> *) val typ.
(ValueSym r val typ, OOFunctionSym r val typ, TypeElim r typ) =>
String -> VS (r typ) -> VS (r val) -> VS (r FuncData)
CP.listAccessFunc' String
cppListAccess

instance BinderSym CppSrcCode BinderD TypeData where
  binder :: String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState BinderD
binder String
nm State ValueState (CppSrcCode TypeData)
tp = (TypeData -> BinderD) -> CppSrcCode TypeData -> CppSrcCode BinderD
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (String -> TypeData -> BinderD
bindFormD String
nm) (CppSrcCode TypeData -> CppSrcCode BinderD)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState BinderD
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> State ValueState (CppSrcCode TypeData)
tp

instance BinderElim CppSrcCode BinderD TypeData where
  binderName :: CppSrcCode BinderD -> String
binderName = BinderD -> String
bindName (BinderD -> String)
-> (CppSrcCode BinderD -> BinderD) -> CppSrcCode BinderD -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode BinderD -> BinderD
forall a. CppSrcCode a -> a
unCPPSC
  binderType :: CppSrcCode BinderD -> CppSrcCode TypeData
binderType = (BinderD -> TypeData) -> CppSrcCode BinderD -> CppSrcCode TypeData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue BinderD -> TypeData
bindType

instance InternalBinderElim CppSrcCode BinderD where
  binderElim :: CppSrcCode BinderD -> Doc
binderElim = String -> Doc
text (String -> Doc)
-> (CppSrcCode BinderD -> String) -> CppSrcCode BinderD -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BinderD -> String
bindName (BinderD -> String)
-> (CppSrcCode BinderD -> BinderD) -> CppSrcCode BinderD -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode BinderD -> BinderD
forall a. CppSrcCode a -> a
unCPPSC

instance RenderFunction CppSrcCode TypeData where
  funcFromData :: Doc
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
funcFromData Doc
d = (CppSrcCode TypeData -> CppSrcCode FuncData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((TypeData -> FuncData)
-> CppSrcCode TypeData -> CppSrcCode FuncData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (TypeData -> Doc -> FuncData
`fd` Doc
d))

instance FunctionElim CppSrcCode TypeData where
  functionType :: CppSrcCode FuncData -> CppSrcCode TypeData
functionType = (FuncData -> TypeData)
-> CppSrcCode FuncData -> CppSrcCode TypeData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue FuncData -> TypeData
fType
  function :: CppSrcCode FuncData -> Doc
function = FuncData -> Doc
funcDoc (FuncData -> Doc)
-> (CppSrcCode FuncData -> FuncData) -> CppSrcCode FuncData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode FuncData -> FuncData
forall a. CppSrcCode a -> a
unCPPSC

instance InternalAssignStmt CppSrcCode Statement Variable Value where
  multiAssign :: [SrcState ValueState Variable]
-> [VS (CppSrcCode Value)] -> SrcState MethodState Statement
multiAssign [SrcState ValueState Variable]
_ [VS (CppSrcCode Value)]
_ = String -> SrcState MethodState Statement
forall a. HasCallStack => String -> a
error (String -> SrcState MethodState Statement)
-> String -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ String -> String
C.multiAssignError String
cppName

instance InternalIOStmt CppSrcCode Statement Value where
  printSt :: Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
printSt Bool
nl Maybe (VS (CppSrcCode Value))
_ = Bool
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
(RenderStatement r stmt, ValueElim r val) =>
Bool -> VS (r val) -> VS (r val) -> MS (r stmt)
cppPrint Bool
nl

instance InternalControlStmt CppSrcCode Statement Value where
  multiReturn :: [VS (CppSrcCode Value)] -> SrcState MethodState Statement
multiReturn [VS (CppSrcCode Value)]
_ = String -> SrcState MethodState Statement
forall a. HasCallStack => String -> a
error (String -> SrcState MethodState Statement)
-> String -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ String -> String
C.multiReturnError String
cppName

instance RenderStatement CppSrcCode Statement where
  stmt :: SrcState MethodState Statement -> SrcState MethodState Statement
stmt = SrcState MethodState Statement -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
(RenderStatement r stmt, StatementElim r stmt) =>
MS (r stmt) -> MS (r stmt)
G.stmt
  loopStmt :: SrcState MethodState Statement -> SrcState MethodState Statement
loopStmt = SrcState MethodState Statement -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
(RenderStatement r stmt, StatementElim r stmt) =>
MS (r stmt) -> MS (r stmt)
G.loopStmt
  stmtFromData :: Doc -> Terminator -> SrcState MethodState Statement
stmtFromData Doc
d Terminator
t = CppSrcCode Statement -> SrcState MethodState Statement
forall a s. a -> State s a
toState (CppSrcCode Statement -> SrcState MethodState Statement)
-> CppSrcCode Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ Statement -> CppSrcCode Statement
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, Terminator
t)

instance StatementElim CppSrcCode Statement where
  statement :: CppSrcCode Statement -> Doc
statement = Statement -> Doc
forall a b. (a, b) -> a
fst (Statement -> Doc)
-> (CppSrcCode Statement -> Statement)
-> CppSrcCode Statement
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Statement -> Statement
forall a. CppSrcCode a -> a
unCPPSC
  statementTerm :: CppSrcCode Statement -> Terminator
statementTerm = Statement -> Terminator
forall a b. (a, b) -> b
snd (Statement -> Terminator)
-> (CppSrcCode Statement -> Statement)
-> CppSrcCode Statement
-> Terminator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Statement -> Statement
forall a. CppSrcCode a -> a
unCPPSC

instance EmptyStatement CppSrcCode Statement where
  emptyStmt :: SrcState MethodState Statement
emptyStmt = SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
MS (r stmt)
G.emptyStmt
instance MultiStatement CppSrcCode Statement where
  multi :: [SrcState MethodState Statement] -> SrcState MethodState Statement
multi = ([CppSrcCode Statement] -> CppSrcCode Statement)
-> [SrcState MethodState Statement]
-> SrcState MethodState Statement
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([Statement] -> Statement)
-> [CppSrcCode Statement] -> CppSrcCode Statement
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList [Statement] -> Statement
R.multiStmt)
instance ValueStatement CppSrcCode Statement Value where
  valStmt :: VS (CppSrcCode Value) -> SrcState MethodState Statement
valStmt = Terminator
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
(RenderStatement r stmt, ValueElim r val) =>
Terminator -> VS (r val) -> MS (r stmt)
G.valStmt Terminator
Semi

instance AssignStatement CppSrcCode Statement Variable Value where
  assign :: SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
assign = Terminator
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (var :: k) (stmt :: k) (val :: k).
(InternalVarElim r var, RenderStatement r stmt, ValueElim r val) =>
Terminator -> VS (r var) -> VS (r val) -> MS (r stmt)
G.assign Terminator
Semi
  &-= :: SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
(&-=) = Terminator
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (var :: k) (stmt :: k) (val :: k).
(InternalVarElim r var, RenderStatement r stmt, ValueElim r val) =>
Terminator -> VS (r var) -> VS (r val) -> MS (r stmt)
G.subAssign Terminator
Semi
  &+= :: SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
(&+=) = SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (var :: k) (stmt :: k) (val :: k).
(InternalVarElim r var, RenderStatement r stmt, ValueElim r val) =>
VS (r var) -> VS (r val) -> MS (r stmt)
C.increment
  &++ :: SrcState ValueState Variable -> SrcState MethodState Statement
(&++) = SrcState ValueState Variable -> SrcState MethodState Statement
forall {k} (r :: k -> *) (var :: k) (stmt :: k).
(InternalVarElim r var, RenderStatement r stmt) =>
VS (r var) -> MS (r stmt)
C.increment1
  &-- :: SrcState ValueState Variable -> SrcState MethodState Statement
(&--) = SrcState ValueState Variable -> SrcState MethodState Statement
forall {k} (r :: k -> *) (var :: k) (stmt :: k).
(InternalVarElim r var, RenderStatement r stmt) =>
VS (r var) -> MS (r stmt)
C.decrement1

instance DeclStatement CppSrcCode Body Statement Variable ScopeData Value where
  -- TODO [Brandon Bosman, 05/29/2026]: consider re-enabling `varDec` for arrays
  varDec :: SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState Statement
varDec SrcState ValueState Variable
vr CppSrcCode ScopeData
scp = do
    vr' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
vr
    let tp = (TypeData -> CodeType
cType (TypeData -> CodeType)
-> (CppSrcCode Variable -> TypeData)
-> CppSrcCode Variable
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode TypeData -> TypeData
forall a. CppSrcCode a -> a
unCPPSC (CppSrcCode TypeData -> TypeData)
-> (CppSrcCode Variable -> CppSrcCode TypeData)
-> CppSrcCode Variable
-> TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode Variable -> CppSrcCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType) CppSrcCode Variable
vr'
    case tp of
      (Array CodeType
_) -> String -> SrcState MethodState Statement
forall a. HasCallStack => String -> a
error String
"Can't use `varDec` for C++ arrays; use `arrayDec`"
      CodeType
_         -> CppSrcCode AttachmentData
-> CppSrcCode AttachmentData
-> Doc
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState Statement
forall (r :: * -> *) var attch stmt.
(InternalVarElim r var, PermElim r attch, RenderStatement r stmt,
 ScopeElim r ScopeData, UnRepr r TypeData, TypeElim r TypeData,
 VariableElim r var TypeData) =>
r attch
-> r attch -> Doc -> VS (r var) -> r ScopeData -> MS (r stmt)
C.varDec CppSrcCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
classLevel CppSrcCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
instanceLevel Doc
empty SrcState ValueState Variable
vr CppSrcCode ScopeData
scp
  varDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
varDecDef = Terminator
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
(DeclStatement r bod stmt var scope val, RenderStatement r stmt,
 StatementElim r stmt, ValueElim r val) =>
Terminator -> VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
C.varDecDef Terminator
Semi
  setDec :: SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState Statement
setDec = SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
varDec
  setDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
setDecDef = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
varDecDef
  listDec :: Integer
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState Statement
listDec Integer
n = (CppSrcCode Value -> Doc)
-> VS (CppSrcCode Value)
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
(DeclStatement r bod stmt var scope val, RenderStatement r stmt,
 StatementElim r stmt) =>
(r val -> Doc)
-> VS (r val) -> VS (r var) -> r scope -> MS (r stmt)
C.listDec CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
cppListDecDoc (Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Integer -> VS (r val)
litInt Integer
n)
  listDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
listDecDef = ([CppSrcCode Value] -> Doc)
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
forall (r :: * -> *) bod stmt var scope val.
(DeclStatement r bod stmt var scope val, RenderStatement r stmt,
 StatementElim r stmt) =>
([r Value] -> Doc)
-> VS (r var) -> r scope -> [VS (r Value)] -> MS (r stmt)
cppListDecDef [CppSrcCode Value] -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
[r val] -> Doc
cppListDecDefDoc
  arrayDec :: Integer
-> VS (CppSrcCode Value)
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> SrcState MethodState Statement
arrayDec Integer
n VS (CppSrcCode Value)
_ SrcState ValueState Variable
vr CppSrcCode ScopeData
scp = do
    decBase <- SrcState ValueState Variable -> CppSrcCode ScopeData -> MS Doc
arrayDecBase SrcState ValueState Variable
vr CppSrcCode ScopeData
scp
    let sz' = Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Integer -> VS (r val)
litInt Integer
n :: VS (CppSrcCode Value)
    sz <- zoom lensMStoVS sz'
    mkStmt $ decBase <> parens (RC.value sz)
  arrayDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
arrayDecDef SrcState ValueState Variable
vr CppSrcCode ScopeData
scp [VS (CppSrcCode Value)]
vals = do
    decBase <- SrcState ValueState Variable -> CppSrcCode ScopeData -> MS Doc
arrayDecBase SrcState ValueState Variable
vr CppSrcCode ScopeData
scp
    vs <- mapM (zoom lensMStoVS) vals
    mkStmt $ decBase <+> braces (valueList vs)
  constDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
constDecDef = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall (r :: * -> *) var stmt val.
(InternalVarElim r var, RenderStatement r stmt,
 ScopeElim r ScopeData, UnRepr r TypeData, ValueElim r val,
 VariableElim r var TypeData) =>
VS (r var) -> r ScopeData -> VS (r val) -> MS (r stmt)
CG.constDecDef
  funcDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState Statement
funcDecDef = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState Statement
cppFuncDecDef

instance OODeclStatement CppSrcCode Statement Variable ScopeData Value where
  objDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
objDecDef = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
varDecDef
  objDecNew :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
objDecNew = SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k) (typ :: k).
(DeclStatement r bod stmt var scope val,
 OOValueExpression r var val typ, VariableElim r var typ) =>
VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
G.objDecNew
  extObjDecNew :: String
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
extObjDecNew = String
-> SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [VS (CppSrcCode Value)]
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k) (typ :: k).
(DeclStatement r bod stmt var scope val,
 OOValueExpression r var val typ, VariableElim r var typ) =>
String -> VS (r var) -> r scope -> [VS (r val)] -> MS (r stmt)
C.extObjDecNew

instance PrintConsole CppSrcCode Statement Value where
  print :: VS (CppSrcCode Value) -> SrcState MethodState Statement
print      = Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (block :: k) (stmt :: k) (bod :: k)
       (val :: k) (scope :: k) (var :: k) (typ :: k).
(BlockSym r block stmt, BodySym r bod block, MultiStatement r stmt,
 PrintConsole r stmt val, PrintFile r stmt val, ScopeSym r scope,
 DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, ValueSym r val typ,
 Literal r val typ, NumericExpression r val, Comparison r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 TypeSym r typ, TypeElim r typ, InternalIOStmt r stmt val) =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
G.print Bool
False Maybe (VS (CppSrcCode Value))
forall a. Maybe a
Nothing VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
printFunc
  printLn :: VS (CppSrcCode Value) -> SrcState MethodState Statement
printLn    = Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (block :: k) (stmt :: k) (bod :: k)
       (val :: k) (scope :: k) (var :: k) (typ :: k).
(BlockSym r block stmt, BodySym r bod block, MultiStatement r stmt,
 PrintConsole r stmt val, PrintFile r stmt val, ScopeSym r scope,
 DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, ValueSym r val typ,
 Literal r val typ, NumericExpression r val, Comparison r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 TypeSym r typ, TypeElim r typ, InternalIOStmt r stmt val) =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
G.print Bool
True  Maybe (VS (CppSrcCode Value))
forall a. Maybe a
Nothing VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
printLnFunc
  printStr :: String -> SrcState MethodState Statement
printStr   = Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (block :: k) (stmt :: k) (bod :: k)
       (val :: k) (scope :: k) (var :: k) (typ :: k).
(BlockSym r block stmt, BodySym r bod block, MultiStatement r stmt,
 PrintConsole r stmt val, PrintFile r stmt val, ScopeSym r scope,
 DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, ValueSym r val typ,
 Literal r val typ, NumericExpression r val, Comparison r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 TypeSym r typ, TypeElim r typ, InternalIOStmt r stmt val) =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
G.print Bool
False Maybe (VS (CppSrcCode Value))
forall a. Maybe a
Nothing VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
printFunc   (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (String -> VS (CppSrcCode Value))
-> String
-> SrcState MethodState Statement
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
String -> VS (r val)
litString
  printStrLn :: String -> SrcState MethodState Statement
printStrLn = Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (block :: k) (stmt :: k) (bod :: k)
       (val :: k) (scope :: k) (var :: k) (typ :: k).
(BlockSym r block stmt, BodySym r bod block, MultiStatement r stmt,
 PrintConsole r stmt val, PrintFile r stmt val, ScopeSym r scope,
 DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, ValueSym r val typ,
 Literal r val typ, NumericExpression r val, Comparison r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 TypeSym r typ, TypeElim r typ, InternalIOStmt r stmt val) =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
G.print Bool
True  Maybe (VS (CppSrcCode Value))
forall a. Maybe a
Nothing VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
printLnFunc (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (String -> VS (CppSrcCode Value))
-> String
-> SrcState MethodState Statement
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
String -> VS (r val)
litString

instance ReadConsole CppSrcCode Statement Variable where
  getInput :: SrcState ValueState Variable -> SrcState MethodState Statement
getInput SrcState ValueState Variable
v = SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
cppInput SrcState ValueState Variable
v VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
inputFunc
  discardInput :: SrcState MethodState Statement
discardInput = SrcState MethodState Statement -> SrcState MethodState Statement
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState Statement -> SrcState MethodState Statement)
-> SrcState MethodState Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ SrcState MethodState Statement -> SrcState MethodState Statement
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState Statement -> SrcState MethodState Statement)
-> SrcState MethodState Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ Char -> VS (CppSrcCode Value) -> SrcState MethodState Statement
cppDiscardInput Char
'\n'
    VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val)
inputFunc

instance FileHandling CppSrcCode Statement Variable Value where
  openFileR :: SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
openFileR = String
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
cppOpenFile String
cppR
  openFileW :: SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
openFileW = String
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
cppOpenFile String
cppW
  openFileA :: SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
openFileA = String
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
cppOpenFile String
cppA
  closeFile :: VS (CppSrcCode Value) -> SrcState MethodState Statement
closeFile = String -> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (typ :: k) (var :: k) (val :: k)
       (stmt :: k).
(TypeSym r typ, InternalValueExp r var val typ,
 ValueStatement r stmt val) =>
String -> VS (r val) -> MS (r stmt)
G.closeFile String
cppClose

instance PrintFile CppSrcCode Statement Value where
  printFile :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
printFile VS (CppSrcCode Value)
f      = Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (block :: k) (stmt :: k) (bod :: k)
       (val :: k) (scope :: k) (var :: k) (typ :: k).
(BlockSym r block stmt, BodySym r bod block, MultiStatement r stmt,
 PrintConsole r stmt val, PrintFile r stmt val, ScopeSym r scope,
 DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, ValueSym r val typ,
 Literal r val typ, NumericExpression r val, Comparison r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 TypeSym r typ, TypeElim r typ, InternalIOStmt r stmt val) =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
G.print Bool
False (VS (CppSrcCode Value) -> Maybe (VS (CppSrcCode Value))
forall a. a -> Maybe a
Just VS (CppSrcCode Value)
f) (VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val) -> VS (r val)
printFileFunc VS (CppSrcCode Value)
f)
  printFileLn :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
printFileLn VS (CppSrcCode Value)
f    = Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (block :: k) (stmt :: k) (bod :: k)
       (val :: k) (scope :: k) (var :: k) (typ :: k).
(BlockSym r block stmt, BodySym r bod block, MultiStatement r stmt,
 PrintConsole r stmt val, PrintFile r stmt val, ScopeSym r scope,
 DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, ValueSym r val typ,
 Literal r val typ, NumericExpression r val, Comparison r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 TypeSym r typ, TypeElim r typ, InternalIOStmt r stmt val) =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
G.print Bool
True  (VS (CppSrcCode Value) -> Maybe (VS (CppSrcCode Value))
forall a. a -> Maybe a
Just VS (CppSrcCode Value)
f) (VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val) -> VS (r val)
printFileLnFunc VS (CppSrcCode Value)
f)
  printFileStr :: VS (CppSrcCode Value) -> String -> SrcState MethodState Statement
printFileStr VS (CppSrcCode Value)
f   = Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (block :: k) (stmt :: k) (bod :: k)
       (val :: k) (scope :: k) (var :: k) (typ :: k).
(BlockSym r block stmt, BodySym r bod block, MultiStatement r stmt,
 PrintConsole r stmt val, PrintFile r stmt val, ScopeSym r scope,
 DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, ValueSym r val typ,
 Literal r val typ, NumericExpression r val, Comparison r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 TypeSym r typ, TypeElim r typ, InternalIOStmt r stmt val) =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
G.print Bool
False (VS (CppSrcCode Value) -> Maybe (VS (CppSrcCode Value))
forall a. a -> Maybe a
Just VS (CppSrcCode Value)
f) (VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val) -> VS (r val)
printFileFunc VS (CppSrcCode Value)
f)   (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (String -> VS (CppSrcCode Value))
-> String
-> SrcState MethodState Statement
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
String -> VS (r val)
litString
  printFileStrLn :: VS (CppSrcCode Value) -> String -> SrcState MethodState Statement
printFileStrLn VS (CppSrcCode Value)
f = Bool
-> Maybe (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (block :: k) (stmt :: k) (bod :: k)
       (val :: k) (scope :: k) (var :: k) (typ :: k).
(BlockSym r block stmt, BodySym r bod block, MultiStatement r stmt,
 PrintConsole r stmt val, PrintFile r stmt val, ScopeSym r scope,
 DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, ValueSym r val typ,
 Literal r val typ, NumericExpression r val, Comparison r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 TypeSym r typ, TypeElim r typ, InternalIOStmt r stmt val) =>
Bool
-> Maybe (VS (r val)) -> VS (r val) -> VS (r val) -> MS (r stmt)
G.print Bool
True  (VS (CppSrcCode Value) -> Maybe (VS (CppSrcCode Value))
forall a. a -> Maybe a
Just VS (CppSrcCode Value)
f) (VS (CppSrcCode Value) -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r val) -> VS (r val)
printFileLnFunc VS (CppSrcCode Value)
f) (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> (String -> VS (CppSrcCode Value))
-> String
-> SrcState MethodState Statement
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
String -> VS (r val)
litString

instance ReadFile CppSrcCode Statement Variable Value where
  getFileInput :: VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState MethodState Statement
getFileInput VS (CppSrcCode Value)
f SrcState ValueState Variable
v = SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
cppInput SrcState ValueState Variable
v VS (CppSrcCode Value)
f
  discardFileInput :: VS (CppSrcCode Value) -> SrcState MethodState Statement
discardFileInput VS (CppSrcCode Value)
f = SrcState MethodState Statement -> SrcState MethodState Statement
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState Statement -> SrcState MethodState Statement)
-> SrcState MethodState Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ SrcState MethodState Statement -> SrcState MethodState Statement
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState Statement -> SrcState MethodState Statement)
-> SrcState MethodState Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$
    Char -> VS (CppSrcCode Value) -> SrcState MethodState Statement
cppDiscardInput Char
' ' VS (CppSrcCode Value)
f
  getFileInputLine :: VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState MethodState Statement
getFileInputLine VS (CppSrcCode Value)
f SrcState ValueState Variable
v = VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ValueStatement r stmt val =>
VS (r val) -> MS (r stmt)
valStmt (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
getLineFunc VS (CppSrcCode Value)
f (SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf SrcState ValueState Variable
v)
  discardFileLine :: VS (CppSrcCode Value) -> SrcState MethodState Statement
discardFileLine VS (CppSrcCode Value)
f = SrcState MethodState Statement -> SrcState MethodState Statement
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState Statement -> SrcState MethodState Statement)
-> SrcState MethodState Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ Char -> VS (CppSrcCode Value) -> SrcState MethodState Statement
cppDiscardInput Char
'\n' VS (CppSrcCode Value)
f
  getFileInputAll :: VS (CppSrcCode Value)
-> SrcState ValueState Variable -> SrcState MethodState Statement
getFileInputAll VS (CppSrcCode Value)
f SrcState ValueState Variable
v = do
    v' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
v
    scpData <- getVarScope $ variableName v'
    let scp = ScopeData -> CppSrcCode ScopeData
forall {k} (r :: k -> *) (scope :: k).
ScopeSym r scope =>
ScopeData -> r scope
convScope ScopeData
scpData
        l_line = String
"nextLine"
        var_line = String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
var String
l_line State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
string
        v_line = SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf SrcState ValueState Variable
var_line
    multi [varDec var_line scp,
      while (getLineFunc f v_line)
        (oneLiner $ listAppend (valueOf v) v_line)]

instance StringStatement CppSrcCode Statement Variable Value where
  stringSplit :: Char
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
stringSplit Char
d SrcState ValueState Variable
vnew VS (CppSrcCode Value)
s = do
    vn <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
vnew
    scpData <- getVarScope $ variableName vn
    let scp = ScopeData -> CppSrcCode ScopeData
forall {k} (r :: k -> *) (scope :: k).
ScopeSym r scope =>
ScopeData -> r scope
convScope ScopeData
scpData
        l_ss = String
"ss"
        var_ss = String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
var String
l_ss (String -> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
OOTypeSym r typ =>
String -> VS (r typ)
obj String
stringstream)
        v_ss = SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf SrcState ValueState Variable
var_ss
        l_word = String
"word"
        var_word = String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
var String
l_word State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
string
        v_word = SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf SrcState ValueState Variable
var_word
    modify (addLangImport sstream) >> multi [
        valStmt $ valueOf vnew $. clearFunc,
        varDec var_ss scp,
        valStmt $ strFunc v_ss s,
        varDec var_word scp,
        while (getLine3ArgFunc v_ss v_word d)
          (oneLiner $ listAppend (valueOf vnew) v_word)
      ]

  stringListVals :: [SrcState ValueState Variable]
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
stringListVals = [SrcState ValueState Variable]
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k)
       (typ :: k).
(MultiStatement r stmt, AssignStatement r stmt var val, List r val,
 ValueSym r val typ, Literal r val typ, RenderValue r var val typ,
 TypeElim r typ, VariableElim r var typ) =>
[VS (r var)] -> VS (r val) -> MS (r stmt)
M.stringListVals
  stringListLists :: [SrcState ValueState Variable]
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
stringListLists = [SrcState ValueState Variable]
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (block :: k) (stmt :: k)
       (var :: k) (val :: k) (typ :: k).
(BodySym r bod block, BlockSym r block stmt,
 ControlStatement r bod stmt var val, TypeSym r typ,
 ValueSym r val typ, Literal r val typ, NumericExpression r val,
 VariableSym r var typ, VariableValue r var val, List r val,
 ListStatement r stmt val, TypeElim r typ, VariableElim r var typ,
 RenderValue r var val typ) =>
[VS (r var)] -> VS (r val) -> MS (r stmt)
M.stringListLists

instance FuncAppStatement CppSrcCode Statement Variable Value where
  inOutCall :: InOutCall CppSrcCode Statement Variable Value
inOutCall = (String
 -> State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> VS (CppSrcCode Value))
-> InOutCall CppSrcCode Statement Variable Value
cppInOutCall String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
PosCall r val typ
funcApp
  extInOutCall :: String -> InOutCall CppSrcCode Statement Variable Value
extInOutCall String
m = (String
 -> State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> VS (CppSrcCode Value))
-> InOutCall CppSrcCode Statement Variable Value
cppInOutCall (String
-> String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
String -> PosCall r val typ
extFuncApp String
m)

instance OOFuncAppStatement CppSrcCode Statement Variable Value where
  selfInOutCall :: InOutCall CppSrcCode Statement Variable Value
selfInOutCall = (String
 -> State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> VS (CppSrcCode Value))
-> InOutCall CppSrcCode Statement Variable Value
cppInOutCall String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(InternalValueExp r var val typ, VariableValue r var val,
 SelfSym r var) =>
PosCall r val typ
selfMethodCall

instance CommentStatement CppSrcCode Statement where
  comment :: String -> SrcState MethodState Statement
comment = Doc -> String -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
Doc -> String -> MS (r stmt)
G.comment Doc
commentStart

instance ControlStatement CppSrcCode Body Statement Variable Value where
  break :: SrcState MethodState Statement
break = Doc -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
Doc -> MS (r stmt)
mkStmt Doc
R.break
  continue :: SrcState MethodState Statement
continue = Doc -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
Doc -> MS (r stmt)
mkStmt Doc
R.continue

  returnStmt :: VS (CppSrcCode Value) -> SrcState MethodState Statement
returnStmt = Terminator
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
(RenderStatement r stmt, ValueElim r val) =>
Terminator -> VS (r val) -> MS (r stmt)
G.returnStmt Terminator
Semi

  throw :: String -> SrcState MethodState Statement
throw = (CppSrcCode Value -> Doc)
-> Terminator -> String -> SrcState MethodState Statement
forall {k} (r :: k -> *) (val :: k) (typ :: k) (stmt :: k).
(Literal r val typ, RenderStatement r stmt) =>
(r val -> Doc) -> Terminator -> String -> MS (r stmt)
G.throw CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
cppThrowDoc Terminator
Semi

  ifCond :: [(VS (CppSrcCode Value), SrcState MethodState Doc)]
-> SrcState MethodState Doc -> SrcState MethodState Statement
ifCond = (Doc -> Doc)
-> Doc
-> OptionalSpace
-> Doc
-> Doc
-> Doc
-> [(VS (CppSrcCode Value), SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (val :: k).
(BodyElim r bod, RenderStatement r stmt, ValueElim r val) =>
(Doc -> Doc)
-> Doc
-> OptionalSpace
-> Doc
-> Doc
-> Doc
-> [(VS (r val), MS (r bod))]
-> MS (r bod)
-> MS (r stmt)
G.ifCond Doc -> Doc
parens Doc
bodyStart OptionalSpace
G.defaultOptSpace Doc
elseIfLabel Doc
bodyEnd Doc
empty
  switch :: VS (CppSrcCode Value)
-> [(VS (CppSrcCode Value), SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState Statement
switch = (Doc -> Doc)
-> SrcState MethodState Statement
-> VS (CppSrcCode Value)
-> [(VS (CppSrcCode Value), SrcState MethodState Doc)]
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (val :: k).
(BodyElim r bod, RenderStatement r stmt, StatementElim r stmt,
 ValueElim r val) =>
(Doc -> Doc)
-> MS (r stmt)
-> VS (r val)
-> [(VS (r val), MS (r bod))]
-> MS (r bod)
-> MS (r stmt)
C.switch Doc -> Doc
parens SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
MS (r stmt)
break

  ifExists :: VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState Statement
ifExists VS (CppSrcCode Value)
_ SrcState MethodState Doc
ifBody SrcState MethodState Doc
_ = do
    ifb <- SrcState MethodState Doc
ifBody
    mkStmtNoEnd (RC.body ifb) -- All variables are initialized in C++

  for :: SrcState MethodState Statement
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
-> SrcState MethodState Doc
-> SrcState MethodState Statement
for = Doc
-> Doc
-> SrcState MethodState Statement
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (val :: k).
(BodyElim r bod, RenderStatement r stmt, StatementElim r stmt,
 ValueElim r val) =>
Doc
-> Doc
-> MS (r stmt)
-> VS (r val)
-> MS (r stmt)
-> MS (r bod)
-> MS (r stmt)
C.for Doc
bodyStart Doc
bodyEnd
  forRange :: SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forRange = SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (scope :: k) (bod :: k) (stmt :: k)
       (var :: k) (val :: k).
(ScopeSym r scope, DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, Comparison r val,
 VariableValue r var val) =>
VS (r var)
-> VS (r val)
-> VS (r val)
-> VS (r val)
-> MS (r bod)
-> MS (r stmt)
M.forRange
  forEach :: SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forEach = Doc
-> Doc
-> Doc
-> Doc
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
cppForEach Doc
bodyStart Doc
bodyEnd (String -> Doc
text String
cppFor) (String -> Doc
text String
cppIn)
  while :: VS (CppSrcCode Value)
-> SrcState MethodState Doc -> SrcState MethodState Statement
while = (Doc -> Doc)
-> Doc
-> Doc
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (val :: k).
(BodyElim r bod, RenderStatement r stmt, ValueElim r val) =>
(Doc -> Doc)
-> Doc -> Doc -> VS (r val) -> MS (r bod) -> MS (r stmt)
C.while Doc -> Doc
parens Doc
bodyStart Doc
bodyEnd

  tryCatch :: SrcState MethodState Doc
-> SrcState MethodState Doc -> SrcState MethodState Statement
tryCatch = (CppSrcCode Doc -> CppSrcCode Doc -> Doc)
-> SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (bod :: k).
RenderStatement r stmt =>
(r bod -> r bod -> Doc) -> MS (r bod) -> MS (r bod) -> MS (r stmt)
G.tryCatch CppSrcCode Doc -> CppSrcCode Doc -> Doc
forall {k} (r :: k -> *) (bod :: k).
BodyElim r bod =>
r bod -> r bod -> Doc
cppTryCatch

  assert :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
assert VS (CppSrcCode Value)
condition VS (CppSrcCode Value)
errorMessage = do
    SrcState MethodState Statement -> SrcState MethodState Statement
forall a. MS a -> MS a
addCAssertImport (SrcState MethodState Statement -> SrcState MethodState Statement)
-> SrcState MethodState Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ do
      cond <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> VS (CppSrcCode Value)
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS VS (CppSrcCode Value)
condition
      errMsg <- zoom lensMStoVS errorMessage
      mkStmtNoEnd (cppAssert cond errMsg)

instance ObserverPattern CppSrcCode Statement TypeData where
  notifyObservers :: SrcState ValueState FuncData
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState Statement
notifyObservers = SrcState ValueState FuncData
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState Statement
forall (r :: * -> *) bod block stmt typ val var scope.
(BodySym r bod block, BlockSym r block stmt, TypeSym r typ,
 Literal r val typ, VariableSym r var typ, VariableValue r var val,
 Comparison r val, List r val, ValueStatement r stmt val,
 ScopeSym r scope, DeclStatement r bod stmt var scope val,
 AssignStatement r stmt var val,
 ControlStatement r bod stmt var val, OOFunctionSym r val typ) =>
VS (r FuncData) -> VS (r typ) -> MS (r stmt)
M.notifyObservers

instance StrategyPattern CppSrcCode Body Block Variable Value where
  runStrategy :: String
-> [(String, SrcState MethodState Doc)]
-> Maybe (VS (CppSrcCode Value))
-> Maybe (SrcState ValueState Variable)
-> SrcState MethodState Doc
runStrategy = String
-> [(String, SrcState MethodState Doc)]
-> Maybe (VS (CppSrcCode Value))
-> Maybe (SrcState ValueState Variable)
-> SrcState MethodState Doc
forall (r :: * -> *) stmt var val bod.
(EmptyStatement r stmt, AssignStatement r stmt var val,
 BodyElim r bod, Monad r, RenderStatement r stmt,
 StatementElim r stmt) =>
String
-> [(String, MS (r bod))]
-> Maybe (VS (r val))
-> Maybe (VS (r var))
-> MS (r Doc)
M.runStrategy

instance VisibilitySym CppSrcCode (Doc, VisibilityTag) where
  private :: CppSrcCode (Doc, VisibilityTag)
private = (Doc, VisibilityTag) -> CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.private, VisibilityTag
Priv)
  public :: CppSrcCode (Doc, VisibilityTag)
public = (Doc, VisibilityTag) -> CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.public, VisibilityTag
Pub)

instance RenderVisibility CppSrcCode (Doc, VisibilityTag) where
  visibilityFromData :: VisibilityTag -> Doc -> CppSrcCode (Doc, VisibilityTag)
visibilityFromData VisibilityTag
s Doc
d = (Doc, VisibilityTag) -> CppSrcCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, VisibilityTag
s)

instance VisibilityElim CppSrcCode (Doc, VisibilityTag) where
  visibility :: CppSrcCode (Doc, VisibilityTag) -> Doc
visibility = (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst ((Doc, VisibilityTag) -> Doc)
-> (CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag))
-> CppSrcCode (Doc, VisibilityTag)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppSrcCode a -> a
unCPPSC

instance MethodTypeSym CppSrcCode TypeData where
  mType :: State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
mType = LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode TypeData))
  MethodState
  ValueState
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode TypeData))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS

instance OOMethodTypeSym CppSrcCode TypeData where
  construct :: String -> SrcState MethodState TypeData
construct = String -> SrcState MethodState TypeData
forall (r :: * -> *). Monad r => String -> MS (r TypeData)
G.construct

instance ParameterSym CppSrcCode ParamData Variable where
  param :: SrcState ValueState Variable -> SrcState MethodState ParamData
param = (CppSrcCode Variable -> Doc)
-> SrcState ValueState Variable -> SrcState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(RenderParam r param var, VariableElim r var typ) =>
(r var -> Doc) -> VS (r var) -> MS (r param)
G.param CppSrcCode Variable -> Doc
forall (r :: * -> *) var.
(InternalVarElim r var, UnRepr r TypeData,
 VariableElim r var TypeData) =>
r var -> Doc
renderParam
  pointerParam :: SrcState ValueState Variable -> SrcState MethodState ParamData
pointerParam = (CppSrcCode Variable -> Doc)
-> SrcState ValueState Variable -> SrcState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(RenderParam r param var, VariableElim r var typ) =>
(r var -> Doc) -> VS (r var) -> MS (r param)
G.param CppSrcCode Variable -> Doc
forall (r :: * -> *) var.
(InternalVarElim r var, UnRepr r TypeData,
 VariableElim r var TypeData) =>
r var -> Doc
cppPointerParamDoc

instance RenderParam CppSrcCode ParamData Variable where
  paramFromData :: SrcState ValueState Variable
-> Doc -> SrcState MethodState ParamData
paramFromData SrcState ValueState Variable
v' Doc
d = do
    v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
v'
    toState $ on2CodeValues pd v (toCode d)

instance ParamElim CppSrcCode ParamData TypeData where
  parameterName :: CppSrcCode ParamData -> String
parameterName = CppSrcCode Variable -> String
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> String
variableName (CppSrcCode Variable -> String)
-> (CppSrcCode ParamData -> CppSrcCode Variable)
-> CppSrcCode ParamData
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> Variable)
-> CppSrcCode ParamData -> CppSrcCode Variable
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ParamData -> Variable
paramVar
  parameterType :: CppSrcCode ParamData -> CppSrcCode TypeData
parameterType = CppSrcCode Variable -> CppSrcCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType (CppSrcCode Variable -> CppSrcCode TypeData)
-> (CppSrcCode ParamData -> CppSrcCode Variable)
-> CppSrcCode ParamData
-> CppSrcCode TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> Variable)
-> CppSrcCode ParamData -> CppSrcCode Variable
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ParamData -> Variable
paramVar
  parameter :: CppSrcCode ParamData -> Doc
parameter = ParamData -> Doc
paramDoc (ParamData -> Doc)
-> (CppSrcCode ParamData -> ParamData)
-> CppSrcCode ParamData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode ParamData -> ParamData
forall a. CppSrcCode a -> a
unCPPSC

instance MethodSym CppSrcCode MethodData (Doc, VisibilityTag) ParamData Body Variable TypeData where
  docMain :: SrcState MethodState Doc -> SrcState MethodState MethodData
docMain SrcState MethodState Doc
b = SrcState MethodState Doc
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *) mthd.
RenderMethod r mthd =>
MS (r Doc) -> MS (r mthd) -> MS (r mthd)
commentedFunc (State MethodState [String] -> SrcState MethodState Doc
forall a. State a [String] -> State a (CppSrcCode Doc)
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [String] -> State a (r Doc)
docComment (State MethodState [String] -> SrcState MethodState Doc)
-> State MethodState [String] -> SrcState MethodState Doc
forall a b. (a -> b) -> a -> b
$ [String] -> State MethodState [String]
forall a s. a -> State s a
toState ([String] -> State MethodState [String])
-> [String] -> State MethodState [String]
forall a b. (a -> b) -> a -> b
$ FuncDocRenderer
functionDox String
mainDesc
    [(String
argc, String
argcDesc), (String
argv, String
argvDesc)] [String
mainReturnDesc]) (SrcState MethodState Doc -> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
MS (r bod) -> MS (r mthd)
mainFunction SrcState MethodState Doc
b)
  function :: String
-> CppSrcCode (Doc, VisibilityTag)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
function = String
-> CppSrcCode (Doc, VisibilityTag)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (attch :: k) (typ :: k) (mthd :: k)
       (vis :: k) (param :: k) (bod :: k).
(AttachmentSym r attch, MethodTypeSym r typ,
 OORenderMethod r mthd attch vis param bod typ) =>
String
-> r vis
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
G.function
  mainFunction :: SrcState MethodState Doc -> SrcState MethodState MethodData
mainFunction SrcState MethodState Doc
b = Bool
-> String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (typ :: k).
OORenderMethod r mthd attch vis param bod typ =>
Bool
-> String
-> r vis
-> r attch
-> MS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
intFunc Bool
True String
mainFunc CppSrcCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public CppSrcCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
classLevel (State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
forall {k} (r :: k -> *) (typ :: k).
MethodTypeSym r typ =>
VS (r typ) -> MS (r typ)
mType State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
int)
    [SrcState ValueState Variable -> SrcState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
param SrcState ValueState Variable
argcVar, SrcState ValueState Variable -> SrcState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
param SrcState ValueState Variable
argvVar]
    ((CppSrcCode Doc -> CppSrcCode Statement -> CppSrcCode Doc)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
-> SrcState MethodState Doc
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((Doc -> Statement -> Doc)
-> CppSrcCode Doc -> CppSrcCode Statement -> CppSrcCode Doc
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Doc -> Statement -> Doc
appendToBody) SrcState MethodState Doc
b (VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r stmt)
returnStmt (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ Integer -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Integer -> VS (r val)
litInt Integer
0))
    where argcVar :: SrcState ValueState Variable
argcVar = String
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableSym r var typ =>
String -> VS (r typ) -> VS (r var)
var String
argc State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
int
          argvVar :: SrcState ValueState Variable
argvVar = do
            t <- CodeType -> String -> Doc -> State ValueState (CppSrcCode TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> String -> Doc -> VS (r TypeData)
typeFromData (CodeType -> CodeType
List CodeType
String)
              (String
constDec String -> String -> String
forall a. Semigroup a => a -> a -> a
P.<> String
" " String -> String -> String
forall a. Semigroup a => a -> a -> a
P.<> String
C.charRender) (Doc
constDec' Doc -> Doc -> Doc
<+> String -> Doc
text
              String
C.charRender)
            mkVar argv t (cppDeref <> text argv <> array')
  docFunc :: String
-> [String]
-> Maybe String
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
docFunc = String
-> [String]
-> Maybe String
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *) mthd.
(BlockCommentSym r, RenderMethod r mthd) =>
String -> [String] -> Maybe String -> MS (r mthd) -> MS (r mthd)
CP.doxFunc

  inOutFunc :: String
-> CppSrcCode (Doc, VisibilityTag)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
inOutFunc String
n CppSrcCode (Doc, VisibilityTag)
s = (State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall mthd.
(State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> MS (CppSrcCode mthd))
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
cppsInOut (String
-> CppSrcCode (Doc, VisibilityTag)
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String
-> r vis
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
function String
n CppSrcCode (Doc, VisibilityTag)
s)
  docInOutFunc :: String
-> CppSrcCode (Doc, VisibilityTag)
-> DocInOutFunc CppSrcCode MethodData Doc Variable
docInOutFunc String
n CppSrcCode (Doc, VisibilityTag)
s = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> DocInOutFunc CppSrcCode MethodData Doc Variable
forall (r :: * -> *) mthd var bod.
(BlockCommentSym r, RenderMethod r mthd) =>
([VS (r var)]
 -> [VS (r var)] -> [VS (r var)] -> MS (r bod) -> MS (r mthd))
-> String
-> [(String, VS (r var))]
-> [(String, VS (r var))]
-> [(String, VS (r var))]
-> MS (r bod)
-> MS (r mthd)
CP.docInOutFunc (String
-> CppSrcCode (Doc, VisibilityTag)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String -> r vis -> InOutFunc r mthd bod var
inOutFunc String
n CppSrcCode (Doc, VisibilityTag)
s)

instance OOMethodSym CppSrcCode MethodData AttachmentData (Doc, VisibilityTag) ParamData Body Variable Value TypeData where
  method :: String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
method = String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (typ :: k) (mthd :: k) (attch :: k)
       (vis :: k) (param :: k) (bod :: k).
(MethodTypeSym r typ,
 OORenderMethod r mthd attch vis param bod typ) =>
String
-> r vis
-> r attch
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
G.method
  getMethod :: SrcState ValueState Variable -> SrcState MethodState MethodData
getMethod = SrcState ValueState Variable -> SrcState MethodState MethodData
forall (r :: * -> *) file mod cls stvr mthd attch vis param bod
       block stmt var scope val binder typ.
OORenderSym
  r
  file
  mod
  cls
  stvr
  mthd
  attch
  vis
  param
  bod
  block
  stmt
  var
  scope
  val
  binder
  typ =>
VS (r var) -> MS (r mthd)
G.getMethod
  setMethod :: SrcState ValueState Variable -> SrcState MethodState MethodData
setMethod = SrcState ValueState Variable -> SrcState MethodState MethodData
forall (r :: * -> *) file mod cls stvr mthd attch vis param bod
       block stmt var scope val binder typ.
OORenderSym
  r
  file
  mod
  cls
  stvr
  mthd
  attch
  vis
  param
  bod
  block
  stmt
  var
  scope
  val
  binder
  typ =>
VS (r var) -> MS (r mthd)
G.setMethod
  constructor :: [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
constructor = [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppConstructor

  inOutMethod :: String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
inOutMethod String
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p = (State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall mthd.
(State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> MS (CppSrcCode mthd))
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
cppsInOut (String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String
-> r vis
-> r attch
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
method String
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p)
  docInOutMethod :: String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> DocInOutFunc CppSrcCode MethodData Doc Variable
docInOutMethod String
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p = ([SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> [SrcState ValueState Variable]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> DocInOutFunc CppSrcCode MethodData Doc Variable
forall (r :: * -> *) mthd var bod.
(BlockCommentSym r, RenderMethod r mthd) =>
([VS (r var)]
 -> [VS (r var)] -> [VS (r var)] -> MS (r bod) -> MS (r mthd))
-> String
-> [(String, VS (r var))]
-> [(String, VS (r var))]
-> [(String, VS (r var))]
-> MS (r bod)
-> MS (r mthd)
CP.docInOutFunc (String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String -> r vis -> r attch -> InOutFunc r mthd bod var
inOutMethod String
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p)

instance RenderMethod CppSrcCode MethodData where
  commentedFunc :: SrcState MethodState Doc
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
commentedFunc = FileType
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *).
(BlockCommentElim r, Monad r) =>
FileType -> MS (r Doc) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc FileType
Source

  mthdFromData :: VisibilityTag -> Doc -> SrcState MethodState MethodData
mthdFromData VisibilityTag
s Doc
d = CppSrcCode MethodData -> SrcState MethodState MethodData
forall a s. a -> State s a
toState (CppSrcCode MethodData -> SrcState MethodState MethodData)
-> CppSrcCode MethodData -> SrcState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ MethodData -> CppSrcCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppSrcCode MethodData)
-> MethodData -> CppSrcCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
s Doc
d

instance OORenderMethod CppSrcCode MethodData AttachmentData (Doc, VisibilityTag) ParamData Body TypeData where
  intMethod :: Bool
-> String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
intMethod Bool
m String
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
_ SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (if Bool
m then MethodState -> MethodState
setCurrMain else MethodState -> MethodState
forall a. a -> a
id)
    c <- StateT MethodState Identity String
getClassName
    cppsIntFunc (cppsMethod [] n c) s t ps b
  intFunc :: Bool
-> String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
intFunc Bool
m String
n CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
_ SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (if Bool
m then Bool -> MethodState -> MethodState
setCurrMainFunc Bool
m (MethodState -> MethodState)
-> (MethodState -> MethodState) -> MethodState -> MethodState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MethodState -> MethodState
setCurrMain else MethodState -> MethodState
forall a. a -> a
id)
    (CppSrcCode TypeData
 -> [CppSrcCode ParamData] -> CppSrcCode Doc -> Doc)
-> CppSrcCode (Doc, VisibilityTag)
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppsIntFunc (String
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsFunction String
n) CppSrcCode (Doc, VisibilityTag)
s SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b
  destructor :: forall stvr.
[CSStateVar CppSrcCode stvr] -> SrcState MethodState MethodData
destructor = String
-> [CSStateVar CppSrcCode stvr] -> SrcState MethodState MethodData
forall a. HasCallStack => String -> a
error (String
 -> [CSStateVar CppSrcCode stvr] -> SrcState MethodState MethodData)
-> String
-> [CSStateVar CppSrcCode stvr]
-> SrcState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ String -> String
CP.destructorError String
cppName

instance MethodElim CppSrcCode MethodData where
  method :: CppSrcCode MethodData -> Doc
method = MethodData -> Doc
mthdDoc (MethodData -> Doc)
-> (CppSrcCode MethodData -> MethodData)
-> CppSrcCode MethodData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode MethodData -> MethodData
forall a. CppSrcCode a -> a
unCPPSC

instance StateVarSym CppSrcCode StateVarData AttachmentData (Doc, VisibilityTag) Variable Value where
  stateVar :: CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> SrcState ClassState StateVarData
stateVar CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
_ SrcState ValueState Variable
_ = CppSrcCode StateVarData -> SrcState ClassState StateVarData
forall a. a -> StateT ClassState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CppSrcCode StateVarData -> SrcState ClassState StateVarData)
-> CppSrcCode StateVarData -> SrcState ClassState StateVarData
forall a b. (a -> b) -> a -> b
$ StateVarData -> CppSrcCode StateVarData
forall a. a -> CppSrcCode a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (StateVarData -> CppSrcCode StateVarData)
-> StateVarData -> CppSrcCode StateVarData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> StateVarData
svd ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd (CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppSrcCode a -> a
unCPPSC CppSrcCode (Doc, VisibilityTag)
s)) Doc
empty
  stateVarDef :: CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ClassState StateVarData
stateVarDef = Doc
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ClassState StateVarData
cppsStateVarDef Doc
empty
  constVar :: CppSrcCode (Doc, VisibilityTag)
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ClassState StateVarData
constVar CppSrcCode (Doc, VisibilityTag)
s = Doc
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ClassState StateVarData
cppsStateVarDef Doc
constDec' CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
classLevel

instance StateVarElim CppSrcCode StateVarData where
  stateVar :: CppSrcCode StateVarData -> Doc
stateVar = StateVarData -> Doc
stVar (StateVarData -> Doc)
-> (CppSrcCode StateVarData -> StateVarData)
-> CppSrcCode StateVarData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode StateVarData -> StateVarData
forall a. CppSrcCode a -> a
unCPPSC

instance ClassSym CppSrcCode Class StateVarData MethodData where
  buildClass :: Maybe String
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
buildClass = Maybe String
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
(RenderClass r cls stvr mthd vis, VisibilitySym r vis) =>
Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
G.buildClass
  extraClass :: String
-> Maybe String
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
extraClass = String
-> Maybe String
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
(RenderClass r cls stvr mthd vis, VisibilitySym r vis) =>
String
-> Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
CP.extraClass
  implementingClass :: String
-> [String]
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
implementingClass = String
-> [String]
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
(RenderClass r cls stvr mthd vis, VisibilitySym r vis) =>
String
-> [String]
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
G.implementingClass

  docClass :: String -> SrcState ClassState Doc -> SrcState ClassState Doc
docClass = String -> SrcState ClassState Doc -> SrcState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
(BlockCommentSym r, RenderClass r cls stvr mthd vis) =>
String -> CS (r cls) -> CS (r cls)
CP.doxClass

instance RenderClass CppSrcCode Class StateVarData MethodData (Doc, VisibilityTag) where
  intClass :: String
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode Doc
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> SrcState ClassState Doc
intClass String
n CppSrcCode (Doc, VisibilityTag)
_ CppSrcCode Doc
_ [SrcState ClassState StateVarData]
vs [SrcState MethodState MethodData]
cs [SrcState MethodState MethodData]
fs = do
    (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ClassState -> ClassState
setClassName String
n)
    ([CppSrcCode StateVarData]
 -> [CppSrcCode MethodData] -> CppSrcCode Doc)
-> [SrcState ClassState StateVarData]
-> [State ClassState (CppSrcCode MethodData)]
-> SrcState ClassState Doc
forall a b c s.
([a] -> [b] -> c) -> [State s a] -> [State s b] -> State s c
on2StateLists [CppSrcCode StateVarData]
-> [CppSrcCode MethodData] -> CppSrcCode Doc
cppsClass [SrcState ClassState StateVarData]
vs (LensLike'
  (Zoomed (StateT MethodState Identity) (CppSrcCode MethodData))
  ClassState
  MethodState
-> SrcState MethodState MethodData
-> State ClassState (CppSrcCode MethodData)
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) (CppSrcCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing Identity (CppSrcCode MethodData) MethodState)
-> ClassState
-> Focusing Identity (CppSrcCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS (SrcState MethodState MethodData
 -> State ClassState (CppSrcCode MethodData))
-> [SrcState MethodState MethodData]
-> [State ClassState (CppSrcCode MethodData)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [SrcState MethodState MethodData]
cs [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
forall a. Semigroup a => a -> a -> a
P.<> [SrcState MethodState MethodData]
fs)

  inherit :: Maybe String -> CppSrcCode Doc
inherit Maybe String
n = ((Doc, VisibilityTag) -> Doc)
-> CppSrcCode (Doc, VisibilityTag) -> CppSrcCode Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (Maybe String -> Doc -> Doc
cppInherit Maybe String
n (Doc -> Doc)
-> ((Doc, VisibilityTag) -> Doc) -> (Doc, VisibilityTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst) CppSrcCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public
  implements :: [String] -> CppSrcCode Doc
implements [String]
is = ((Doc, VisibilityTag) -> Doc)
-> CppSrcCode (Doc, VisibilityTag) -> CppSrcCode Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ((\Doc
p -> Doc
colon Doc -> Doc -> Doc
<+> [Doc] -> Doc
hcat ((Doc
p Doc -> Doc -> Doc
<+>) (Doc -> Doc) -> (String -> Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc
text (String -> Doc) -> [String] -> [Doc]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
is))
    (Doc -> Doc)
-> ((Doc, VisibilityTag) -> Doc) -> (Doc, VisibilityTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst) CppSrcCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public

  commentedClass :: SrcState ClassState Doc
-> SrcState ClassState Doc -> SrcState ClassState Doc
commentedClass SrcState ClassState Doc
_ SrcState ClassState Doc
cs = SrcState ClassState Doc
cs

instance ClassElim CppSrcCode Class where
  class' :: CppSrcCode Doc -> Doc
class' = CppSrcCode Doc -> Doc
forall a. CppSrcCode a -> a
unCPPSC

instance ModuleSym CppSrcCode ModData Class MethodData where
  buildModule :: String
-> [String]
-> [SrcState MethodState MethodData]
-> [SrcState ClassState Doc]
-> SrcState FileState ModData
buildModule String
n [String]
is [SrcState MethodState MethodData]
ms [SrcState ClassState Doc]
cs = String
-> FS Doc
-> FS Doc
-> FS Doc
-> [SrcState MethodState MethodData]
-> [SrcState ClassState Doc]
-> SrcState FileState ModData
forall {k} (r :: k -> *) (cls :: k) (mthd :: k) (mod :: k).
(ClassElim r cls, MethodElim r mthd, RenderMod r mod) =>
String
-> FS Doc
-> FS Doc
-> FS Doc
-> [MS (r mthd)]
-> [CS (r cls)]
-> FS (r mod)
CP.buildModule String
n (do
    ds <- FS [String]
getDefines
    lis <- getLangImports
    libis <- getLibImports
    mis <- getModuleImports
    us <- getUsing
    mn <- getCurrMain
    pure $ vibcat [
      if mn && length ms + length cs == 1 then empty else RC.import' $ mi n,
      vcat ((define <+>) . text <$> ds),
      vcat (RC.import' . li <$> lis),
      vcat (RC.import' . mi <$> (sort (is P.<> libis) P.<> mis)),
      vcat (usingNameSpace std . Just <$> us)])
    (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty) (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty) [SrcState MethodState MethodData]
ms [SrcState ClassState Doc]
cs
    where mi, li :: Label -> CppSrcCode Doc
          mi :: String -> CppSrcCode Doc
mi = String -> CppSrcCode Doc
forall (r :: * -> *). ImportSym r => String -> r Doc
modImport
          li :: String -> CppSrcCode Doc
li = String -> CppSrcCode Doc
forall (r :: * -> *). ImportSym r => String -> r Doc
langImport

instance RenderMod CppSrcCode ModData where
  modFromData :: String -> FS Doc -> SrcState FileState ModData
modFromData String
n = String
-> (Doc -> CppSrcCode ModData)
-> FS Doc
-> SrcState FileState ModData
forall {k} (r :: k -> *) (mod :: k).
String -> (Doc -> r mod) -> FS Doc -> FS (r mod)
G.modFromData String
n (ModData -> CppSrcCode ModData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (ModData -> CppSrcCode ModData)
-> (Doc -> ModData) -> Doc -> CppSrcCode ModData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc -> ModData
md String
n)
  updateModuleDoc :: (Doc -> Doc) -> CppSrcCode ModData -> CppSrcCode ModData
updateModuleDoc Doc -> Doc
f = (ModData -> ModData) -> CppSrcCode ModData -> CppSrcCode ModData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ((Doc -> Doc) -> ModData -> ModData
updateMod Doc -> Doc
f)

instance ModuleElim CppSrcCode ModData where
  module' :: CppSrcCode ModData -> Doc
module' = ModData -> Doc
modDoc (ModData -> Doc)
-> (CppSrcCode ModData -> ModData) -> CppSrcCode ModData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode ModData -> ModData
forall a. CppSrcCode a -> a
unCPPSC

instance BlockCommentSym CppSrcCode where
  blockComment :: [String] -> CppSrcCode Doc
blockComment [String]
lns = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ [String] -> Doc -> Doc -> Doc
R.blockCmt [String]
lns Doc
blockCmtStart Doc
blockCmtEnd
  docComment :: forall a. State a [String] -> State a (CppSrcCode Doc)
docComment = ([String] -> CppSrcCode Doc)
-> State a [String] -> State a (CppSrcCode Doc)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (\[String]
lns -> Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ [String] -> Doc -> Doc -> Doc
R.docCmt [String]
lns Doc
docCmtStart
    Doc
blockCmtEnd)

instance BlockCommentElim CppSrcCode where
  blockComment' :: CppSrcCode Doc -> Doc
blockComment' = CppSrcCode Doc -> Doc
forall a. CppSrcCode a -> a
unCPPSC

-----------------
-- Header File --
-----------------

newtype CppHdrCode a = CPPHC {forall a. CppHdrCode a -> a
unCPPHC :: a} deriving CppHdrCode a -> CppHdrCode a -> Bool
(CppHdrCode a -> CppHdrCode a -> Bool)
-> (CppHdrCode a -> CppHdrCode a -> Bool) -> Eq (CppHdrCode a)
forall a. Eq a => CppHdrCode a -> CppHdrCode a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall a. Eq a => CppHdrCode a -> CppHdrCode a -> Bool
== :: CppHdrCode a -> CppHdrCode a -> Bool
$c/= :: forall a. Eq a => CppHdrCode a -> CppHdrCode a -> Bool
/= :: CppHdrCode a -> CppHdrCode a -> Bool
Eq

instance Functor CppHdrCode where
  fmap :: forall a b. (a -> b) -> CppHdrCode a -> CppHdrCode b
fmap a -> b
f (CPPHC a
x) = b -> CppHdrCode b
forall a. a -> CppHdrCode a
CPPHC (a -> b
f a
x)

instance Applicative CppHdrCode where
  pure :: forall a. a -> CppHdrCode a
pure = a -> CppHdrCode a
forall a. a -> CppHdrCode a
CPPHC
  (CPPHC a -> b
f) <*> :: forall a b. CppHdrCode (a -> b) -> CppHdrCode a -> CppHdrCode b
<*> (CPPHC a
x) = b -> CppHdrCode b
forall a. a -> CppHdrCode a
CPPHC (a -> b
f a
x)

instance Monad CppHdrCode where
  CPPHC a
x >>= :: forall a b. CppHdrCode a -> (a -> CppHdrCode b) -> CppHdrCode b
>>= a -> CppHdrCode b
f = a -> CppHdrCode b
f a
x

instance CommonRenderSym CppHdrCode MethodData (Doc, VisibilityTag) ParamData Body Block Statement Variable ScopeData Value BinderD TypeData
instance OORenderSym CppHdrCode FileData ModData Class StateVarData MethodData AttachmentData (Doc, VisibilityTag) ParamData Body Block Statement Variable ScopeData Value BinderD TypeData

instance UnRepr CppHdrCode contents where
  unRepr :: CppHdrCode contents -> contents
unRepr = CppHdrCode contents -> contents
forall a. CppHdrCode a -> a
unCPPHC

instance FileSym CppHdrCode FileData ModData where
  fileDoc :: HdrState FileState ModData -> HdrState FileState FileData
fileDoc HdrState FileState ModData
m = do
    (FileState -> FileState) -> StateT FileState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (FileType -> FileState -> FileState
setFileType FileType
Header)
    String
-> (CppHdrCode ModData -> CppHdrCode Doc)
-> CppHdrCode Doc
-> HdrState FileState ModData
-> HdrState FileState FileData
forall (r :: * -> *) block mod file.
(BlockElim r block, RenderMod r mod, RenderFile r file mod) =>
String
-> (r mod -> r block) -> r block -> FS (r mod) -> FS (r file)
G.fileDoc String
cppHdrExt CppHdrCode ModData -> CppHdrCode Doc
forall (r :: * -> *) file mod.
RenderFile r file mod =>
r mod -> r Doc
top CppHdrCode Doc
forall (r :: * -> *) file mod. RenderFile r file mod => r Doc
bottom HdrState FileState ModData
m

  docMod :: String
-> String
-> [String]
-> String
-> HdrState FileState FileData
-> HdrState FileState FileData
docMod = String
-> String
-> String
-> [String]
-> String
-> HdrState FileState FileData
-> HdrState FileState FileData
forall (r :: * -> *) file mod.
(BlockCommentSym r, RenderFile r file mod) =>
String
-> String
-> String
-> [String]
-> String
-> FS (r file)
-> FS (r file)
CP.doxMod String
cppHdrExt

instance RenderFile CppHdrCode FileData ModData where
  top :: CppHdrCode ModData -> CppHdrCode Doc
top = (ModData -> Doc) -> CppHdrCode ModData -> CppHdrCode Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ModData -> Doc
cpphtop
  bottom :: CppHdrCode Doc
bottom = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
endif

  commentedMod :: HdrState FileState FileData
-> HdrState FileState Doc -> HdrState FileState FileData
commentedMod = (CppHdrCode FileData -> CppHdrCode Doc -> CppHdrCode FileData)
-> HdrState FileState FileData
-> HdrState FileState Doc
-> HdrState FileState FileData
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues (\CppHdrCode FileData
m CppHdrCode Doc
cmt -> if Doc -> Bool
isEmpty (CppHdrCode ModData -> Doc
forall {k} (r :: k -> *) (mod :: k).
ModuleElim r mod =>
r mod -> Doc
RC.module' (CppHdrCode ModData -> Doc) -> CppHdrCode ModData -> Doc
forall a b. (a -> b) -> a -> b
$
    (FileData -> ModData) -> CppHdrCode FileData -> CppHdrCode ModData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue FileData -> ModData
fileMod CppHdrCode FileData
m) then CppHdrCode FileData
m else (FileData -> Doc -> FileData)
-> CppHdrCode FileData -> CppHdrCode Doc -> CppHdrCode FileData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues FileData -> Doc -> FileData
R.commentedMod CppHdrCode FileData
m CppHdrCode Doc
cmt)

  fileFromData :: String -> HdrState FileState ModData -> HdrState FileState FileData
fileFromData = (String -> CppHdrCode ModData -> CppHdrCode FileData)
-> String
-> HdrState FileState ModData
-> HdrState FileState FileData
forall {k} (r :: k -> *) (mod :: k) (file :: k).
ModuleElim r mod =>
(String -> r mod -> r file) -> String -> FS (r mod) -> FS (r file)
G.fileFromData ((ModData -> FileData) -> CppHdrCode ModData -> CppHdrCode FileData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ((ModData -> FileData)
 -> CppHdrCode ModData -> CppHdrCode FileData)
-> (String -> ModData -> FileData)
-> String
-> CppHdrCode ModData
-> CppHdrCode FileData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ModData -> FileData
fileD)

instance ImportSym CppHdrCode where
  langImport :: String -> CppHdrCode Doc
langImport String
n = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> Doc -> Doc
angles (String -> Doc
text String
n)
  modImport :: String -> CppHdrCode Doc
modImport String
n = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> String -> Doc
doubleQuotedText (String -> String -> String
addExt String
cppHdrExt String
n)

instance AttachmentSym CppHdrCode AttachmentData where
  classLevel :: CppHdrCode AttachmentData
classLevel = AttachmentData -> CppHdrCode AttachmentData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (AttachmentData -> CppHdrCode AttachmentData)
-> AttachmentData -> CppHdrCode AttachmentData
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> AttachmentData
ad AttachmentTag
ClassLevel Doc
R.classLevel
  instanceLevel :: CppHdrCode AttachmentData
instanceLevel = AttachmentData -> CppHdrCode AttachmentData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (AttachmentData -> CppHdrCode AttachmentData)
-> AttachmentData -> CppHdrCode AttachmentData
forall a b. (a -> b) -> a -> b
$ AttachmentTag -> Doc -> AttachmentData
ad AttachmentTag
InstanceLevel Doc
R.instanceLevel

instance PermElim CppHdrCode AttachmentData where
  perm :: CppHdrCode AttachmentData -> Doc
perm = AttachmentData -> Doc
attachmentDoc (AttachmentData -> Doc)
-> (CppHdrCode AttachmentData -> AttachmentData)
-> CppHdrCode AttachmentData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode AttachmentData -> AttachmentData
forall a. CppHdrCode a -> a
unCPPHC
  binding :: CppHdrCode AttachmentData -> AttachmentTag
binding = AttachmentData -> AttachmentTag
attachment (AttachmentData -> AttachmentTag)
-> (CppHdrCode AttachmentData -> AttachmentData)
-> CppHdrCode AttachmentData
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode AttachmentData -> AttachmentData
forall a. CppHdrCode a -> a
unCPPHC

instance BodySym CppHdrCode Body Block where
  body :: [HdrState MethodState Doc] -> HdrState MethodState Doc
body [HdrState MethodState Doc]
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

  addComments :: String -> HdrState MethodState Doc -> HdrState MethodState Doc
addComments String
_ HdrState MethodState Doc
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance RenderBody CppHdrCode Body where
  multiBody :: [HdrState MethodState Doc] -> HdrState MethodState Doc
multiBody = [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *) bod.
(BodyElim r bod, Monad r) =>
[MS (r bod)] -> MS (r Doc)
G.multiBody

instance BodyElim CppHdrCode Body where
  body :: CppHdrCode Doc -> Doc
body = CppHdrCode Doc -> Doc
forall a. CppHdrCode a -> a
unCPPHC

instance BlockSym CppHdrCode Block Statement where
  block :: [HdrState MethodState Statement] -> HdrState MethodState Doc
block [HdrState MethodState Statement]
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance RenderBlock CppHdrCode Block where
  multiBlock :: [HdrState MethodState Doc] -> HdrState MethodState Doc
multiBlock = [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *) block.
(BlockElim r block, Monad r) =>
[MS (r block)] -> MS (r Doc)
G.multiBlock

instance BlockElim CppHdrCode Block where
  block :: CppHdrCode Doc -> Doc
block = CppHdrCode Doc -> Doc
forall a. CppHdrCode a -> a
unCPPHC

instance TypeSym CppHdrCode TypeData where
  bool :: State ValueState (CppHdrCode TypeData)
bool = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppBoolType
  int :: State ValueState (CppHdrCode TypeData)
int = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
CP.int
  float :: State ValueState (CppHdrCode TypeData)
float = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.float
  double :: State ValueState (CppHdrCode TypeData)
double = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.double
  char :: State ValueState (CppHdrCode TypeData)
char = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.char
  string :: State ValueState (CppHdrCode TypeData)
string = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addHeaderUsing String
cppString (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addHeaderLangImport String
cppString)
    State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
CP.string
  infile :: State ValueState (CppHdrCode TypeData)
infile = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addHeaderUsing String
cppInfile)
    State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppInfileType
  outfile :: State ValueState (CppHdrCode TypeData)
outfile = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addHeaderUsing String
cppOutfile)
    State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
cppOutfileType
  referenceType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
referenceType = State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r TypeData, UnRepr r TypeData) =>
VS (r TypeData) -> VS (r TypeData)
cppReferenceType
  listType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
listType State ValueState (CppHdrCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addHeaderUsing String
vector (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addHeaderLangImport String
vector)
    String
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r TypeData, UnRepr r TypeData) =>
String -> VS (r TypeData) -> VS (r TypeData)
C.listType String
vector State ValueState (CppHdrCode TypeData)
t
  setType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
setType State ValueState (CppHdrCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addHeaderUsing String
cppSet (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addHeaderLangImport String
cppSet)
    String
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r TypeData, UnRepr r TypeData) =>
String -> VS (r TypeData) -> VS (r TypeData)
C.setType String
cppSet State ValueState (CppHdrCode TypeData)
t
  arrayType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
arrayType = State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
listType
  innerType :: State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
innerType = State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
(TypeElim r typ, TypeSym r typ, OOTypeSym r typ) =>
VS (r typ) -> VS (r typ)
CG.innerType
  funcType :: [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
funcType = [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
(Monad r, TypeElim r TypeData) =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
CS.funcType
  void :: State ValueState (CppHdrCode TypeData)
void = State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
C.void

instance TypeElim CppHdrCode TypeData where
  getCodeType :: CppHdrCode TypeData -> CodeType
getCodeType = TypeData -> CodeType
cType (TypeData -> CodeType)
-> (CppHdrCode TypeData -> TypeData)
-> CppHdrCode TypeData
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode TypeData -> TypeData
forall a. CppHdrCode a -> a
unCPPHC

instance OOTypeSym CppHdrCode TypeData where
  obj :: String -> State ValueState (CppHdrCode TypeData)
obj String
n = VS (Map String String)
getClassMap VS (Map String String)
-> (Map String String -> State ValueState (CppHdrCode TypeData))
-> State ValueState (CppHdrCode TypeData)
forall a b.
StateT ValueState Identity a
-> (a -> StateT ValueState Identity b)
-> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\Map String String
cm -> (State ValueState (CppHdrCode TypeData)
 -> State ValueState (CppHdrCode TypeData))
-> (String
    -> State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> Maybe String
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall b a. b -> (a -> b) -> Maybe a -> b
maybe State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall a. a -> a
id (StateT ValueState Identity ()
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall a b.
StateT ValueState Identity a
-> StateT ValueState Identity b -> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (StateT ValueState Identity ()
 -> State ValueState (CppHdrCode TypeData)
 -> State ValueState (CppHdrCode TypeData))
-> (String -> StateT ValueState Identity ())
-> String
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify ((ValueState -> ValueState) -> StateT ValueState Identity ())
-> (String -> ValueState -> ValueState)
-> String
-> StateT ValueState Identity ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addHeaderModImport)
    (String -> Map String String -> Maybe String
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup String
n Map String String
cm) (State ValueState (CppHdrCode TypeData)
 -> State ValueState (CppHdrCode TypeData))
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall a b. (a -> b) -> a -> b
$ String -> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => String -> VS (r TypeData)
G.obj String
n)

instance RenderType CppHdrCode TypeData where
  multiType :: [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
multiType [State ValueState (CppHdrCode TypeData)]
_ = String -> State ValueState (CppHdrCode TypeData)
forall a. HasCallStack => String -> a
error (String -> State ValueState (CppHdrCode TypeData))
-> String -> State ValueState (CppHdrCode TypeData)
forall a b. (a -> b) -> a -> b
$ String -> String
C.multiTypeError String
cppName

instance UnaryOpSym CppHdrCode where
  notOp :: State ValueState (CppHdrCode OpData)
notOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  negateOp :: State ValueState (CppHdrCode OpData)
negateOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  sqrtOp :: State ValueState (CppHdrCode OpData)
sqrtOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  absOp :: State ValueState (CppHdrCode OpData)
absOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  logOp :: State ValueState (CppHdrCode OpData)
logOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  lnOp :: State ValueState (CppHdrCode OpData)
lnOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  expOp :: State ValueState (CppHdrCode OpData)
expOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  sinOp :: State ValueState (CppHdrCode OpData)
sinOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  cosOp :: State ValueState (CppHdrCode OpData)
cosOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  tanOp :: State ValueState (CppHdrCode OpData)
tanOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  asinOp :: State ValueState (CppHdrCode OpData)
asinOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  acosOp :: State ValueState (CppHdrCode OpData)
acosOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  atanOp :: State ValueState (CppHdrCode OpData)
atanOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  floorOp :: State ValueState (CppHdrCode OpData)
floorOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  ceilOp :: State ValueState (CppHdrCode OpData)
ceilOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty

instance BinaryOpSym CppHdrCode where
  equalOp :: State ValueState (CppHdrCode OpData)
equalOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  notEqualOp :: State ValueState (CppHdrCode OpData)
notEqualOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  greaterOp :: State ValueState (CppHdrCode OpData)
greaterOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  greaterEqualOp :: State ValueState (CppHdrCode OpData)
greaterEqualOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  lessOp :: State ValueState (CppHdrCode OpData)
lessOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  lessEqualOp :: State ValueState (CppHdrCode OpData)
lessEqualOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  plusOp :: State ValueState (CppHdrCode OpData)
plusOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  minusOp :: State ValueState (CppHdrCode OpData)
minusOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  multOp :: State ValueState (CppHdrCode OpData)
multOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  divideOp :: State ValueState (CppHdrCode OpData)
divideOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  powerOp :: State ValueState (CppHdrCode OpData)
powerOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  moduloOp :: State ValueState (CppHdrCode OpData)
moduloOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  andOp :: State ValueState (CppHdrCode OpData)
andOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty
  orOp :: State ValueState (CppHdrCode OpData)
orOp = Int -> Doc -> State ValueState (CppHdrCode OpData)
forall (r :: * -> *). Monad r => Int -> Doc -> VSOp r
mkOp Int
0 Doc
empty

instance OpElim CppHdrCode where
  uOp :: CppHdrCode OpData -> Doc
uOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (CppHdrCode OpData -> OpData) -> CppHdrCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode OpData -> OpData
forall a. CppHdrCode a -> a
unCPPHC
  bOp :: CppHdrCode OpData -> Doc
bOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (CppHdrCode OpData -> OpData) -> CppHdrCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode OpData -> OpData
forall a. CppHdrCode a -> a
unCPPHC
  uOpPrec :: CppHdrCode OpData -> Int
uOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (CppHdrCode OpData -> OpData) -> CppHdrCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode OpData -> OpData
forall a. CppHdrCode a -> a
unCPPHC
  bOpPrec :: CppHdrCode OpData -> Int
bOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (CppHdrCode OpData -> OpData) -> CppHdrCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode OpData -> OpData
forall a. CppHdrCode a -> a
unCPPHC

instance ScopeSym CppHdrCode ScopeData where
  global :: CppHdrCode ScopeData
global = CppHdrCode ScopeData
forall (r :: * -> *). Monad r => r ScopeData
CP.global
  mainFn :: CppHdrCode ScopeData
mainFn = CppHdrCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
local
  local :: CppHdrCode ScopeData
local = CppHdrCode ScopeData
forall (r :: * -> *). Monad r => r ScopeData
G.local

instance ScopeElim CppHdrCode ScopeData where
  scopeData :: CppHdrCode ScopeData -> ScopeData
scopeData = CppHdrCode ScopeData -> ScopeData
forall a. CppHdrCode a -> a
unCPPHC

instance VariableSym CppHdrCode Variable TypeData where
  var :: String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
var           = String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> VS (r var)
G.var
  constant :: String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
constant  String
_ State ValueState (CppHdrCode TypeData)
_ = String
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> Doc -> VS (r var)
mkStateVar String
"" State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  extVar :: String
-> String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
extVar  String
_ String
_ State ValueState (CppHdrCode TypeData)
_ = String
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> Doc -> VS (r var)
mkStateVar String
"" State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance OOVariableSym CppHdrCode Variable Value TypeData where
  classVar :: String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
classVar = String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> VS (r var)
G.classVar
  classConst :: String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
classConst = String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
OOVariableSym r var val typ =>
String -> VS (r typ) -> VS (r var)
classVar
  classVarAccess :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable -> HdrState ValueState Variable
classVarAccess State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Variable
_ = String
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> Doc -> VS (r var)
mkStateVar String
"" State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  extClassVarAccess :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable -> HdrState ValueState Variable
extClassVarAccess State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Variable
_ = String
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> Doc -> VS (r var)
mkStateVar String
"" State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  instanceVarAccess :: HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Variable
instanceVarAccess = HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k) (val :: k).
(InternalVarElim r var, RenderVariable r var typ, ValueElim r val,
 VariableElim r var typ) =>
VS (r val) -> VS (r var) -> VS (r var)
G.instanceVarAccess

instance SelfSym CppHdrCode Variable where
  self :: HdrState ValueState Variable
self = String
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> Doc -> VS (r var)
mkStateVar String
"" State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance VariableElim CppHdrCode Variable TypeData where
  variableName :: CppHdrCode Variable -> String
variableName = Variable -> String
varName (Variable -> String)
-> (CppHdrCode Variable -> Variable)
-> CppHdrCode Variable
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Variable -> Variable
forall a. CppHdrCode a -> a
unCPPHC
  variableType :: CppHdrCode Variable -> CppHdrCode TypeData
variableType = (Variable -> TypeData)
-> CppHdrCode Variable -> CppHdrCode TypeData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue Variable -> TypeData
varType

instance InternalVarElim CppHdrCode Variable where
  variableBind :: CppHdrCode Variable -> AttachmentTag
variableBind = Variable -> AttachmentTag
varBind (Variable -> AttachmentTag)
-> (CppHdrCode Variable -> Variable)
-> CppHdrCode Variable
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Variable -> Variable
forall a. CppHdrCode a -> a
unCPPHC
  variable :: CppHdrCode Variable -> Doc
variable = Variable -> Doc
varDoc (Variable -> Doc)
-> (CppHdrCode Variable -> Variable) -> CppHdrCode Variable -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Variable -> Variable
forall a. CppHdrCode a -> a
unCPPHC

instance RenderVariable CppHdrCode Variable TypeData where
  varFromData :: AttachmentTag
-> String
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
varFromData AttachmentTag
b String
n State ValueState (CppHdrCode TypeData)
t' Doc
d = do
    t <- State ValueState (CppHdrCode TypeData)
t'
    toState $ on2CodeValues (vard b n) t (toCode d)

instance ValueSym CppHdrCode Value TypeData where
  valueType :: CppHdrCode Value -> CppHdrCode TypeData
valueType = (Value -> TypeData) -> CppHdrCode Value -> CppHdrCode TypeData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue Value -> TypeData
valType

instance Argument CppHdrCode Value where
  pointerArg :: HdrState ValueState Value -> HdrState ValueState Value
pointerArg = HdrState ValueState Value -> HdrState ValueState Value
forall a. a -> a
id

instance Literal CppHdrCode Value TypeData where
  litTrue :: HdrState ValueState Value
litTrue = HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
VS (r val)
C.litTrue
  litFalse :: HdrState ValueState Value
litFalse = HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
VS (r val)
C.litFalse
  litChar :: Char -> HdrState ValueState Value
litChar = (Doc -> Doc) -> Char -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
(Doc -> Doc) -> Char -> VS (r val)
G.litChar Doc -> Doc
quotes
  litDouble :: Double -> HdrState ValueState Value
litDouble = Double -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
Double -> VS (r val)
G.litDouble
  litFloat :: Float -> HdrState ValueState Value
litFloat = Float -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
Float -> VS (r val)
C.litFloat
  litInt :: Integer -> HdrState ValueState Value
litInt = Integer -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
Integer -> VS (r val)
G.litInt
  litString :: String -> HdrState ValueState Value
litString = String -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ) =>
String -> VS (r val)
G.litString
  litArray :: State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
litArray = State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
VS (r typ) -> [VS (r val)] -> VS (r val)
litList
  litSet :: State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
litSet = (State ValueState (CppHdrCode TypeData)
 -> State ValueState (CppHdrCode TypeData))
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, ValueElim r val) =>
(VS (r typ) -> VS (r typ))
-> VS (r typ) -> [VS (r val)] -> VS (r val)
cppLitSet State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
setType
  litList :: State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value] -> HdrState ValueState Value
litList = (Doc -> Doc)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ, ValueElim r val) =>
(Doc -> Doc) -> VS (r typ) -> [VS (r val)] -> VS (r val)
CP.litArray Doc -> Doc
braces

instance MathConstant CppHdrCode Value where
  pi :: HdrState ValueState Value
pi = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addHeaderDefine String
mathDefines (ValueState -> ValueState)
-> (ValueState -> ValueState) -> ValueState -> ValueState
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ValueState -> ValueState
addHeaderLangImport String
mathh)
    State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
double Doc
cppPi

instance VariableValue CppHdrCode Variable Value where
  valueOf :: HdrState ValueState Variable -> HdrState ValueState Value
valueOf = HdrState ValueState Variable -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(InternalVarElim r var, RenderValue r var val typ,
 VariableElim r var typ) =>
VS (r var) -> VS (r val)
G.valueOf

instance CommandLineArgs CppHdrCode Value where
  arg :: Integer -> HdrState ValueState Value
arg Integer
n = HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, TypeSym r typ, ValueElim r val) =>
VS (r val) -> VS (r val) -> VS (r val)
G.arg (Integer -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Integer -> VS (r val)
litInt (Integer -> HdrState ValueState Value)
-> Integer -> HdrState ValueState Value
forall a b. (a -> b) -> a -> b
$ Integer
nInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
1) HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
CommandLineArgs r val =>
VS (r val)
argsList
  argsList :: HdrState ValueState Value
argsList = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). Monad r => VS (r TypeData)
argvType (String -> Doc
text String
argv)
  argExists :: Integer -> HdrState ValueState Value
argExists Integer
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance NumericExpression CppHdrCode Value where
  #~ :: HdrState ValueState Value -> HdrState ValueState Value
(#~) HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  #/^ :: HdrState ValueState Value -> HdrState ValueState Value
(#/^) HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  #| :: HdrState ValueState Value -> HdrState ValueState Value
(#|) HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  #+ :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#+) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  #- :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#-) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  #* :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#*) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  #/ :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#/) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  #% :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#%) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  #^ :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(#^) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

  log :: HdrState ValueState Value -> HdrState ValueState Value
log HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ln :: HdrState ValueState Value -> HdrState ValueState Value
ln HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  exp :: HdrState ValueState Value -> HdrState ValueState Value
exp HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  sin :: HdrState ValueState Value -> HdrState ValueState Value
sin HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  cos :: HdrState ValueState Value -> HdrState ValueState Value
cos HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  tan :: HdrState ValueState Value -> HdrState ValueState Value
tan HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  csc :: HdrState ValueState Value -> HdrState ValueState Value
csc HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  sec :: HdrState ValueState Value -> HdrState ValueState Value
sec HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  cot :: HdrState ValueState Value -> HdrState ValueState Value
cot HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  arcsin :: HdrState ValueState Value -> HdrState ValueState Value
arcsin HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  arccos :: HdrState ValueState Value -> HdrState ValueState Value
arccos HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  arctan :: HdrState ValueState Value -> HdrState ValueState Value
arctan HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  floor :: HdrState ValueState Value -> HdrState ValueState Value
floor HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ceil :: HdrState ValueState Value -> HdrState ValueState Value
ceil HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance BooleanExpression CppHdrCode Value where
  ?! :: HdrState ValueState Value -> HdrState ValueState Value
(?!) HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ?&& :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?&&) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ?|| :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?||) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance Comparison CppHdrCode Value where
  ?< :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?<) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ?<= :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?<=) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ?> :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?>) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ?>= :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?>=) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ?== :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?==) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  ?!= :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
(?!=) HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance ValueExpression CppHdrCode Variable Value BinderD TypeData where
  inlineIf :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
inlineIf HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

  funcAppMixedArgs :: MixedCall CppHdrCode Variable Value TypeData
funcAppMixedArgs String
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  extFuncAppMixedArgs :: String -> MixedCall CppHdrCode Variable Value TypeData
extFuncAppMixedArgs String
_ String
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  libFuncAppMixedArgs :: String -> MixedCall CppHdrCode Variable Value TypeData
libFuncAppMixedArgs String
_ String
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

  lambda :: [HdrState ValueState BinderD]
-> HdrState ValueState Value -> HdrState ValueState Value
lambda [HdrState ValueState BinderD]
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

  notNull :: HdrState ValueState Value -> HdrState ValueState Value
notNull HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance OOValueExpression CppHdrCode Variable Value TypeData where
  newObjMixedArgs :: State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
newObjMixedArgs State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  extNewObjMixedArgs :: MixedCall CppHdrCode Variable Value TypeData
extNewObjMixedArgs String
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  libNewObjMixedArgs :: MixedCall CppHdrCode Variable Value TypeData
libNewObjMixedArgs String
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance RenderValue CppHdrCode Variable Value TypeData where
  inputFunc :: HdrState ValueState Value
inputFunc = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  printFunc :: HdrState ValueState Value
printFunc = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  printLnFunc :: HdrState ValueState Value
printLnFunc = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  printFileFunc :: HdrState ValueState Value -> HdrState ValueState Value
printFileFunc HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  printFileLnFunc :: HdrState ValueState Value -> HdrState ValueState Value
printFileLnFunc HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

  cast :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value -> HdrState ValueState Value
cast State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

  call :: Maybe String
-> Maybe Doc -> MixedCall CppHdrCode Variable Value TypeData
call Maybe String
_ Maybe Doc
_ String
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

  valFromData :: Maybe Int
-> Maybe Integer
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Value
valFromData Maybe Int
p Maybe Integer
i State ValueState (CppHdrCode TypeData)
t' Doc
d = do
    t <- State ValueState (CppHdrCode TypeData)
t'
    toState $ on2CodeValues (vd p i) t (toCode d)

instance ValueElim CppHdrCode Value where
  valuePrec :: CppHdrCode Value -> Maybe Int
valuePrec = Value -> Maybe Int
valPrec (Value -> Maybe Int)
-> (CppHdrCode Value -> Value) -> CppHdrCode Value -> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Value -> Value
forall a. CppHdrCode a -> a
unCPPHC
  valueInt :: CppHdrCode Value -> Maybe Integer
valueInt = Value -> Maybe Integer
valInt (Value -> Maybe Integer)
-> (CppHdrCode Value -> Value) -> CppHdrCode Value -> Maybe Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Value -> Value
forall a. CppHdrCode a -> a
unCPPHC
  value :: CppHdrCode Value -> Doc
value = Value -> Doc
val (Value -> Doc)
-> (CppHdrCode Value -> Value) -> CppHdrCode Value -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Value -> Value
forall a. CppHdrCode a -> a
unCPPHC

instance InternalValueExp CppHdrCode Variable Value TypeData where
  objMethodCallMixedArgs' :: String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
objMethodCallMixedArgs' String
_ State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Value
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  classMethodCallMixedArgs' :: String
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState ValueState Value
classMethodCallMixedArgs' String
_ State ValueState (CppHdrCode TypeData)
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ [(HdrState ValueState Variable, HdrState ValueState Value)]
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance OOFunctionSym CppHdrCode Value TypeData where
  func :: String
-> State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState Value]
-> HdrState ValueState FuncData
func String
_ State ValueState (CppHdrCode TypeData)
_ [HdrState ValueState Value]
_ = Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *) typ.
RenderFunction r typ =>
Doc -> VS (r typ) -> VS (r FuncData)
funcFromData Doc
empty State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void
  objAccess :: HdrState ValueState Value
-> HdrState ValueState FuncData -> HdrState ValueState Value
objAccess HdrState ValueState Value
_ HdrState ValueState FuncData
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance GetSet CppHdrCode Variable Value where
  get :: HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState ValueState Value
get HdrState ValueState Value
_ HdrState ValueState Variable
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  set :: HdrState ValueState Value
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState Value
set HdrState ValueState Value
_ HdrState ValueState Variable
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance IndexTranslator CppHdrCode Value where
  intToIndex :: HdrState ValueState Value -> HdrState ValueState Value
intToIndex HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  indexToInt :: HdrState ValueState Value -> HdrState ValueState Value
indexToInt HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance Reference CppHdrCode Value where
  makeRef :: HdrState ValueState Value -> HdrState ValueState Value
makeRef = HdrState ValueState Value -> HdrState ValueState Value
forall a. a -> a
id
  maybeDeref :: HdrState ValueState Value -> HdrState ValueState Value
maybeDeref = HdrState ValueState Value -> HdrState ValueState Value
forall a. a -> a
id

instance Array CppHdrCode Variable Value where
  arrayElem :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Variable
arrayElem HdrState ValueState Value
_ HdrState ValueState Value
_ = String
-> State ValueState (CppHdrCode TypeData)
-> Doc
-> HdrState ValueState Variable
forall {k} (r :: k -> *) (var :: k) (typ :: k).
RenderVariable r var typ =>
String -> VS (r typ) -> Doc -> VS (r var)
mkStateVar String
"" State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  arrayLength :: HdrState ValueState Value -> HdrState ValueState Value
arrayLength = HdrState ValueState Value -> HdrState ValueState Value
forall {k} (r :: k -> *) (val :: k).
List r val =>
VS (r val) -> VS (r val)
listSize
  arrayCopy :: HdrState ValueState Value -> HdrState ValueState Value
arrayCopy = HdrState ValueState Value -> HdrState ValueState Value
forall a. a -> a
id -- C++ automatically copies std::vectors on assignment

instance List CppHdrCode Value where
  listSize :: HdrState ValueState Value -> HdrState ValueState Value
listSize HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  listAccess :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
listAccess HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  indexOf :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
indexOf HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance ListStatement CppHdrCode Statement Value where
  listAdd :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Statement
listAdd HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState ValueState Value
_ = Doc -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
Doc -> MS (r stmt)
mkStmt Doc
empty
  listAppend :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState MethodState Statement
listAppend HdrState ValueState Value
_ HdrState ValueState Value
_ = Doc -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
Doc -> MS (r stmt)
mkStmt Doc
empty
  listSet :: HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Statement
listSet HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState ValueState Value
_ = Doc -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
Doc -> MS (r stmt)
mkStmtNoEnd Doc
empty

instance Set CppHdrCode Value where
  contains :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
contains HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  setAdd :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
setAdd HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  setRemove :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
setRemove HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty
  setUnion :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState ValueState Value
setUnion HdrState ValueState Value
_ HdrState ValueState Value
_ = State ValueState (CppHdrCode TypeData)
-> Doc -> HdrState ValueState Value
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void Doc
empty

instance InternalList CppHdrCode Block Variable Value where
  listSlice' :: Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Value)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Doc
listSlice' Maybe (HdrState ValueState Value)
_ Maybe (HdrState ValueState Value)
_ Maybe (HdrState ValueState Value)
_ HdrState ValueState Variable
_ HdrState ValueState Value
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance InternalGetSet CppHdrCode Variable Value TypeData where
  getFunc :: HdrState ValueState Variable -> HdrState ValueState FuncData
getFunc HdrState ValueState Variable
_ = Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *) typ.
RenderFunction r typ =>
Doc -> VS (r typ) -> VS (r FuncData)
funcFromData Doc
empty State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void
  setFunc :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState FuncData
setFunc State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Variable
_ HdrState ValueState Value
_ = Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *) typ.
RenderFunction r typ =>
Doc -> VS (r typ) -> VS (r FuncData)
funcFromData Doc
empty State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void

instance InternalListFunc CppHdrCode Value TypeData where
  listAccessFunc :: State ValueState (CppHdrCode TypeData)
-> HdrState ValueState Value -> HdrState ValueState FuncData
listAccessFunc State ValueState (CppHdrCode TypeData)
_ HdrState ValueState Value
_ = Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall (r :: * -> *) typ.
RenderFunction r typ =>
Doc -> VS (r typ) -> VS (r FuncData)
funcFromData Doc
empty State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void

instance BinderSym CppHdrCode BinderD TypeData where
  binder :: String
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState BinderD
binder String
nm State ValueState (CppHdrCode TypeData)
tp = (TypeData -> BinderD) -> CppHdrCode TypeData -> CppHdrCode BinderD
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (String -> TypeData -> BinderD
bindFormD String
nm) (CppHdrCode TypeData -> CppHdrCode BinderD)
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState BinderD
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> State ValueState (CppHdrCode TypeData)
tp

instance BinderElim CppHdrCode BinderD TypeData where
  binderName :: CppHdrCode BinderD -> String
binderName = BinderD -> String
bindName (BinderD -> String)
-> (CppHdrCode BinderD -> BinderD) -> CppHdrCode BinderD -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode BinderD -> BinderD
forall a. CppHdrCode a -> a
unCPPHC
  binderType :: CppHdrCode BinderD -> CppHdrCode TypeData
binderType = (BinderD -> TypeData) -> CppHdrCode BinderD -> CppHdrCode TypeData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue BinderD -> TypeData
bindType

instance InternalBinderElim CppHdrCode BinderD where
  binderElim :: CppHdrCode BinderD -> Doc
binderElim = String -> Doc
text (String -> Doc)
-> (CppHdrCode BinderD -> String) -> CppHdrCode BinderD -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BinderD -> String
bindName (BinderD -> String)
-> (CppHdrCode BinderD -> BinderD) -> CppHdrCode BinderD -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode BinderD -> BinderD
forall a. CppHdrCode a -> a
unCPPHC

instance RenderFunction CppHdrCode TypeData where
  funcFromData :: Doc
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
funcFromData Doc
d = (CppHdrCode TypeData -> CppHdrCode FuncData)
-> State ValueState (CppHdrCode TypeData)
-> HdrState ValueState FuncData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((TypeData -> FuncData)
-> CppHdrCode TypeData -> CppHdrCode FuncData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (TypeData -> Doc -> FuncData
`fd` Doc
d))

instance FunctionElim CppHdrCode TypeData where
  functionType :: CppHdrCode FuncData -> CppHdrCode TypeData
functionType = (FuncData -> TypeData)
-> CppHdrCode FuncData -> CppHdrCode TypeData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue FuncData -> TypeData
fType
  function :: CppHdrCode FuncData -> Doc
function = FuncData -> Doc
funcDoc (FuncData -> Doc)
-> (CppHdrCode FuncData -> FuncData) -> CppHdrCode FuncData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode FuncData -> FuncData
forall a. CppHdrCode a -> a
unCPPHC

instance InternalAssignStmt CppHdrCode Statement Variable Value where
  multiAssign :: [HdrState ValueState Variable]
-> [HdrState ValueState Value] -> HdrState MethodState Statement
multiAssign [HdrState ValueState Variable]
_ [HdrState ValueState Value]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance InternalIOStmt CppHdrCode Statement Value where
  printSt :: Bool
-> Maybe (HdrState ValueState Value)
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Statement
printSt Bool
_ Maybe (HdrState ValueState Value)
_ HdrState ValueState Value
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance InternalControlStmt CppHdrCode Statement Value where
  multiReturn :: [HdrState ValueState Value] -> HdrState MethodState Statement
multiReturn [HdrState ValueState Value]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance RenderStatement CppHdrCode Statement where
  stmt :: HdrState MethodState Statement -> HdrState MethodState Statement
stmt = HdrState MethodState Statement -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
(RenderStatement r stmt, StatementElim r stmt) =>
MS (r stmt) -> MS (r stmt)
G.stmt
  loopStmt :: HdrState MethodState Statement -> HdrState MethodState Statement
loopStmt HdrState MethodState Statement
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  stmtFromData :: Doc -> Terminator -> HdrState MethodState Statement
stmtFromData Doc
d Terminator
t = CppHdrCode Statement -> HdrState MethodState Statement
forall a s. a -> State s a
toState (CppHdrCode Statement -> HdrState MethodState Statement)
-> CppHdrCode Statement -> HdrState MethodState Statement
forall a b. (a -> b) -> a -> b
$ Statement -> CppHdrCode Statement
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, Terminator
t)

instance StatementElim CppHdrCode Statement where
  statement :: CppHdrCode Statement -> Doc
statement = Statement -> Doc
forall a b. (a, b) -> a
fst (Statement -> Doc)
-> (CppHdrCode Statement -> Statement)
-> CppHdrCode Statement
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Statement -> Statement
forall a. CppHdrCode a -> a
unCPPHC
  statementTerm :: CppHdrCode Statement -> Terminator
statementTerm = Statement -> Terminator
forall a b. (a, b) -> b
snd (Statement -> Terminator)
-> (CppHdrCode Statement -> Statement)
-> CppHdrCode Statement
-> Terminator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Statement -> Statement
forall a. CppHdrCode a -> a
unCPPHC

instance EmptyStatement CppHdrCode Statement where
  emptyStmt :: HdrState MethodState Statement
emptyStmt = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
MS (r stmt)
G.emptyStmt

instance MultiStatement CppHdrCode Statement where
  multi :: [HdrState MethodState Statement] -> HdrState MethodState Statement
multi [HdrState MethodState Statement]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance ValueStatement CppHdrCode Statement Value where
  valStmt :: HdrState ValueState Value -> HdrState MethodState Statement
valStmt HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance AssignStatement CppHdrCode Statement Variable Value where
  assign :: HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
assign HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  &-= :: HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
(&-=) HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  &+= :: HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
(&+=) HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  &++ :: HdrState ValueState Variable -> HdrState MethodState Statement
(&++) HdrState ValueState Variable
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  &-- :: HdrState ValueState Variable -> HdrState MethodState Statement
(&--) HdrState ValueState Variable
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance DeclStatement CppHdrCode Body Statement Variable ScopeData Value where
  varDec :: HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState Statement
varDec HdrState ValueState Variable
vr CppHdrCode ScopeData
scp = do
    vr' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
vr
    let tp = (TypeData -> CodeType
cType (TypeData -> CodeType)
-> (CppHdrCode Variable -> TypeData)
-> CppHdrCode Variable
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode TypeData -> TypeData
forall a. CppHdrCode a -> a
unCPPHC (CppHdrCode TypeData -> TypeData)
-> (CppHdrCode Variable -> CppHdrCode TypeData)
-> CppHdrCode Variable
-> TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode Variable -> CppHdrCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType) CppHdrCode Variable
vr'
    case tp of
      (Array CodeType
_) -> String -> HdrState MethodState Statement
forall a. HasCallStack => String -> a
error String
"Can't use `varDec` for C++ arrays; use `arrayDec`"
      CodeType
_         -> CppHdrCode AttachmentData
-> CppHdrCode AttachmentData
-> Doc
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState Statement
forall (r :: * -> *) var attch stmt.
(InternalVarElim r var, PermElim r attch, RenderStatement r stmt,
 ScopeElim r ScopeData, UnRepr r TypeData, TypeElim r TypeData,
 VariableElim r var TypeData) =>
r attch
-> r attch -> Doc -> VS (r var) -> r ScopeData -> MS (r stmt)
C.varDec CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
classLevel CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
instanceLevel Doc
empty HdrState ValueState Variable
vr CppHdrCode ScopeData
scp
  varDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
varDecDef = Terminator
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
(DeclStatement r bod stmt var scope val, RenderStatement r stmt,
 StatementElim r stmt, ValueElim r val) =>
Terminator -> VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
C.varDecDef Terminator
Semi
  setDec :: HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState Statement
setDec = HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
varDec
  setDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
setDecDef = HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
varDecDef
  listDec :: Integer
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState Statement
listDec Integer
_ HdrState ValueState Variable
_ CppHdrCode ScopeData
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  listDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState Statement
listDecDef HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Value]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  arrayDec :: Integer
-> HdrState ValueState Value
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState Statement
arrayDec Integer
_ HdrState ValueState Value
_ HdrState ValueState Variable
_ CppHdrCode ScopeData
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  arrayDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState Statement
arrayDecDef HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Value]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  constDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
constDecDef = HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall (r :: * -> *) var stmt val.
(InternalVarElim r var, RenderStatement r stmt,
 ScopeElim r ScopeData, UnRepr r TypeData, ValueElim r val,
 VariableElim r var TypeData) =>
VS (r var) -> r ScopeData -> VS (r val) -> MS (r stmt)
CG.constDecDef
  funcDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState Statement
funcDecDef HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Variable]
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance OODeclStatement CppHdrCode Statement Variable ScopeData Value where
  objDecDef :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
objDecDef HdrState ValueState Variable
_ CppHdrCode ScopeData
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  objDecNew :: HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState Statement
objDecNew HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Value]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  extObjDecNew :: String
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> [HdrState ValueState Value]
-> HdrState MethodState Statement
extObjDecNew String
_ HdrState ValueState Variable
_ CppHdrCode ScopeData
_ [HdrState ValueState Value]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance PrintConsole CppHdrCode Statement Value where
  print :: HdrState ValueState Value -> HdrState MethodState Statement
print HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  printLn :: HdrState ValueState Value -> HdrState MethodState Statement
printLn HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  printStr :: String -> HdrState MethodState Statement
printStr String
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  printStrLn :: String -> HdrState MethodState Statement
printStrLn String
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance ReadConsole CppHdrCode Statement Variable where
  getInput :: HdrState ValueState Variable -> HdrState MethodState Statement
getInput HdrState ValueState Variable
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  discardInput :: HdrState MethodState Statement
discardInput = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance FileHandling CppHdrCode Statement Variable Value where
  openFileR :: HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
openFileR HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  openFileW :: HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
openFileW HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  openFileA :: HdrState ValueState Variable
-> HdrState ValueState Value -> HdrState MethodState Statement
openFileA HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  closeFile :: HdrState ValueState Value -> HdrState MethodState Statement
closeFile HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance PrintFile CppHdrCode Statement Value where
  printFile :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState MethodState Statement
printFile HdrState ValueState Value
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  printFileLn :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState MethodState Statement
printFileLn HdrState ValueState Value
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  printFileStr :: HdrState ValueState Value
-> String -> HdrState MethodState Statement
printFileStr HdrState ValueState Value
_ String
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  printFileStrLn :: HdrState ValueState Value
-> String -> HdrState MethodState Statement
printFileStrLn HdrState ValueState Value
_ String
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance ReadFile CppHdrCode Statement Variable Value where
  getFileInput :: HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState MethodState Statement
getFileInput HdrState ValueState Value
_ HdrState ValueState Variable
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  discardFileInput :: HdrState ValueState Value -> HdrState MethodState Statement
discardFileInput HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  getFileInputLine :: HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState MethodState Statement
getFileInputLine HdrState ValueState Value
_ HdrState ValueState Variable
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  discardFileLine :: HdrState ValueState Value -> HdrState MethodState Statement
discardFileLine HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  getFileInputAll :: HdrState ValueState Value
-> HdrState ValueState Variable -> HdrState MethodState Statement
getFileInputAll HdrState ValueState Value
_ HdrState ValueState Variable
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance StringStatement CppHdrCode Statement Variable Value where
  stringSplit :: Char
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Statement
stringSplit Char
_ HdrState ValueState Variable
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

  stringListVals :: [HdrState ValueState Variable]
-> HdrState ValueState Value -> HdrState MethodState Statement
stringListVals [HdrState ValueState Variable]
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  stringListLists :: [HdrState ValueState Variable]
-> HdrState ValueState Value -> HdrState MethodState Statement
stringListLists [HdrState ValueState Variable]
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance FuncAppStatement CppHdrCode Statement Variable Value where
  inOutCall :: InOutCall CppHdrCode Statement Variable Value
inOutCall String
_ [HdrState ValueState Value]
_ [HdrState ValueState Variable]
_ [HdrState ValueState Variable]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  extInOutCall :: String -> InOutCall CppHdrCode Statement Variable Value
extInOutCall String
_ String
_ [HdrState ValueState Value]
_ [HdrState ValueState Variable]
_ [HdrState ValueState Variable]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance OOFuncAppStatement CppHdrCode Statement Variable Value where
  selfInOutCall :: InOutCall CppHdrCode Statement Variable Value
selfInOutCall String
_ [HdrState ValueState Value]
_ [HdrState ValueState Variable]
_ [HdrState ValueState Variable]
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance CommentStatement CppHdrCode Statement where
  comment :: String -> HdrState MethodState Statement
comment String
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance ControlStatement CppHdrCode Body Statement Variable Value where
  break :: HdrState MethodState Statement
break = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  continue :: HdrState MethodState Statement
continue = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

  returnStmt :: HdrState ValueState Value -> HdrState MethodState Statement
returnStmt HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

  throw :: String -> HdrState MethodState Statement
throw String
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

  ifCond :: [(HdrState ValueState Value, HdrState MethodState Doc)]
-> HdrState MethodState Doc -> HdrState MethodState Statement
ifCond [(HdrState ValueState Value, HdrState MethodState Doc)]
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  switch :: HdrState ValueState Value
-> [(HdrState ValueState Value, HdrState MethodState Doc)]
-> HdrState MethodState Doc
-> HdrState MethodState Statement
switch HdrState ValueState Value
_ [(HdrState ValueState Value, HdrState MethodState Doc)]
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

  ifExists :: HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState Doc
-> HdrState MethodState Statement
ifExists HdrState ValueState Value
_ HdrState MethodState Doc
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

  for :: HdrState MethodState Statement
-> HdrState ValueState Value
-> HdrState MethodState Statement
-> HdrState MethodState Doc
-> HdrState MethodState Statement
for HdrState MethodState Statement
_ HdrState ValueState Value
_ HdrState MethodState Statement
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  forRange :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState Statement
forRange HdrState ValueState Variable
_ HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState ValueState Value
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  forEach :: HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState MethodState Doc
-> HdrState MethodState Statement
forEach HdrState ValueState Variable
_ HdrState ValueState Value
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt
  while :: HdrState ValueState Value
-> HdrState MethodState Doc -> HdrState MethodState Statement
while HdrState ValueState Value
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

  tryCatch :: HdrState MethodState Doc
-> HdrState MethodState Doc -> HdrState MethodState Statement
tryCatch HdrState MethodState Doc
_ HdrState MethodState Doc
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

  assert :: HdrState ValueState Value
-> HdrState ValueState Value -> HdrState MethodState Statement
assert HdrState ValueState Value
_ HdrState ValueState Value
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance ObserverPattern CppHdrCode Statement TypeData where
  notifyObservers :: HdrState ValueState FuncData
-> State ValueState (CppHdrCode TypeData)
-> HdrState MethodState Statement
notifyObservers HdrState ValueState FuncData
_ State ValueState (CppHdrCode TypeData)
_ = HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance StrategyPattern CppHdrCode Body Block Variable Value where
  runStrategy :: String
-> [(String, HdrState MethodState Doc)]
-> Maybe (HdrState ValueState Value)
-> Maybe (HdrState ValueState Variable)
-> HdrState MethodState Doc
runStrategy String
_ [(String, HdrState MethodState Doc)]
_ Maybe (HdrState ValueState Value)
_ Maybe (HdrState ValueState Variable)
_ = CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance VisibilitySym CppHdrCode (Doc, VisibilityTag) where
  private :: CppHdrCode (Doc, VisibilityTag)
private = (Doc, VisibilityTag) -> CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.private, VisibilityTag
Priv)
  public :: CppHdrCode (Doc, VisibilityTag)
public = (Doc, VisibilityTag) -> CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.public, VisibilityTag
Pub)

instance RenderVisibility CppHdrCode (Doc, VisibilityTag) where
  visibilityFromData :: VisibilityTag -> Doc -> CppHdrCode (Doc, VisibilityTag)
visibilityFromData VisibilityTag
s Doc
d = (Doc, VisibilityTag) -> CppHdrCode (Doc, VisibilityTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, VisibilityTag
s)

instance VisibilityElim CppHdrCode (Doc, VisibilityTag) where
  visibility :: CppHdrCode (Doc, VisibilityTag) -> Doc
visibility = (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst ((Doc, VisibilityTag) -> Doc)
-> (CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag))
-> CppHdrCode (Doc, VisibilityTag)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC

instance MethodTypeSym CppHdrCode TypeData where
  mType :: State ValueState (CppHdrCode TypeData)
-> HdrState MethodState TypeData
mType = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode TypeData))
  MethodState
  ValueState
-> State ValueState (CppHdrCode TypeData)
-> HdrState MethodState TypeData
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode TypeData))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS

instance OOMethodTypeSym CppHdrCode TypeData where
  construct :: String -> HdrState MethodState TypeData
construct = String -> HdrState MethodState TypeData
forall (r :: * -> *). Monad r => String -> MS (r TypeData)
G.construct

instance ParameterSym CppHdrCode ParamData Variable where
  param :: HdrState ValueState Variable -> HdrState MethodState ParamData
param HdrState ValueState Variable
v' = do
    v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v'
    paramFromData v' (renderParam v)
  pointerParam :: HdrState ValueState Variable -> HdrState MethodState ParamData
pointerParam HdrState ValueState Variable
v' = do
    v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v'
    paramFromData v' (cppPointerParamDoc v)

instance RenderParam CppHdrCode ParamData Variable where
  paramFromData :: HdrState ValueState Variable
-> Doc -> HdrState MethodState ParamData
paramFromData HdrState ValueState Variable
v' Doc
d = do
    v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v'
    toState $ on2CodeValues pd v (toCode d)

instance ParamElim CppHdrCode ParamData TypeData where
  parameterName :: CppHdrCode ParamData -> String
parameterName = CppHdrCode Variable -> String
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> String
variableName (CppHdrCode Variable -> String)
-> (CppHdrCode ParamData -> CppHdrCode Variable)
-> CppHdrCode ParamData
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> Variable)
-> CppHdrCode ParamData -> CppHdrCode Variable
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ParamData -> Variable
paramVar
  parameterType :: CppHdrCode ParamData -> CppHdrCode TypeData
parameterType = CppHdrCode Variable -> CppHdrCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType (CppHdrCode Variable -> CppHdrCode TypeData)
-> (CppHdrCode ParamData -> CppHdrCode Variable)
-> CppHdrCode ParamData
-> CppHdrCode TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> Variable)
-> CppHdrCode ParamData -> CppHdrCode Variable
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ParamData -> Variable
paramVar
  parameter :: CppHdrCode ParamData -> Doc
parameter = ParamData -> Doc
paramDoc (ParamData -> Doc)
-> (CppHdrCode ParamData -> ParamData)
-> CppHdrCode ParamData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode ParamData -> ParamData
forall a. CppHdrCode a -> a
unCPPHC

instance MethodSym CppHdrCode MethodData (Doc, VisibilityTag) ParamData Body Variable TypeData where
  docMain :: HdrState MethodState Doc -> HdrState MethodState MethodData
docMain = HdrState MethodState Doc -> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
MS (r bod) -> MS (r mthd)
mainFunction
  function :: String
-> CppHdrCode (Doc, VisibilityTag)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
function = String
-> CppHdrCode (Doc, VisibilityTag)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (attch :: k) (typ :: k) (mthd :: k)
       (vis :: k) (param :: k) (bod :: k).
(AttachmentSym r attch, MethodTypeSym r typ,
 OORenderMethod r mthd attch vis param bod typ) =>
String
-> r vis
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
G.function
  mainFunction :: HdrState MethodState Doc -> HdrState MethodState MethodData
mainFunction HdrState MethodState Doc
_ = (MethodState -> MethodState)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall s a. (s -> s) -> a -> State s a
modifyReturn (VisibilityTag -> MethodState -> MethodState
setVisibility VisibilityTag
Pub) (CppHdrCode MethodData -> HdrState MethodState MethodData)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ MethodData -> CppHdrCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppHdrCode MethodData)
-> MethodData -> CppHdrCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
Pub Doc
empty
  docFunc :: String
-> [String]
-> Maybe String
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
docFunc = String
-> [String]
-> Maybe String
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *) mthd.
(BlockCommentSym r, RenderMethod r mthd) =>
String -> [String] -> Maybe String -> MS (r mthd) -> MS (r mthd)
CP.doxFunc

  inOutFunc :: String
-> CppHdrCode (Doc, VisibilityTag)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
inOutFunc String
n CppHdrCode (Doc, VisibilityTag)
s = (State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> HdrState MethodState MethodData)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall mthd.
(State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> MS (CppHdrCode mthd))
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
cpphInOut (String
-> CppHdrCode (Doc, VisibilityTag)
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String
-> r vis
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
function String
n CppHdrCode (Doc, VisibilityTag)
s)
  docInOutFunc :: String
-> CppHdrCode (Doc, VisibilityTag)
-> DocInOutFunc CppHdrCode MethodData Doc Variable
docInOutFunc String
n CppHdrCode (Doc, VisibilityTag)
s = ([HdrState ValueState Variable]
 -> [HdrState ValueState Variable]
 -> [HdrState ValueState Variable]
 -> HdrState MethodState Doc
 -> HdrState MethodState MethodData)
-> DocInOutFunc CppHdrCode MethodData Doc Variable
forall (r :: * -> *) mthd var bod.
(BlockCommentSym r, RenderMethod r mthd) =>
([VS (r var)]
 -> [VS (r var)] -> [VS (r var)] -> MS (r bod) -> MS (r mthd))
-> String
-> [(String, VS (r var))]
-> [(String, VS (r var))]
-> [(String, VS (r var))]
-> MS (r bod)
-> MS (r mthd)
CP.docInOutFunc (String
-> CppHdrCode (Doc, VisibilityTag)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (vis :: k) (param :: k)
       (bod :: k) (var :: k) (typ :: k).
MethodSym r mthd vis param bod var typ =>
String -> r vis -> InOutFunc r mthd bod var
inOutFunc String
n CppHdrCode (Doc, VisibilityTag)
s)

instance OOMethodSym CppHdrCode MethodData AttachmentData (Doc, VisibilityTag) ParamData Body Variable Value TypeData where
  method :: String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
method = String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (typ :: k) (mthd :: k) (attch :: k)
       (vis :: k) (param :: k) (bod :: k).
(MethodTypeSym r typ,
 OORenderMethod r mthd attch vis param bod typ) =>
String
-> r vis
-> r attch
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
G.method
  getMethod :: HdrState ValueState Variable -> HdrState MethodState MethodData
getMethod HdrState ValueState Variable
v = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v StateT MethodState Identity (CppHdrCode Variable)
-> (CppHdrCode Variable -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\CppHdrCode Variable
v' -> String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String
-> r vis
-> r attch
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
method (String -> String
getterName (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ CppHdrCode Variable -> String
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> String
variableName
    CppHdrCode Variable
v') CppHdrCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
instanceLevel (CppHdrCode TypeData -> State ValueState (CppHdrCode TypeData)
forall a s. a -> State s a
toState (CppHdrCode TypeData -> State ValueState (CppHdrCode TypeData))
-> CppHdrCode TypeData -> State ValueState (CppHdrCode TypeData)
forall a b. (a -> b) -> a -> b
$ CppHdrCode Variable -> CppHdrCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType CppHdrCode Variable
v') [] (CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty))
  setMethod :: HdrState ValueState Variable -> HdrState MethodState MethodData
setMethod HdrState ValueState Variable
v = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
-> HdrState ValueState Variable
-> StateT MethodState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppHdrCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState Variable
v StateT MethodState Identity (CppHdrCode Variable)
-> (CppHdrCode Variable -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\CppHdrCode Variable
v' -> String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String
-> r vis
-> r attch
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
method (String -> String
setterName (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ CppHdrCode Variable -> String
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> String
variableName
    CppHdrCode Variable
v') CppHdrCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
instanceLevel State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void [HdrState ValueState Variable -> HdrState MethodState ParamData
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
param HdrState ValueState Variable
v] (CppHdrCode Doc -> HdrState MethodState Doc
forall a s. a -> State s a
toState (CppHdrCode Doc -> HdrState MethodState Doc)
-> CppHdrCode Doc -> HdrState MethodState Doc
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty))
  constructor :: [HdrState MethodState ParamData]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
constructor [HdrState MethodState ParamData]
ps [(HdrState ValueState Variable, HdrState ValueState Value)]
is HdrState MethodState Doc
b = StateT MethodState Identity String
getClassName StateT MethodState Identity String
-> (String -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\String
n -> String
-> [HdrState MethodState ParamData]
-> [(HdrState ValueState Variable, HdrState ValueState Value)]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall (r :: * -> *) file mod cls stvr mthd attch vis param bod
       block stmt var scope val binder typ.
OORenderSym
  r
  file
  mod
  cls
  stvr
  mthd
  attch
  vis
  param
  bod
  block
  stmt
  var
  scope
  val
  binder
  typ =>
String
-> [MS (r param)]
-> Initializers r var val
-> MS (r bod)
-> MS (r mthd)
CP.constructor String
n [HdrState MethodState ParamData]
ps [(HdrState ValueState Variable, HdrState ValueState Value)]
is HdrState MethodState Doc
b)

  inOutMethod :: String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
inOutMethod String
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p = (State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> HdrState MethodState MethodData)
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall mthd.
(State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> MS (CppHdrCode mthd))
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
cpphInOut (String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String
-> r vis
-> r attch
-> VS (r typ)
-> [MS (r param)]
-> MS (r bod)
-> MS (r mthd)
method String
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p)
  docInOutMethod :: String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> DocInOutFunc CppHdrCode MethodData Doc Variable
docInOutMethod String
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p = ([HdrState ValueState Variable]
 -> [HdrState ValueState Variable]
 -> [HdrState ValueState Variable]
 -> HdrState MethodState Doc
 -> HdrState MethodState MethodData)
-> DocInOutFunc CppHdrCode MethodData Doc Variable
forall (r :: * -> *) mthd var bod.
(BlockCommentSym r, RenderMethod r mthd) =>
([VS (r var)]
 -> [VS (r var)] -> [VS (r var)] -> MS (r bod) -> MS (r mthd))
-> String
-> [(String, VS (r var))]
-> [(String, VS (r var))]
-> [(String, VS (r var))]
-> MS (r bod)
-> MS (r mthd)
CP.docInOutFunc (String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall {k} (r :: k -> *) (mthd :: k) (attch :: k) (vis :: k)
       (param :: k) (bod :: k) (var :: k) (val :: k) (typ :: k).
OOMethodSym r mthd attch vis param bod var val typ =>
String -> r vis -> r attch -> InOutFunc r mthd bod var
inOutMethod String
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p)

instance RenderMethod CppHdrCode MethodData where
  commentedFunc :: HdrState MethodState Doc
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
commentedFunc = FileType
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *).
(BlockCommentElim r, Monad r) =>
FileType -> MS (r Doc) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc FileType
Header

  mthdFromData :: VisibilityTag -> Doc -> HdrState MethodState MethodData
mthdFromData VisibilityTag
s Doc
d = CppHdrCode MethodData -> HdrState MethodState MethodData
forall a s. a -> State s a
toState (CppHdrCode MethodData -> HdrState MethodState MethodData)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ MethodData -> CppHdrCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppHdrCode MethodData)
-> MethodData -> CppHdrCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
s Doc
d

instance OORenderMethod CppHdrCode MethodData AttachmentData (Doc, VisibilityTag) ParamData Body TypeData where
  intMethod :: Bool
-> String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
intMethod Bool
_ String
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
a HdrState MethodState TypeData
t [HdrState MethodState ParamData]
ps HdrState MethodState Doc
_ = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (VisibilityTag -> MethodState -> MethodState
setVisibility ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, VisibilityTag)
s))
    tp <- HdrState MethodState TypeData
t
    pms <- sequence ps
    pure $ toCode $ mthd (snd $ unCPPHC s) $ cpphMethod n tp a pms
  intFunc :: Bool
-> String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
intFunc Bool
_ = String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
forall attch.
String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode attch
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
cpphIntFunc
  destructor :: forall stvr.
[CSStateVar CppHdrCode stvr] -> HdrState MethodState MethodData
destructor = String
-> [CSStateVar CppHdrCode stvr] -> HdrState MethodState MethodData
forall a. HasCallStack => String -> a
error (String
 -> [CSStateVar CppHdrCode stvr] -> HdrState MethodState MethodData)
-> String
-> [CSStateVar CppHdrCode stvr]
-> HdrState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ String -> String
CP.destructorError String
cppName

instance MethodElim CppHdrCode MethodData where
  method :: CppHdrCode MethodData -> Doc
method = MethodData -> Doc
mthdDoc (MethodData -> Doc)
-> (CppHdrCode MethodData -> MethodData)
-> CppHdrCode MethodData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode MethodData -> MethodData
forall a. CppHdrCode a -> a
unCPPHC

instance StateVarSym CppHdrCode StateVarData AttachmentData (Doc, VisibilityTag) Variable Value where
  stateVar :: CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ClassState StateVarData
stateVar CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p HdrState ValueState Variable
v = do
    dec <- LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode Statement))
  ClassState
  MethodState
-> HdrState MethodState Statement
-> StateT ClassState Identity (CppHdrCode Statement)
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode Statement))
  ClassState
  MethodState
(MethodState
 -> Focusing Identity (CppHdrCode Statement) MethodState)
-> ClassState
-> Focusing Identity (CppHdrCode Statement) ClassState
Lens' ClassState MethodState
lensCStoMS (HdrState MethodState Statement
 -> StateT ClassState Identity (CppHdrCode Statement))
-> HdrState MethodState Statement
-> StateT ClassState Identity (CppHdrCode Statement)
forall a b. (a -> b) -> a -> b
$ HdrState MethodState Statement -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
MS (r stmt) -> MS (r stmt)
stmt (HdrState MethodState Statement -> HdrState MethodState Statement)
-> HdrState MethodState Statement -> HdrState MethodState Statement
forall a b. (a -> b) -> a -> b
$ CppHdrCode AttachmentData
-> CppHdrCode AttachmentData
-> Doc
-> HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState MethodState Statement
forall (r :: * -> *) var attch stmt.
(InternalVarElim r var, PermElim r attch, RenderStatement r stmt,
 ScopeElim r ScopeData, UnRepr r TypeData, TypeElim r TypeData,
 VariableElim r var TypeData) =>
r attch
-> r attch -> Doc -> VS (r var) -> r ScopeData -> MS (r stmt)
C.varDec CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
classLevel CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
instanceLevel Doc
empty HdrState ValueState Variable
v CppHdrCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
local
    pure $ on2CodeValues svd (onCodeValue snd s)
      (toCode $ R.stateVar empty (RC.perm p) (RC.statement dec))
  stateVarDef :: CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ClassState StateVarData
stateVarDef CppHdrCode (Doc, VisibilityTag)
s CppHdrCode AttachmentData
p HdrState ValueState Variable
vr HdrState ValueState Value
vl = do
    d <- Doc
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> CS Doc
cpphStateVarDef Doc
empty CppHdrCode AttachmentData
p HdrState ValueState Variable
vr HdrState ValueState Value
vl
    pure $ pure $ svd (snd $ unCPPHC s) d
  constVar :: CppHdrCode (Doc, VisibilityTag)
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> HdrState ClassState StateVarData
constVar CppHdrCode (Doc, VisibilityTag)
s HdrState ValueState Variable
vr HdrState ValueState Value
_ = do
    vr' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  ClassState
  ValueState
-> HdrState ValueState Variable
-> StateT ClassState Identity (CppHdrCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode Variable))
  ClassState
  ValueState
(ValueState -> Focusing Identity (CppHdrCode Variable) ValueState)
-> ClassState -> Focusing Identity (CppHdrCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS HdrState ValueState Variable
vr
    let attch = Doc -> Doc -> Doc -> Variable -> Doc
R.constVar Doc
empty Doc
endStatement (AttachmentData -> Doc
attachmentDoc (CppHdrCode AttachmentData -> AttachmentData
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode AttachmentData
forall {k} (r :: k -> *) (attch :: k).
AttachmentSym r attch =>
r attch
classLevel)) (CppHdrCode Variable -> Variable
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode Variable
vr')
    pure $ pure $ svd (snd $ unCPPHC s) attch
  -- constVar s vr _ = on2StateValues (on3CodeValues svd (onCodeValue snd s) .
  --   on2CodeValues (R.constVar empty endStatement) (attachmentDoc <$> classLevel))
  --   (zoom lensCStoVS vr) (zoom lensCStoMS emptyStmt)

instance StateVarElim CppHdrCode StateVarData where
  stateVar :: CppHdrCode StateVarData -> Doc
stateVar = StateVarData -> Doc
stVar (StateVarData -> Doc)
-> (CppHdrCode StateVarData -> StateVarData)
-> CppHdrCode StateVarData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode StateVarData -> StateVarData
forall a. CppHdrCode a -> a
unCPPHC

instance ClassSym CppHdrCode Class StateVarData MethodData where
  buildClass :: Maybe String
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
buildClass = Maybe String
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
(RenderClass r cls stvr mthd vis, VisibilitySym r vis) =>
Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
G.buildClass
  extraClass :: String
-> Maybe String
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
extraClass = String
-> Maybe String
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
(RenderClass r cls stvr mthd vis, VisibilitySym r vis) =>
String
-> Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
CP.extraClass
  implementingClass :: String
-> [String]
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
implementingClass = String
-> [String]
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
(RenderClass r cls stvr mthd vis, VisibilitySym r vis) =>
String
-> [String]
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r cls)
G.implementingClass

  docClass :: String -> HdrState ClassState Doc -> HdrState ClassState Doc
docClass = String -> HdrState ClassState Doc -> HdrState ClassState Doc
forall (r :: * -> *) cls stvr mthd vis.
(BlockCommentSym r, RenderClass r cls stvr mthd vis) =>
String -> CS (r cls) -> CS (r cls)
CP.doxClass

instance RenderClass CppHdrCode Class StateVarData MethodData (Doc, VisibilityTag) where
  intClass :: String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode Doc
-> [HdrState ClassState StateVarData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> HdrState ClassState Doc
intClass String
n CppHdrCode (Doc, VisibilityTag)
_ CppHdrCode Doc
i [HdrState ClassState StateVarData]
vs [HdrState MethodState MethodData]
cstrs [HdrState MethodState MethodData]
mths = do
    (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ClassState -> ClassState
setClassName String
n)
    vars <- [HdrState ClassState StateVarData]
-> StateT ClassState Identity [CppHdrCode StateVarData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [HdrState ClassState StateVarData]
vs
    funcs <- sequence fs
    pure $ cpphClass n i vars funcs public private
    where fs :: [StateT ClassState Identity (CppHdrCode MethodData)]
fs = LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode MethodData))
  ClassState
  MethodState
-> HdrState MethodState MethodData
-> StateT ClassState Identity (CppHdrCode MethodData)
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode MethodData))
  ClassState
  MethodState
(MethodState
 -> Focusing Identity (CppHdrCode MethodData) MethodState)
-> ClassState
-> Focusing Identity (CppHdrCode MethodData) ClassState
Lens' ClassState MethodState
lensCStoMS (HdrState MethodState MethodData
 -> StateT ClassState Identity (CppHdrCode MethodData))
-> [HdrState MethodState MethodData]
-> [StateT ClassState Identity (CppHdrCode MethodData)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [HdrState MethodState MethodData]
cstrs [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
forall a. Semigroup a => a -> a -> a
P.<> [HdrState MethodState MethodData]
mths

  inherit :: Maybe String -> CppHdrCode Doc
inherit Maybe String
n = ((Doc, VisibilityTag) -> Doc)
-> CppHdrCode (Doc, VisibilityTag) -> CppHdrCode Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (Maybe String -> Doc -> Doc
cppInherit Maybe String
n (Doc -> Doc)
-> ((Doc, VisibilityTag) -> Doc) -> (Doc, VisibilityTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst) CppHdrCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public
  implements :: [String] -> CppHdrCode Doc
implements [String]
is = ((Doc, VisibilityTag) -> Doc)
-> CppHdrCode (Doc, VisibilityTag) -> CppHdrCode Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ((\Doc
p -> Doc
colon Doc -> Doc -> Doc
<+> [Doc] -> Doc
hcat ((Doc
p Doc -> Doc -> Doc
<+>) (Doc -> Doc) -> (String -> Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc
text (String -> Doc) -> [String] -> [Doc]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
is))
    (Doc -> Doc)
-> ((Doc, VisibilityTag) -> Doc) -> (Doc, VisibilityTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, VisibilityTag) -> Doc
forall a b. (a, b) -> a
fst) CppHdrCode (Doc, VisibilityTag)
forall {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public

  commentedClass :: HdrState ClassState Doc
-> HdrState ClassState Doc -> HdrState ClassState Doc
commentedClass = HdrState ClassState Doc
-> HdrState ClassState Doc -> HdrState ClassState Doc
forall (r :: * -> *) cls.
(BlockCommentElim r, ClassElim r cls, Monad r) =>
CS (r Doc) -> CS (r cls) -> CS (r Doc)
G.commentedClass

instance ClassElim CppHdrCode Class where
  class' :: CppHdrCode Doc -> Doc
class' = CppHdrCode Doc -> Doc
forall a. CppHdrCode a -> a
unCPPHC

instance ModuleSym CppHdrCode ModData Class MethodData where
  buildModule :: String
-> [String]
-> [HdrState MethodState MethodData]
-> [HdrState ClassState Doc]
-> HdrState FileState ModData
buildModule String
n [String]
is = String
-> FS Doc
-> FS Doc
-> FS Doc
-> [HdrState MethodState MethodData]
-> [HdrState ClassState Doc]
-> HdrState FileState ModData
forall {k} (r :: k -> *) (cls :: k) (mthd :: k) (mod :: k).
(ClassElim r cls, MethodElim r mthd, RenderMod r mod) =>
String
-> FS Doc
-> FS Doc
-> FS Doc
-> [MS (r mthd)]
-> [CS (r cls)]
-> FS (r mod)
CP.buildModule String
n (do
    ds <- FS [String]
getHeaderDefines
    lis <- getHeaderLangImports
    libis <- getHeaderLibImports
    mis <- getHeaderModImports
    us <- getHeaderUsing
    pure $ vibcat [
      vcat ((define <+>) . text <$> ds),
      vcat (RC.import' . li <$> lis),
      vcat (RC.import' . mi <$> (sort (is P.<> libis) P.<> mis)),
      vcat (usingNameSpace std . Just <$> us)])
    (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty) (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty)
    where mi, li :: Label -> CppHdrCode Doc
          mi :: String -> CppHdrCode Doc
mi = String -> CppHdrCode Doc
forall (r :: * -> *). ImportSym r => String -> r Doc
modImport
          li :: String -> CppHdrCode Doc
li = String -> CppHdrCode Doc
forall (r :: * -> *). ImportSym r => String -> r Doc
langImport

instance RenderMod CppHdrCode ModData where
  modFromData :: String -> FS Doc -> HdrState FileState ModData
modFromData String
n = String
-> (Doc -> CppHdrCode ModData)
-> FS Doc
-> HdrState FileState ModData
forall {k} (r :: k -> *) (mod :: k).
String -> (Doc -> r mod) -> FS Doc -> FS (r mod)
G.modFromData String
n (ModData -> CppHdrCode ModData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (ModData -> CppHdrCode ModData)
-> (Doc -> ModData) -> Doc -> CppHdrCode ModData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc -> ModData
md String
n)
  updateModuleDoc :: (Doc -> Doc) -> CppHdrCode ModData -> CppHdrCode ModData
updateModuleDoc Doc -> Doc
f = (ModData -> ModData) -> CppHdrCode ModData -> CppHdrCode ModData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue ((Doc -> Doc) -> ModData -> ModData
updateMod Doc -> Doc
f)

instance ModuleElim CppHdrCode ModData where
  module' :: CppHdrCode ModData -> Doc
module' = ModData -> Doc
modDoc (ModData -> Doc)
-> (CppHdrCode ModData -> ModData) -> CppHdrCode ModData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode ModData -> ModData
forall a. CppHdrCode a -> a
unCPPHC

instance BlockCommentSym CppHdrCode where
  blockComment :: [String] -> CppHdrCode Doc
blockComment [String]
lns = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ [String] -> Doc -> Doc -> Doc
R.blockCmt [String]
lns Doc
blockCmtStart Doc
blockCmtEnd
  docComment :: forall a. State a [String] -> State a (CppHdrCode Doc)
docComment = ([String] -> CppHdrCode Doc)
-> State a [String] -> State a (CppHdrCode Doc)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (\[String]
lns -> Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode Doc) -> Doc -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ [String] -> Doc -> Doc -> Doc
R.docCmt [String]
lns Doc
docCmtStart
    Doc
blockCmtEnd)

instance BlockCommentElim CppHdrCode where
  blockComment' :: CppHdrCode Doc -> Doc
blockComment' = CppHdrCode Doc -> Doc
forall a. CppHdrCode a -> a
unCPPHC

-- helpers
isDtor :: Label -> Bool
isDtor :: String -> Bool
isDtor (Char
'~':String
_) = Bool
True
isDtor String
_ = Bool
False

getParam
  :: (ParameterSym r param var, TypeElim r typ, VariableElim r var typ)
  => VS (r var) -> MS (r param)
getParam :: forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
VS (r var) -> MS (r param)
getParam VS (r var)
v = LensLike'
  (Zoomed (StateT ValueState Identity) (r var))
  MethodState
  ValueState
-> VS (r var) -> StateT MethodState Identity (r var)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (r var))
  MethodState
  ValueState
(ValueState -> Focusing Identity (r var) ValueState)
-> MethodState -> Focusing Identity (r var) MethodState
Lens' MethodState ValueState
lensMStoVS VS (r var)
v StateT MethodState Identity (r var)
-> (r var -> StateT MethodState Identity (r param))
-> StateT MethodState Identity (r param)
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\r var
v' -> CodeType -> VS (r var) -> StateT MethodState Identity (r param)
forall {k} {r :: k -> *} {param :: k} {var :: k}.
ParameterSym r param var =>
CodeType -> VS (r var) -> MS (r param)
getParamFunc ((r typ -> CodeType
forall {k} (r :: k -> *) (typ :: k).
TypeElim r typ =>
r typ -> CodeType
getCodeType (r typ -> CodeType) -> (r var -> r typ) -> r var -> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  r var -> r typ
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType) r var
v') VS (r var)
v)
  where getParamFunc :: CodeType -> VS (r var) -> MS (r param)
getParamFunc (List CodeType
_) = VS (r var) -> MS (r param)
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
pointerParam
        getParamFunc (Object String
_) = VS (r var) -> MS (r param)
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
pointerParam
        getParamFunc CodeType
_ = VS (r var) -> MS (r param)
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
param

data MethodData = MthD {MethodData -> VisibilityTag
getMthdScp :: VisibilityTag, MethodData -> Doc
mthdDoc :: Doc}

mthd :: VisibilityTag -> Doc -> MethodData
mthd :: VisibilityTag -> Doc -> MethodData
mthd = VisibilityTag -> Doc -> MethodData
MthD

addAlgorithmImport :: MS a -> MS a
addAlgorithmImport :: forall a. MS a -> MS a
addAlgorithmImport MS a
v = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> MethodState -> MethodState
addLangImport String
algorithm)
  MS a
v

addAlgorithmImportVS :: VS a -> VS a
addAlgorithmImportVS :: forall a. VS a -> VS a
addAlgorithmImportVS VS a
v = do
  (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addLangImportVS String
algorithm)
  VS a
v

addFStreamImport :: a -> VS a
addFStreamImport :: forall a. a -> StateT ValueState Identity a
addFStreamImport = (ValueState -> ValueState) -> a -> State ValueState a
forall s a. (s -> s) -> a -> State s a
modifyReturn (String -> ValueState -> ValueState
addLangImportVS String
fstream)

addIOStreamImport :: VS a -> VS a
addIOStreamImport :: forall a. VS a -> VS a
addIOStreamImport VS a
v = do
  (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addLangImportVS String
iostream)
  VS a
v

addMathHImport :: VS a -> VS a
addMathHImport :: forall a. VS a -> VS a
addMathHImport VS a
v = do
  (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addLangImportVS String
mathh)
  VS a
v

addLimitsImport :: MS a -> MS a
addLimitsImport :: forall a. MS a -> MS a
addLimitsImport MS a
v = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> MethodState -> MethodState
addLangImport String
limits)
  MS a
v

addCAssertImport :: MS a -> MS a
addCAssertImport :: forall a. MS a -> MS a
addCAssertImport MS a
v = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> MethodState -> MethodState
addLangImport String
cassert)
  MS a
v

iterator :: VS (CppSrcCode TypeData) -> VS (CppSrcCode TypeData)
iterator :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
iterator State ValueState (CppSrcCode TypeData)
t = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addLangImportVS String
cppIterator)
    State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
cppIterType (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
listType State ValueState (CppSrcCode TypeData)
t

iterBegin :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
iterBegin :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
iterBegin VS (CppSrcCode Value)
v = VS (CppSrcCode Value)
v VS (CppSrcCode Value)
-> SrcState ValueState FuncData -> VS (CppSrcCode Value)
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
VS (r val) -> VS (r FuncData) -> VS (r val)
$. State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
cppIterBeginFunc (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
innerType (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ (CppSrcCode Value -> CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType VS (CppSrcCode Value)
v)

iterEnd :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
iterEnd :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
iterEnd VS (CppSrcCode Value)
v = VS (CppSrcCode Value)
v VS (CppSrcCode Value)
-> SrcState ValueState FuncData -> VS (CppSrcCode Value)
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
VS (r val) -> VS (r FuncData) -> VS (r val)
$. State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
cppIterEndFunc (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k).
TypeSym r typ =>
VS (r typ) -> VS (r typ)
innerType (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ (CppSrcCode Value -> CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType VS (CppSrcCode Value)
v)

arrayDecBase :: VS (CppSrcCode Variable) -> CppSrcCode ScopeData -> MS Doc
arrayDecBase :: SrcState ValueState Variable -> CppSrcCode ScopeData -> MS Doc
arrayDecBase SrcState ValueState Variable
vr CppSrcCode ScopeData
scp = do
  vr' <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
vr
  modify $ useVarName $ variableName vr'
  modify $ setVarScope (variableName vr') (scopeData scp)
  pure $ renderType (variableType vr') <+> RC.variable vr'

cppReferenceType :: (Monad r, TypeElim r TypeData, UnRepr r TypeData) =>
  VS (r TypeData) -> VS (r TypeData)
cppReferenceType :: forall (r :: * -> *).
(Monad r, TypeElim r TypeData, UnRepr r TypeData) =>
VS (r TypeData) -> VS (r TypeData)
cppReferenceType VS (r TypeData)
t = do
    t' <- VS (r TypeData)
t
    typeFromData (Reference (getCodeType t')) (getTypeString t' P.<> cppDeref') (renderType t' <> cppDeref)

-- convenience
cppName, cppVersion :: String
cppName :: String
cppName = String
"C++"
cppVersion :: String
cppVersion = String
"gcc 10.1"

guard, inc, ifndef, define, defineSuffix, endif, using, namespace, cppPtr,
  cppDeref, streamL, streamR, cppLambdaDec, catchAll, cppPi,
  ptrAccess' :: Doc
guard :: Doc
guard = String -> Doc
text String
"#"
inc :: Doc
inc = Doc
guard Doc -> Doc -> Doc
<> String -> Doc
text String
"include"
ifndef :: Doc
ifndef = Doc
guard Doc -> Doc -> Doc
<> String -> Doc
text String
"ifndef"
define :: Doc
define = Doc
guard Doc -> Doc -> Doc
<> String -> Doc
text String
"define"
defineSuffix :: Doc
defineSuffix = String -> Doc
text String
"_h"
endif :: Doc
endif = Doc
guard Doc -> Doc -> Doc
<> String -> Doc
text String
"endif"
using :: Doc
using = String -> Doc
text String
"using"
namespace :: Doc
namespace = String -> Doc
text String
"namespace"
cppPtr :: Doc
cppPtr = String -> Doc
text String
"&"
cppDeref :: Doc
cppDeref = String -> Doc
text String
cppDeref'
streamL :: Doc
streamL = String -> Doc
text String
"<<"
streamR :: Doc
streamR = String -> Doc
text String
">>"
cppLambdaDec :: Doc
cppLambdaDec = String -> Doc
text String
"[]"
catchAll :: Doc
catchAll = String -> Doc
text String
"..."
cppPi :: Doc
cppPi = String -> Doc
text String
"M_PI"
ptrAccess' :: Doc
ptrAccess' = String -> Doc
text String
ptrAccess

nmSpc, ptrAccess, cppFor, std, algorithm, cppString, vector, sstream, stringstream,
  fstream, iostream, limits, mathh, cassert, cppBool, cppInfile, cppOutfile,
  cppIterator, cppOpen, stod, stof, cppIgnore, numLimits, streamsize, max,
  endl, cin, cout, cppIndex, cppListAccess, cppListAdd, cppListRemove, cppListAppend,
  cppIterBegin, cppIterEnd, cppR, cppW, cppA, cppGetLine, cppClose, cppClear,
  cppStr, mathDefines, cppSet, cppIn, cppConst, cppDeref' :: String
nmSpc :: String
nmSpc = String
"::"
ptrAccess :: String
ptrAccess = String
"->"
cppFor :: String
cppFor = String
"for"
std :: String
std = String
"std"
algorithm :: String
algorithm = String
"algorithm"
cppString :: String
cppString = String
"string"
vector :: String
vector = String
"vector"
fstream :: String
fstream = String
"fstream"
iostream :: String
iostream = String
"iostream"
sstream :: String
sstream = String
"sstream"
stringstream :: String
stringstream = String -> String
stdAccess String
"stringstream"
limits :: String
limits = String
"limits"
mathh :: String
mathh = String
"math.h"
cassert :: String
cassert = String
"cassert"
cppBool :: String
cppBool = String
"bool"
cppInfile :: String
cppInfile = String
"ifstream"
cppOutfile :: String
cppOutfile = String
"ofstream"
cppIterator :: String
cppIterator = String
"iterator"
cppOpen :: String
cppOpen = String
"open"
stod :: String
stod = String -> String
stdAccess String
"stod"
stof :: String
stof = String -> String
stdAccess String
"stof"
cppIgnore :: String
cppIgnore = String
"ignore"
numLimits :: String
numLimits = String -> String
stdAccess String
"numeric_limits"
streamsize :: String
streamsize = String -> String
stdAccess String
"streamsize"
max :: String
max = String
"max"
endl :: String
endl = String -> String
stdAccess String
"endl"
cin :: String
cin = String -> String
stdAccess String
"cin"
cout :: String
cout = String -> String
stdAccess String
"cout"
cppIndex :: String
cppIndex= String
"find"
cppListAccess :: String
cppListAccess = String
"at"
cppListAdd :: String
cppListAdd = String
"insert"
cppListRemove :: String
cppListRemove = String
"erase"
cppListAppend :: String
cppListAppend = String
"push_back"
cppIterBegin :: String
cppIterBegin = String
"begin"
cppIterEnd :: String
cppIterEnd = String
"end"
cppR :: String
cppR = String -> String
stdAccess (String
fstream String -> String -> String
`nmSpcAccess` String
"in")
cppW :: String
cppW = String -> String
stdAccess (String
fstream String -> String -> String
`nmSpcAccess` String
"out")
cppA :: String
cppA = String -> String
stdAccess (String
fstream String -> String -> String
`nmSpcAccess` String
"app")
cppGetLine :: String
cppGetLine = String -> String
stdAccess String
"getline"
cppClose :: String
cppClose = String
"close"
cppClear :: String
cppClear = String
"clear"
cppStr :: String
cppStr = String
"str"
mathDefines :: String
mathDefines = String
"_USE_MATH_DEFINES"
cppSet :: String
cppSet = String
"set"
cppIn :: String
cppIn = String
":"
cppConst :: String
cppConst = String
"const"
cppDeref' :: String
cppDeref' = String
"*"

nmSpcAccess :: String -> String -> String
nmSpcAccess :: String -> String -> String
nmSpcAccess String
ns String
e = String
ns String -> String -> String
forall a. Semigroup a => a -> a -> a
P.<> String
nmSpc String -> String -> String
forall a. Semigroup a => a -> a -> a
P.<> String
e

nmSpcAccess' :: Doc -> Doc -> Doc
nmSpcAccess' :: Doc -> Doc -> Doc
nmSpcAccess' Doc
ns Doc
e = Doc
ns Doc -> Doc -> Doc
<> String -> Doc
text String
nmSpc Doc -> Doc -> Doc
<> Doc
e

stdAccess :: String -> String
stdAccess :: String -> String
stdAccess = String -> String -> String
nmSpcAccess String
std

stdAccess' :: Doc -> Doc
stdAccess' :: Doc -> Doc
stdAccess' = Doc -> Doc -> Doc
nmSpcAccess' (String -> Doc
text String
std)

mainDesc, argcDesc, argvDesc, mainReturnDesc :: String
mainDesc :: String
mainDesc = String
"Controls the flow of the program"
argcDesc :: String
argcDesc = String
"Number of command-line arguments"
argvDesc :: String
argvDesc = String
"List of command-line arguments"
mainReturnDesc :: String
mainReturnDesc = String
"exit code"

cppSqrtOp :: (Monad r) => VSOp r
cppSqrtOp :: forall (r :: * -> *). Monad r => VSOp r
cppSqrtOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.sqrt

cppAbsOp :: (Monad r) => VSOp r
cppAbsOp :: forall (r :: * -> *). Monad r => VSOp r
cppAbsOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.fabs

cppLogOp :: (Monad r) => VSOp r
cppLogOp :: forall (r :: * -> *). Monad r => VSOp r
cppLogOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.log10

cppLnOp :: (Monad r) => VSOp r
cppLnOp :: forall (r :: * -> *). Monad r => VSOp r
cppLnOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.log

cppExpOp :: (Monad r) => VSOp r
cppExpOp :: forall (r :: * -> *). Monad r => VSOp r
cppExpOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.exp

cppSinOp :: (Monad r) => VSOp r
cppSinOp :: forall (r :: * -> *). Monad r => VSOp r
cppSinOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.sin

cppCosOp :: (Monad r) => VSOp r
cppCosOp :: forall (r :: * -> *). Monad r => VSOp r
cppCosOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.cos

cppTanOp :: (Monad r) => VSOp r
cppTanOp :: forall (r :: * -> *). Monad r => VSOp r
cppTanOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.tan

cppAsinOp :: (Monad r) => VSOp r
cppAsinOp :: forall (r :: * -> *). Monad r => VSOp r
cppAsinOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.asin

cppAcosOp :: (Monad r) => VSOp r
cppAcosOp :: forall (r :: * -> *). Monad r => VSOp r
cppAcosOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.acos

cppAtanOp :: (Monad r) => VSOp r
cppAtanOp :: forall (r :: * -> *). Monad r => VSOp r
cppAtanOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.atan

cppFloorOp :: (Monad r) => VSOp r
cppFloorOp :: forall (r :: * -> *). Monad r => VSOp r
cppFloorOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.floor

cppCeilOp :: (Monad r) => VSOp r
cppCeilOp :: forall (r :: * -> *). Monad r => VSOp r
cppCeilOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath String
R.ceil

cppUnaryMath :: (Monad r) => String -> VSOp r
cppUnaryMath :: forall (r :: * -> *). Monad r => String -> VSOp r
cppUnaryMath = VS (r OpData) -> VS (r OpData)
forall a. VS a -> VS a
addMathHImport (VS (r OpData) -> VS (r OpData))
-> (String -> VS (r OpData)) -> String -> VS (r OpData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> VS (r OpData)
forall (r :: * -> *). Monad r => String -> VSOp r
unOpPrec

cppPowerOp :: (Monad r) => VSOp r
cppPowerOp :: forall (r :: * -> *). Monad r => VSOp r
cppPowerOp = String -> VSOp r
forall (r :: * -> *). Monad r => String -> VSOp r
powerPrec String
R.pow

getLineFunc
  :: VS (CppSrcCode Value) -> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
getLineFunc :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
getLineFunc VS (CppSrcCode Value)
f VS (CppSrcCode Value)
v = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
PosCall r val typ
funcApp String
cppGetLine State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
string [VS (CppSrcCode Value)
f, VS (CppSrcCode Value)
v]

getLine3ArgFunc :: VS (CppSrcCode Value) -> VS (CppSrcCode Value) -> Char ->
  VS (CppSrcCode Value)
getLine3ArgFunc :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> Char -> VS (CppSrcCode Value)
getLine3ArgFunc VS (CppSrcCode Value)
s VS (CppSrcCode Value)
v Char
d = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
PosCall r val typ
funcApp String
cppGetLine State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
string [VS (CppSrcCode Value)
s, VS (CppSrcCode Value)
v, Char -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Char -> VS (r val)
litChar Char
d]

clearFunc :: VS (CppSrcCode FuncData)
clearFunc :: SrcState ValueState FuncData
clearFunc = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> SrcState ValueState FuncData
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
String -> VS (r typ) -> [VS (r val)] -> VS (r FuncData)
func String
cppClear State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void []

strFunc
  :: VS (CppSrcCode Value) -> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
strFunc :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
strFunc VS (CppSrcCode Value)
v VS (CppSrcCode Value)
s = State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> String
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
InternalValueExp r var val typ =>
VS (r typ) -> VS (r val) -> String -> [VS (r val)] -> VS (r val)
objMethodCall State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
string VS (CppSrcCode Value)
v String
cppStr [VS (CppSrcCode Value)
s]

cppIndexFunc
  :: VS (CppSrcCode Value) -> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cppIndexFunc :: VS (CppSrcCode Value)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cppIndexFunc VS (CppSrcCode Value)
l VS (CppSrcCode Value)
v = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
PosCall r val typ
funcApp String
cppIndex State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
int [VS (CppSrcCode Value) -> VS (CppSrcCode Value)
iterBegin VS (CppSrcCode Value)
l, VS (CppSrcCode Value) -> VS (CppSrcCode Value)
iterEnd VS (CppSrcCode Value)
l, VS (CppSrcCode Value)
v]

cppIterBeginFunc :: VS (CppSrcCode TypeData) -> VS (CppSrcCode FuncData)
cppIterBeginFunc :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
cppIterBeginFunc State ValueState (CppSrcCode TypeData)
t = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> SrcState ValueState FuncData
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
String -> VS (r typ) -> [VS (r val)] -> VS (r FuncData)
func String
cppIterBegin (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
iterator State ValueState (CppSrcCode TypeData)
t) []

cppIterEndFunc :: VS (CppSrcCode TypeData) -> VS (CppSrcCode FuncData)
cppIterEndFunc :: State ValueState (CppSrcCode TypeData)
-> SrcState ValueState FuncData
cppIterEndFunc State ValueState (CppSrcCode TypeData)
t = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> SrcState ValueState FuncData
forall (r :: * -> *) val typ.
OOFunctionSym r val typ =>
String -> VS (r typ) -> [VS (r val)] -> VS (r FuncData)
func String
cppIterEnd (State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
iterator State ValueState (CppSrcCode TypeData)
t) []

cppListDecDef
  ::
    ( DeclStatement r bod stmt var scope val
    , RenderStatement r stmt
    , StatementElim r stmt
    )
  => ([r Value] -> Doc)
  -> VS (r var)
  -> r scope
  -> [VS (r Value)]
  -> MS (r stmt)
cppListDecDef :: forall (r :: * -> *) bod stmt var scope val.
(DeclStatement r bod stmt var scope val, RenderStatement r stmt,
 StatementElim r stmt) =>
([r Value] -> Doc)
-> VS (r var) -> r scope -> [VS (r Value)] -> MS (r stmt)
cppListDecDef [r Value] -> Doc
f VS (r var)
v r scope
scp [VS (r Value)]
vls = do
  vdc <- VS (r var) -> r scope -> MS (r stmt)
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
varDec VS (r var)
v r scope
scp
  vs <- zoom lensMStoVS $ sequence vls
  mkStmt (RC.statement vdc <> f vs)

cpphtop :: ModData -> Doc
cpphtop :: ModData -> Doc
cpphtop ModData
m = [Doc] -> Doc
vcat [
  Doc
ifndef Doc -> Doc -> Doc
<+> String -> Doc
text String
n Doc -> Doc -> Doc
<> Doc
defineSuffix,
  Doc
define Doc -> Doc -> Doc
<+> String -> Doc
text String
n Doc -> Doc -> Doc
<> Doc
defineSuffix]
  where n :: String
n = ModData -> String
name ModData
m

usingNameSpace :: Label -> Maybe Label -> Doc
usingNameSpace :: String -> Maybe String -> Doc
usingNameSpace String
n (Just String
m) = Doc
using Doc -> Doc -> Doc
<+> String -> Doc
text String
n Doc -> Doc -> Doc
<> Doc
colon Doc -> Doc -> Doc
<> Doc
colon Doc -> Doc -> Doc
<>
  String -> Doc
text String
m Doc -> Doc -> Doc
<> Doc
endStatement
usingNameSpace String
n Maybe String
Nothing = Doc
using Doc -> Doc -> Doc
<+> Doc
namespace Doc -> Doc -> Doc
<+> String -> Doc
text String
n Doc -> Doc -> Doc
<> Doc
endStatement

cppInherit :: Maybe Label -> Doc -> Doc
cppInherit :: Maybe String -> Doc -> Doc
cppInherit Maybe String
n Doc
pub = Doc -> (String -> Doc) -> Maybe String -> Doc
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Doc
empty ((Doc
colon Doc -> Doc -> Doc
<+> Doc
pub Doc -> Doc -> Doc
<+>) (Doc -> Doc) -> (String -> Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc
text) Maybe String
n

cppBoolType :: (Monad r) => VS (r TypeData)
cppBoolType :: forall (r :: * -> *). Monad r => VS (r TypeData)
cppBoolType = CodeType -> String -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> String -> Doc -> VS (r TypeData)
typeFromData CodeType
Boolean String
cppBool (String -> Doc
text String
cppBool)

cppInfileType :: (Monad r) => VS (r TypeData)
cppInfileType :: forall (r :: * -> *). Monad r => VS (r TypeData)
cppInfileType = do
  t <- CodeType -> String -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> String -> Doc -> VS (r TypeData)
typeFromData CodeType
InFile String
cppInfile (String -> Doc
text String
cppInfile)
  addFStreamImport t

argvType :: (Monad r) => VS (r TypeData)
argvType :: forall (r :: * -> *). Monad r => VS (r TypeData)
argvType = CodeType -> String -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> String -> Doc -> VS (r TypeData)
typeFromData (CodeType -> CodeType
Array CodeType
String) String
"const char**" (String -> Doc
text String
"const char**")

cppOutfileType :: (Monad r) => VS (r TypeData)
cppOutfileType :: forall (r :: * -> *). Monad r => VS (r TypeData)
cppOutfileType = do
  t <- CodeType -> String -> Doc -> VS (r TypeData)
forall (r :: * -> *).
Monad r =>
CodeType -> String -> Doc -> VS (r TypeData)
typeFromData CodeType
OutFile String
cppOutfile (String -> Doc
text String
cppOutfile)
  addFStreamImport t

cppIterType :: VS (CppSrcCode TypeData) -> VS (CppSrcCode TypeData)
cppIterType :: State ValueState (CppSrcCode TypeData)
-> State ValueState (CppSrcCode TypeData)
cppIterType State ValueState (CppSrcCode TypeData)
t' = do
  t <- State ValueState (CppSrcCode TypeData)
t'
  typeFromData (getCodeType t)
    (getTypeString t `nmSpcAccess` cppIterator) (stdAccess' (renderType t)
    `nmSpcAccess'` text cppIterator)

cppClassVarAccess :: Doc -> Doc -> Doc
cppClassVarAccess :: Doc -> Doc -> Doc
cppClassVarAccess Doc
c Doc
v = Doc
c Doc -> Doc -> Doc
`nmSpcAccess'` Doc
v

cppFuncType
  :: (Monad r, TypeElim r TypeData)
  => [VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
cppFuncType :: forall (r :: * -> *).
(Monad r, TypeElim r TypeData) =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
cppFuncType [VS (r TypeData)]
ps' VS (r TypeData)
r' =  do
  ps <- [VS (r TypeData)] -> StateT ValueState Identity [r TypeData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [VS (r TypeData)]
ps'
  r <- r'
  typeFromData (Func (getCodeType <$> ps) (getCodeType r)) "auto" (text "auto")

cppLambda :: [CppSrcCode BinderD] -> CppSrcCode Value -> Doc
cppLambda :: [CppSrcCode BinderD] -> CppSrcCode Value -> Doc
cppLambda [CppSrcCode BinderD]
ps CppSrcCode Value
ex = Doc
cppLambdaDec Doc -> Doc -> Doc
<+> Doc -> Doc
parens (Doc -> [Doc] -> Doc
hicat Doc
listSep' ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ (Doc -> Doc -> Doc) -> [Doc] -> [Doc] -> [Doc]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Doc -> Doc -> Doc
(<+>)
  (CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (CppSrcCode TypeData -> Doc)
-> (CppSrcCode BinderD -> CppSrcCode TypeData)
-> CppSrcCode BinderD
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode BinderD -> CppSrcCode TypeData
forall {k} (r :: k -> *) (binder :: k) (typ :: k).
BinderElim r binder typ =>
r binder -> r typ
binderType (CppSrcCode BinderD -> Doc) -> [CppSrcCode BinderD] -> [Doc]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [CppSrcCode BinderD]
ps) (CppSrcCode BinderD -> Doc
forall {k} (r :: k -> *) (binder :: k).
InternalBinderElim r binder =>
r binder -> Doc
RC.binderElim (CppSrcCode BinderD -> Doc) -> [CppSrcCode BinderD] -> [Doc]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [CppSrcCode BinderD]
ps)) Doc -> Doc -> Doc
<+>
  Doc
bodyStart Doc -> Doc -> Doc
<> Doc
returnLabel Doc -> Doc -> Doc
<+> CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
ex Doc -> Doc -> Doc
<> Doc
endStatement Doc -> Doc -> Doc
<> Doc
bodyEnd

stodFunc :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
stodFunc :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
stodFunc VS (CppSrcCode Value)
v = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
PosCall r val typ
funcApp String
stod State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
double [VS (CppSrcCode Value)
v]

stofFunc :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
stofFunc :: VS (CppSrcCode Value) -> VS (CppSrcCode Value)
stofFunc VS (CppSrcCode Value)
v = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
PosCall r val typ
funcApp String
stof State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
float [VS (CppSrcCode Value)
v]

ignoreFunc :: Char -> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
ignoreFunc :: Char -> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
ignoreFunc Char
sep VS (CppSrcCode Value)
inFn = State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> String
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
InternalValueExp r var val typ =>
VS (r typ) -> VS (r val) -> String -> [VS (r val)] -> VS (r val)
objMethodCall State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void VS (CppSrcCode Value)
inFn String
cppIgnore [VS (CppSrcCode Value)
maxFunc, Char -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (val :: k) (typ :: k).
Literal r val typ =>
Char -> VS (r val)
litChar Char
sep]

maxFunc :: VS (CppSrcCode Value)
maxFunc :: VS (CppSrcCode Value)
maxFunc = String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (binder :: k)
       (typ :: k).
ValueExpression r var val binder typ =>
PosCall r val typ
funcApp ((String
numLimits String -> String -> String
`containing` String
streamsize) String -> String -> String
`nmSpcAccess` String
max) State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
int []

cppCast
  :: VS (CppSrcCode TypeData) -> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cppCast :: State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
cppCast = StateT ValueState Identity (VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (StateT ValueState Identity (VS (CppSrcCode Value))
 -> VS (CppSrcCode Value))
-> (State ValueState (CppSrcCode TypeData)
    -> VS (CppSrcCode Value)
    -> StateT ValueState Identity (VS (CppSrcCode Value)))
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> VS (CppSrcCode Value)
forall c d a b. (c -> d) -> (a -> b -> c) -> a -> b -> d
.: (CppSrcCode TypeData -> CppSrcCode Value -> VS (CppSrcCode Value))
-> State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> StateT ValueState Identity (VS (CppSrcCode Value))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues (\CppSrcCode TypeData
t CppSrcCode Value
v -> CodeType
-> CodeType
-> CppSrcCode TypeData
-> CppSrcCode Value
-> VS (CppSrcCode Value)
cppCast' (CppSrcCode TypeData -> CodeType
forall {k} (r :: k -> *) (typ :: k).
TypeElim r typ =>
r typ -> CodeType
getCodeType CppSrcCode TypeData
t) (CppSrcCode TypeData -> CodeType
forall {k} (r :: k -> *) (typ :: k).
TypeElim r typ =>
r typ -> CodeType
getCodeType (CppSrcCode TypeData -> CodeType)
-> CppSrcCode TypeData -> CodeType
forall a b. (a -> b) -> a -> b
$
  CppSrcCode Value -> CppSrcCode TypeData
forall {k} (r :: k -> *) (val :: k) (typ :: k).
ValueSym r val typ =>
r val -> r typ
valueType CppSrcCode Value
v) CppSrcCode TypeData
t CppSrcCode Value
v)
  where cppCast' :: CodeType
-> CodeType
-> CppSrcCode TypeData
-> CppSrcCode Value
-> VS (CppSrcCode Value)
cppCast' CodeType
Double CodeType
String CppSrcCode TypeData
_ CppSrcCode Value
v = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
stodFunc (CppSrcCode Value -> VS (CppSrcCode Value)
forall a s. a -> State s a
toState CppSrcCode Value
v)
        cppCast' CodeType
Float CodeType
String CppSrcCode TypeData
_ CppSrcCode Value
v = VS (CppSrcCode Value) -> VS (CppSrcCode Value)
stofFunc (CppSrcCode Value -> VS (CppSrcCode Value)
forall a s. a -> State s a
toState CppSrcCode Value
v)
        cppCast' CodeType
_ CodeType
_ CppSrcCode TypeData
t CppSrcCode Value
v = State ValueState (CppSrcCode TypeData)
-> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal (CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall a s. a -> State s a
toState CppSrcCode TypeData
t) (Doc -> Doc -> Doc
R.castObj
          (Doc -> Doc
R.cast (CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
t)) (CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
v))

cppListDecDoc :: (ValueElim r val) => r val -> Doc
cppListDecDoc :: forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
cppListDecDoc r val
n = Doc -> Doc
parens (r val -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value r val
n)

cppListDecDefDoc :: (ValueElim r val) => [r val] -> Doc
cppListDecDefDoc :: forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
[r val] -> Doc
cppListDecDefDoc [r val]
vs = Doc -> Doc
braces ([r val] -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
[r val] -> Doc
valueList [r val]
vs)

cppFuncDecDef
  :: VS (CppSrcCode Variable)
  -> CppSrcCode ScopeData
  -> [VS (CppSrcCode Variable)]
  -> MS (CppSrcCode Body)
  -> MS (CppSrcCode Statement)
cppFuncDecDef :: SrcState ValueState Variable
-> CppSrcCode ScopeData
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> SrcState MethodState Statement
cppFuncDecDef SrcState ValueState Variable
v CppSrcCode ScopeData
scp [SrcState ValueState Variable]
ps SrcState MethodState Doc
bod = do
  vr <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
v
  modify $ useVarName $ variableName vr
  modify $ setVarScope (variableName vr) (scopeData scp)
  pms <- mapM (zoom lensMStoVS) ps
  b <- bod
  mkStmt $ renderType (variableType vr) <+> RC.variable vr <+> equals <+>
    cppLambdaDec <+> parens (hicat listSep' $ zipWith (<+>) (renderType .
    variableType <$> pms) (RC.variable <$> pms)) <+>  bodyStart $$
    indent (RC.body b) $$ bodyEnd

cppPrint
  :: (RenderStatement r stmt, ValueElim r val)
  => Bool -> VS (r val) -> VS (r val) -> MS (r stmt)
cppPrint :: forall {k} (r :: k -> *) (stmt :: k) (val :: k).
(RenderStatement r stmt, ValueElim r val) =>
Bool -> VS (r val) -> VS (r val) -> MS (r stmt)
cppPrint Bool
newLn VS (r val)
pf VS (r val)
vl = do
  e <- LensLike'
  (Zoomed (StateT ValueState Identity) Doc) MethodState ValueState
-> StateT ValueState Identity Doc -> MS Doc
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) Doc) MethodState ValueState
(ValueState -> Focusing Identity Doc ValueState)
-> MethodState -> Focusing Identity Doc MethodState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity Doc
end
  printFn <- zoom lensMStoVS pf
  v <- zoom lensMStoVS vl
  mkStmt $ RC.value printFn <+> streamL <+> pars v (RC.value v) <+> e
  where pars :: r val -> Doc -> Doc
pars r val
v = if (Int -> Bool) -> Maybe Int -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
any (Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
9) (r val -> Maybe Int
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Maybe Int
valuePrec r val
v) then Doc -> Doc
parens else Doc -> Doc
forall a. a -> a
id
        end :: StateT ValueState Identity Doc
end = if Bool
newLn then StateT ValueState Identity Doc -> StateT ValueState Identity Doc
forall a. VS a -> VS a
addIOStreamImport (Doc -> StateT ValueState Identity Doc
forall a. a -> StateT ValueState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Doc -> StateT ValueState Identity Doc)
-> Doc -> StateT ValueState Identity Doc
forall a b. (a -> b) -> a -> b
$ Doc
streamL Doc -> Doc -> Doc
<+> String -> Doc
text String
endl)
          else Doc -> StateT ValueState Identity Doc
forall a. a -> StateT ValueState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty

cppThrowDoc :: (ValueElim r val) => r val -> Doc
cppThrowDoc :: forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
cppThrowDoc r val
errMsg = Doc
throwLabel Doc -> Doc -> Doc
<> Doc -> Doc
parens (r val -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value r val
errMsg)

cppTryCatch :: (BodyElim r bod) => r bod -> r bod -> Doc
cppTryCatch :: forall {k} (r :: k -> *) (bod :: k).
BodyElim r bod =>
r bod -> r bod -> Doc
cppTryCatch r bod
tb r bod
cb = [Doc] -> Doc
vcat [
  Doc
tryLabel Doc -> Doc -> Doc
<+> Doc
lbrace,
  Doc -> Doc
indent (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ r bod -> Doc
forall {k} (r :: k -> *) (bod :: k). BodyElim r bod => r bod -> Doc
RC.body r bod
tb,
  Doc
rbrace Doc -> Doc -> Doc
<+> Doc
catchLabel Doc -> Doc -> Doc
<+> Doc -> Doc
parens Doc
catchAll Doc -> Doc -> Doc
<+> Doc
lbrace,
  Doc -> Doc
indent (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ r bod -> Doc
forall {k} (r :: k -> *) (bod :: k). BodyElim r bod => r bod -> Doc
RC.body r bod
cb,
  Doc
rbrace]

cppAssert :: (ValueElim r val) => r val -> r val -> Doc
cppAssert :: forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> r val -> Doc
cppAssert r val
condition r val
errorMessage = [Doc] -> Doc
vcat [
  String -> Doc
text String
"assert(" Doc -> Doc -> Doc
<> r val -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value r val
condition Doc -> Doc -> Doc
<+> String -> Doc
text String
"&&" Doc -> Doc -> Doc
<+> r val -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value r val
errorMessage Doc -> Doc -> Doc
<> String -> Doc
text String
")" Doc -> Doc -> Doc
<> Doc
semi
  ]

cppDiscardInput
  :: Char -> VS (CppSrcCode Value) -> MS (CppSrcCode Statement)
cppDiscardInput :: Char -> VS (CppSrcCode Value) -> SrcState MethodState Statement
cppDiscardInput Char
sep VS (CppSrcCode Value)
inFn = VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ValueStatement r stmt val =>
VS (r val) -> MS (r stmt)
valStmt (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ Char -> VS (CppSrcCode Value) -> VS (CppSrcCode Value)
ignoreFunc Char
sep VS (CppSrcCode Value)
inFn

cppInput
  :: VS (CppSrcCode Variable)
  -> VS (CppSrcCode Value)
  -> MS (CppSrcCode Statement)
cppInput :: SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
cppInput SrcState ValueState Variable
vr VS (CppSrcCode Value)
i = SrcState MethodState Statement -> SrcState MethodState Statement
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState Statement -> SrcState MethodState Statement)
-> SrcState MethodState Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ SrcState MethodState Statement -> SrcState MethodState Statement
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState Statement -> SrcState MethodState Statement)
-> SrcState MethodState Statement -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ do
  v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
vr
  inFn <- zoom lensMStoVS i
  multi [mkStmt (RC.value inFn <+> streamR <+> RC.variable v),
    valStmt $ ignoreFunc '\n' i]

cppOpenFile
  ::  Label
  -> VS (CppSrcCode Variable)
  -> VS (CppSrcCode Value)
  -> MS (CppSrcCode Statement)
cppOpenFile :: String
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Statement
cppOpenFile String
mode SrcState ValueState Variable
f VS (CppSrcCode Value)
n = VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ValueStatement r stmt val =>
VS (r val) -> MS (r stmt)
valStmt (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ State ValueState (CppSrcCode TypeData)
-> VS (CppSrcCode Value)
-> String
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
InternalValueExp r var val typ =>
VS (r typ) -> VS (r val) -> String -> [VS (r val)] -> VS (r val)
objMethodCall State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void (SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf SrcState ValueState Variable
f) String
cppOpen [VS (CppSrcCode Value)
n,
  State ValueState (CppSrcCode TypeData)
-> Doc -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
RenderValue r var val typ =>
VS (r typ) -> Doc -> VS (r val)
mkStateVal State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void (Doc -> VS (CppSrcCode Value)) -> Doc -> VS (CppSrcCode Value)
forall a b. (a -> b) -> a -> b
$ String -> Doc
text String
mode]

cppPointerParamDoc
  :: (InternalVarElim r var, UnRepr r TypeData, VariableElim r var TypeData)
  => r var -> Doc
cppPointerParamDoc :: forall (r :: * -> *) var.
(InternalVarElim r var, UnRepr r TypeData,
 VariableElim r var TypeData) =>
r var -> Doc
cppPointerParamDoc r var
v = r TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType (r var -> r TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType r var
v) Doc -> Doc -> Doc
<+> Doc
cppPtr Doc -> Doc -> Doc
<> r var -> Doc
forall {k} (r :: k -> *) (var :: k).
InternalVarElim r var =>
r var -> Doc
RC.variable r var
v

cppsMethod :: [Doc] -> Label -> Label -> CppSrcCode TypeData
  -> [CppSrcCode ParamData] -> CppSrcCode Body -> Doc
cppsMethod :: [Doc]
-> String
-> String
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsMethod [Doc]
is String
n String
c CppSrcCode TypeData
t [CppSrcCode ParamData]
ps CppSrcCode Doc
b = Doc -> Doc -> Doc
emptyIfEmpty (CppSrcCode Doc -> Doc
forall {k} (r :: k -> *) (bod :: k). BodyElim r bod => r bod -> Doc
RC.body CppSrcCode Doc
b Doc -> Doc -> Doc
<> Doc
initList) (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$
  [Doc] -> Doc
vcat [Doc
ttype Doc -> Doc -> Doc
<+> String -> Doc
text (String
c String -> String -> String
`nmSpcAccess` String
n) Doc -> Doc -> Doc
<> Doc -> Doc
parens ([CppSrcCode ParamData] -> Doc
forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
[r param] -> Doc
parameterList
    [CppSrcCode ParamData]
ps) Doc -> Doc -> Doc
<+> Doc -> Doc -> Doc
emptyIfEmpty Doc
initList (Doc
colon Doc -> Doc -> Doc
<+> Doc
initList) Doc -> Doc -> Doc
<+> Doc
bodyStart,
  Doc -> Doc
indent (CppSrcCode Doc -> Doc
forall {k} (r :: k -> *) (bod :: k). BodyElim r bod => r bod -> Doc
RC.body CppSrcCode Doc
b),
  Doc
bodyEnd]
  where ttype :: Doc
ttype | String -> Bool
isDtor String
n = Doc
empty
              | Bool
otherwise = CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
t
        initList :: Doc
initList = Doc -> [Doc] -> Doc
hicat Doc
listSep' [Doc]
is

cppConstructor
  :: [MS (CppSrcCode ParamData)]
  -> NamedArgs CppSrcCode Variable Value
  -> MS (CppSrcCode Body)
  -> MS (CppSrcCode MethodData)
cppConstructor :: [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppConstructor [SrcState MethodState ParamData]
ps [(SrcState ValueState Variable, VS (CppSrcCode Value))]
is SrcState MethodState Doc
b = StateT MethodState Identity String
getClassName StateT MethodState Identity String
-> (String -> SrcState MethodState MethodData)
-> SrcState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> (a -> StateT MethodState Identity b)
-> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\String
n -> StateT MethodState Identity (SrcState MethodState MethodData)
-> SrcState MethodState MethodData
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (StateT MethodState Identity (SrcState MethodState MethodData)
 -> SrcState MethodState MethodData)
-> StateT MethodState Identity (SrcState MethodState MethodData)
-> SrcState MethodState MethodData
forall a b. (a -> b) -> a -> b
$ (\CppSrcCode TypeData
tp [CppSrcCode ParamData]
pms [CppSrcCode Variable]
ivars [CppSrcCode Value]
ivals
  CppSrcCode Doc
bod -> if [(SrcState ValueState Variable, VS (CppSrcCode Value))] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(SrcState ValueState Variable, VS (CppSrcCode Value))]
is then String
-> [SrcState MethodState ParamData]
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
forall (r :: * -> *) file mod cls stvr mthd attch vis param bod
       block stmt var scope val binder typ.
OORenderSym
  r
  file
  mod
  cls
  stvr
  mthd
  attch
  vis
  param
  bod
  block
  stmt
  var
  scope
  val
  binder
  typ =>
String
-> [MS (r param)]
-> Initializers r var val
-> MS (r bod)
-> MS (r mthd)
CP.constructor String
n [SrcState MethodState ParamData]
ps [(SrcState ValueState Variable, VS (CppSrcCode Value))]
is SrcState MethodState Doc
b else (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (VisibilityTag -> MethodState -> MethodState
setVisibility VisibilityTag
Pub) StateT MethodState Identity ()
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall a b.
StateT MethodState Identity a
-> StateT MethodState Identity b -> StateT MethodState Identity b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
  CppSrcCode MethodData -> SrcState MethodState MethodData
forall a s. a -> State s a
toState (MethodData -> CppSrcCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppSrcCode MethodData)
-> MethodData -> CppSrcCode MethodData
forall a b. (a -> b) -> a -> b
$ VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
Pub ([Doc]
-> String
-> String
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsMethod ((CppSrcCode Variable -> CppSrcCode Value -> Doc)
-> [CppSrcCode Variable] -> [CppSrcCode Value] -> [Doc]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\CppSrcCode Variable
ivar CppSrcCode Value
ival -> CppSrcCode Variable -> Doc
forall {k} (r :: k -> *) (var :: k).
InternalVarElim r var =>
r var -> Doc
RC.variable
  CppSrcCode Variable
ivar Doc -> Doc -> Doc
<> Doc -> Doc
parens (CppSrcCode Value -> Doc
forall {k} (r :: k -> *) (val :: k).
ValueElim r val =>
r val -> Doc
RC.value CppSrcCode Value
ival)) [CppSrcCode Variable]
ivars [CppSrcCode Value]
ivals) String
n String
n CppSrcCode TypeData
tp [CppSrcCode ParamData]
pms CppSrcCode Doc
bod))) (CppSrcCode TypeData
 -> [CppSrcCode ParamData]
 -> [CppSrcCode Variable]
 -> [CppSrcCode Value]
 -> CppSrcCode Doc
 -> SrcState MethodState MethodData)
-> SrcState MethodState TypeData
-> StateT
     MethodState
     Identity
     ([CppSrcCode ParamData]
      -> [CppSrcCode Variable]
      -> [CppSrcCode Value]
      -> CppSrcCode Doc
      -> SrcState MethodState MethodData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> SrcState MethodState TypeData
forall {k} (r :: k -> *) (typ :: k).
OOMethodTypeSym r typ =>
String -> MS (r typ)
construct
  String
n StateT
  MethodState
  Identity
  ([CppSrcCode ParamData]
   -> [CppSrcCode Variable]
   -> [CppSrcCode Value]
   -> CppSrcCode Doc
   -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode ParamData]
-> StateT
     MethodState
     Identity
     ([CppSrcCode Variable]
      -> [CppSrcCode Value]
      -> CppSrcCode Doc
      -> SrcState MethodState MethodData)
forall a b.
StateT MethodState Identity (a -> b)
-> StateT MethodState Identity a -> StateT MethodState Identity b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [SrcState MethodState ParamData]
-> StateT MethodState Identity [CppSrcCode ParamData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [SrcState MethodState ParamData]
ps StateT
  MethodState
  Identity
  ([CppSrcCode Variable]
   -> [CppSrcCode Value]
   -> CppSrcCode Doc
   -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode Variable]
-> StateT
     MethodState
     Identity
     ([CppSrcCode Value]
      -> CppSrcCode Doc -> SrcState MethodState MethodData)
forall a b.
StateT MethodState Identity (a -> b)
-> StateT MethodState Identity a -> StateT MethodState Identity b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((SrcState ValueState Variable, VS (CppSrcCode Value))
 -> StateT MethodState Identity (CppSrcCode Variable))
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> StateT MethodState Identity [CppSrcCode Variable]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS (SrcState ValueState Variable
 -> StateT MethodState Identity (CppSrcCode Variable))
-> ((SrcState ValueState Variable, VS (CppSrcCode Value))
    -> SrcState ValueState Variable)
-> (SrcState ValueState Variable, VS (CppSrcCode Value))
-> StateT MethodState Identity (CppSrcCode Variable)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SrcState ValueState Variable, VS (CppSrcCode Value))
-> SrcState ValueState Variable
forall a b. (a, b) -> a
fst) [(SrcState ValueState Variable, VS (CppSrcCode Value))]
is StateT
  MethodState
  Identity
  ([CppSrcCode Value]
   -> CppSrcCode Doc -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode Value]
-> StateT
     MethodState
     Identity
     (CppSrcCode Doc -> SrcState MethodState MethodData)
forall a b.
StateT MethodState Identity (a -> b)
-> StateT MethodState Identity a -> StateT MethodState Identity b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((SrcState ValueState Variable, VS (CppSrcCode Value))
 -> StateT MethodState Identity (CppSrcCode Value))
-> [(SrcState ValueState Variable, VS (CppSrcCode Value))]
-> StateT MethodState Identity [CppSrcCode Value]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
-> VS (CppSrcCode Value)
-> StateT MethodState Identity (CppSrcCode Value)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom
  LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Value))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Value) ValueState)
-> MethodState -> Focusing Identity (CppSrcCode Value) MethodState
Lens' MethodState ValueState
lensMStoVS (VS (CppSrcCode Value)
 -> StateT MethodState Identity (CppSrcCode Value))
-> ((SrcState ValueState Variable, VS (CppSrcCode Value))
    -> VS (CppSrcCode Value))
-> (SrcState ValueState Variable, VS (CppSrcCode Value))
-> StateT MethodState Identity (CppSrcCode Value)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SrcState ValueState Variable, VS (CppSrcCode Value))
-> VS (CppSrcCode Value)
forall a b. (a, b) -> b
snd) [(SrcState ValueState Variable, VS (CppSrcCode Value))]
is StateT
  MethodState
  Identity
  (CppSrcCode Doc -> SrcState MethodState MethodData)
-> SrcState MethodState Doc
-> StateT MethodState Identity (SrcState MethodState MethodData)
forall a b.
StateT MethodState Identity (a -> b)
-> StateT MethodState Identity a -> StateT MethodState Identity b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> SrcState MethodState Doc
b)

cppsFunction :: Label -> CppSrcCode TypeData ->
  [CppSrcCode ParamData] -> CppSrcCode Body -> Doc
cppsFunction :: String
-> CppSrcCode TypeData
-> [CppSrcCode ParamData]
-> CppSrcCode Doc
-> Doc
cppsFunction String
n CppSrcCode TypeData
t [CppSrcCode ParamData]
ps CppSrcCode Doc
b = [Doc] -> Doc
vcat [
  CppSrcCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppSrcCode TypeData
t Doc -> Doc -> Doc
<+> String -> Doc
text String
n Doc -> Doc -> Doc
<> Doc -> Doc
parens ([CppSrcCode ParamData] -> Doc
forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
[r param] -> Doc
parameterList [CppSrcCode ParamData]
ps) Doc -> Doc -> Doc
<+> Doc
bodyStart,
  Doc -> Doc
indent (CppSrcCode Doc -> Doc
forall {k} (r :: k -> *) (bod :: k). BodyElim r bod => r bod -> Doc
RC.body CppSrcCode Doc
b),
  Doc
bodyEnd]

cppsIntFunc
  :: (CppSrcCode TypeData -> [CppSrcCode ParamData] -> CppSrcCode Body -> Doc)
  -> CppSrcCode (Doc, VisibilityTag)
  -> MS (CppSrcCode TypeData)
  -> [MS (CppSrcCode ParamData)]
  -> MS (CppSrcCode Body)
  -> MS (CppSrcCode MethodData)
cppsIntFunc :: (CppSrcCode TypeData
 -> [CppSrcCode ParamData] -> CppSrcCode Doc -> Doc)
-> CppSrcCode (Doc, VisibilityTag)
-> SrcState MethodState TypeData
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> SrcState MethodState MethodData
cppsIntFunc CppSrcCode TypeData
-> [CppSrcCode ParamData] -> CppSrcCode Doc -> Doc
f CppSrcCode (Doc, VisibilityTag)
s SrcState MethodState TypeData
t [SrcState MethodState ParamData]
ps SrcState MethodState Doc
b = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (VisibilityTag -> MethodState -> MethodState
setVisibility ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppSrcCode a -> a
unCPPSC CppSrcCode (Doc, VisibilityTag)
s))
  tp <- SrcState MethodState TypeData
t
  pms <- sequence ps
  toCode . mthd (snd $ unCPPSC s) . f tp pms <$> b

cpphIntFunc
  :: Label
  -> CppHdrCode (Doc, VisibilityTag)
  -> CppHdrCode attch
  -> MS (CppHdrCode TypeData)
  -> [MS (CppHdrCode ParamData)]
  -> MS (CppHdrCode Body)
  -> MS (CppHdrCode MethodData)
cpphIntFunc :: forall attch.
String
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode attch
-> HdrState MethodState TypeData
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> HdrState MethodState MethodData
cpphIntFunc String
n CppHdrCode (Doc, VisibilityTag)
s CppHdrCode attch
_ HdrState MethodState TypeData
t [HdrState MethodState ParamData]
ps HdrState MethodState Doc
_ = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (VisibilityTag -> MethodState -> MethodState
setVisibility ((Doc, VisibilityTag) -> VisibilityTag
forall a b. (a, b) -> b
snd ((Doc, VisibilityTag) -> VisibilityTag)
-> (Doc, VisibilityTag) -> VisibilityTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, VisibilityTag) -> (Doc, VisibilityTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, VisibilityTag)
s))
    tp <- HdrState MethodState TypeData
t
    pms <- sequence ps
    pure $ toCode $ mthd (snd $ unCPPHC s) $ cpphFunc n tp pms

cpphFunc
  :: (ParamElim r param typ)
  => Label -> CppHdrCode TypeData -> [r param] -> Doc
cpphFunc :: forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
String -> CppHdrCode TypeData -> [r param] -> Doc
cpphFunc String
n CppHdrCode TypeData
t [r param]
ps = (if String -> Bool
isDtor String
n then Doc
empty else CppHdrCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppHdrCode TypeData
t) Doc -> Doc -> Doc
<+>
  String -> Doc
text String
n Doc -> Doc -> Doc
<> Doc -> Doc
parens ([r param] -> Doc
forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
[r param] -> Doc
parameterList [r param]
ps) Doc -> Doc -> Doc
<> Doc
endStatement

cpphMethod :: Label -> CppHdrCode TypeData ->
  CppHdrCode AttachmentData -> [CppHdrCode ParamData] -> Doc
cpphMethod :: String
-> CppHdrCode TypeData
-> CppHdrCode AttachmentData
-> [CppHdrCode ParamData]
-> Doc
cpphMethod String
n CppHdrCode TypeData
t CppHdrCode AttachmentData
a [CppHdrCode ParamData]
ps = let attchDoc :: Doc
attchDoc = CppHdrCode AttachmentData -> Doc
forall {k} (r :: k -> *) (attch :: k).
PermElim r attch =>
r attch -> Doc
RC.perm CppHdrCode AttachmentData
a
  in Doc
attchDoc Doc -> Doc -> Doc
<+> (if String -> Bool
isDtor String
n then Doc
empty else CppHdrCode TypeData -> Doc
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> Doc
renderType CppHdrCode TypeData
t) Doc -> Doc -> Doc
<+> String -> Doc
text String
n
    Doc -> Doc -> Doc
<> Doc -> Doc
parens ([CppHdrCode ParamData] -> Doc
forall {k} (r :: k -> *) (param :: k) (typ :: k).
ParamElim r param typ =>
[r param] -> Doc
parameterList [CppHdrCode ParamData]
ps) Doc -> Doc -> Doc
<> Doc
endStatement

cppCommentedFunc
  :: (BlockCommentElim r, Monad r)
  => FileType -> MS (r Doc) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc :: forall (r :: * -> *).
(BlockCommentElim r, Monad r) =>
FileType -> MS (r Doc) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc FileType
ft MS (r Doc)
cmt MS (r MethodData)
fn = do
  f <- MS (r MethodData)
fn
  mn <- getCurrMainFunc
  scp <- getVisibility
  cmnt <- cmt
  let cf = r MethodData -> MS (r MethodData)
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((MethodData -> MethodData) -> r MethodData -> r MethodData
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (VisibilityTag -> Doc -> MethodData
mthd VisibilityTag
scp (Doc -> MethodData)
-> (MethodData -> Doc) -> MethodData -> MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> Doc -> Doc
R.commentedItem
        (r Doc -> Doc
forall (r :: * -> *). BlockCommentElim r => r Doc -> Doc
RC.blockComment' r Doc
cmnt) (Doc -> Doc) -> (MethodData -> Doc) -> MethodData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MethodData -> Doc
mthdDoc) r MethodData
f)
      ret FileType
Source = if Bool
mn then MS (r MethodData)
cf else r MethodData -> MS (r MethodData)
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure r MethodData
f
      ret FileType
Header = if Bool
mn then r MethodData -> MS (r MethodData)
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure r MethodData
f else MS (r MethodData)
cf
      ret FileType
Combined = String -> MS (r MethodData)
forall a. HasCallStack => String -> a
error String
"Combined passed to cppCommentedFunc"
  ret ft

cppsStateVarDef
  :: Doc
  -> CppSrcCode (Doc, VisibilityTag)
  -> CppSrcCode AttachmentData
  -> VS (CppSrcCode Variable)
  -> VS (CppSrcCode Value)
  -> CSStateVar CppSrcCode StateVarData
cppsStateVarDef :: Doc
-> CppSrcCode (Doc, VisibilityTag)
-> CppSrcCode AttachmentData
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState ClassState StateVarData
cppsStateVarDef Doc
cns CppSrcCode (Doc, VisibilityTag)
s CppSrcCode AttachmentData
p SrcState ValueState Variable
vr' VS (CppSrcCode Value)
vl' = do
  vr <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  ClassState
  ValueState
-> SrcState ValueState Variable
-> StateT ClassState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) ClassState ValueState
-> StateT ValueState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  ClassState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> ClassState -> Focusing Identity (CppSrcCode Variable) ClassState
Lens' ClassState ValueState
lensCStoVS SrcState ValueState Variable
vr'
  vl <- zoom lensCStoVS vl'
  n <- zoom lensCStoMS getClassName
  pure $ on2CodeValues svd (onCodeValue snd s)
    (toCode $ onAttachment (binding p) (cns <+> renderType (variableType vr) <+>
      text n `nmSpcAccess'` RC.variable vr <+> equals <+> RC.value vl <>
      endStatement) empty)

cppForEach
  :: Doc
  -> Doc
  -> Doc
  -> Doc
  -> VS (CppSrcCode Variable)
  -> VS (CppSrcCode Value)
  -> MS (CppSrcCode Body)
  -> MS (CppSrcCode Statement)
cppForEach :: Doc
-> Doc
-> Doc
-> Doc
-> SrcState ValueState Variable
-> VS (CppSrcCode Value)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
cppForEach Doc
bStart Doc
bEnd Doc
forEachLabel Doc
inLbl SrcState ValueState Variable
e' VS (CppSrcCode Value)
v' SrcState MethodState Doc
b' = do
  e <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
-> SrcState ValueState Variable
-> StateT MethodState Identity (CppSrcCode Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode Variable))
  MethodState
  ValueState
(ValueState -> Focusing Identity (CppSrcCode Variable) ValueState)
-> MethodState
-> Focusing Identity (CppSrcCode Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState Variable
e'
  v <- zoom lensMStoVS v'
  b <- b'
  mkStmtNoEnd $ vcat [
    forEachLabel <+> parens ((text cppConst <+> renderType (variableType e) <+> text "&") <> RC.variable e <+>
      inLbl <+> RC.value v) <+> bStart,
    indent $ RC.body b,
    bEnd]

cppLitSet
  :: (RenderValue r var val typ, ValueElim r val)
  => (VS (r typ) -> VS (r typ)) -> VS (r typ) -> [VS (r val)] -> VS (r val)
cppLitSet :: forall {k} (r :: k -> *) (var :: k) (val :: k) (typ :: k).
(RenderValue r var val typ, ValueElim r val) =>
(VS (r typ) -> VS (r typ))
-> VS (r typ) -> [VS (r val)] -> VS (r val)
cppLitSet VS (r typ) -> VS (r typ)
f VS (r typ)
t' [VS (r val)]
es' = do
  es <- [VS (r val)] -> StateT ValueState Identity [r val]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [VS (r val)]
es'
  lt <- f t'
  mkVal lt ( braces (valueList es))

cpphStateVarDef
  :: Doc
  -> CppHdrCode AttachmentData
  -> VS (CppHdrCode Variable)
  -> VS (CppHdrCode Value) -> CS Doc
cpphStateVarDef :: Doc
-> CppHdrCode AttachmentData
-> HdrState ValueState Variable
-> HdrState ValueState Value
-> CS Doc
cpphStateVarDef Doc
s CppHdrCode AttachmentData
p HdrState ValueState Variable
vr HdrState ValueState Value
vl = (CppHdrCode Statement -> Doc)
-> StateT ClassState Identity (CppHdrCode Statement) -> CS Doc
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (Doc -> Doc -> Doc -> Doc
R.stateVar Doc
s (CppHdrCode AttachmentData -> Doc
forall {k} (r :: k -> *) (attch :: k).
PermElim r attch =>
r attch -> Doc
RC.perm CppHdrCode AttachmentData
p) (Doc -> Doc)
-> (CppHdrCode Statement -> Doc) -> CppHdrCode Statement -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
  CppHdrCode Statement -> Doc
forall {k} (r :: k -> *) (stmt :: k).
StatementElim r stmt =>
r stmt -> Doc
RC.statement) (LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode Statement))
  ClassState
  MethodState
-> HdrState MethodState Statement
-> StateT ClassState Identity (CppHdrCode Statement)
forall c.
LensLike'
  (Zoomed (StateT MethodState Identity) c) ClassState MethodState
-> StateT MethodState Identity c -> StateT ClassState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode Statement))
  ClassState
  MethodState
(MethodState
 -> Focusing Identity (CppHdrCode Statement) MethodState)
-> ClassState
-> Focusing Identity (CppHdrCode Statement) ClassState
Lens' ClassState MethodState
lensCStoMS (HdrState MethodState Statement
 -> StateT ClassState Identity (CppHdrCode Statement))
-> HdrState MethodState Statement
-> StateT ClassState Identity (CppHdrCode Statement)
forall a b. (a -> b) -> a -> b
$ HdrState MethodState Statement -> HdrState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k).
RenderStatement r stmt =>
MS (r stmt) -> MS (r stmt)
stmt (HdrState MethodState Statement -> HdrState MethodState Statement)
-> HdrState MethodState Statement -> HdrState MethodState Statement
forall a b. (a -> b) -> a -> b
$ AttachmentTag
-> HdrState MethodState Statement
-> HdrState MethodState Statement
-> HdrState MethodState Statement
forall a. AttachmentTag -> a -> a -> a
onAttachment (CppHdrCode AttachmentData -> AttachmentTag
forall {k} (r :: k -> *) (attch :: k).
PermElim r attch =>
r attch -> AttachmentTag
binding CppHdrCode AttachmentData
p)
  (HdrState ValueState Variable
-> CppHdrCode ScopeData -> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
varDec HdrState ValueState Variable
vr CppHdrCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
local) (HdrState ValueState Variable
-> CppHdrCode ScopeData
-> HdrState ValueState Value
-> HdrState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> VS (r val) -> MS (r stmt)
varDecDef HdrState ValueState Variable
vr CppHdrCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
local HdrState ValueState Value
vl))

cpphVarsFuncsList :: VisibilityTag -> [CppHdrCode StateVarData] ->
  [CppHdrCode MethodData] -> Doc
cpphVarsFuncsList :: VisibilityTag
-> [CppHdrCode StateVarData] -> [CppHdrCode MethodData] -> Doc
cpphVarsFuncsList VisibilityTag
st [CppHdrCode StateVarData]
vs [CppHdrCode MethodData]
fs =
  let visVs :: [Doc]
visVs = [CppHdrCode StateVarData -> Doc
forall {k} (r :: k -> *) (stvr :: k).
StateVarElim r stvr =>
r stvr -> Doc
RC.stateVar CppHdrCode StateVarData
v | CppHdrCode StateVarData
v <- [CppHdrCode StateVarData]
vs, StateVarData -> VisibilityTag
getStVarScp (CppHdrCode StateVarData -> StateVarData
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode StateVarData
v) VisibilityTag -> VisibilityTag -> Bool
forall a. Eq a => a -> a -> Bool
== VisibilityTag
st]
      visFs :: [Doc]
visFs = [CppHdrCode MethodData -> Doc
forall {k} (r :: k -> *) (mthd :: k).
MethodElim r mthd =>
r mthd -> Doc
RC.method CppHdrCode MethodData
f | CppHdrCode MethodData
f <- [CppHdrCode MethodData]
fs, MethodData -> VisibilityTag
getMthdScp (CppHdrCode MethodData -> MethodData
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode MethodData
f) VisibilityTag -> VisibilityTag -> Bool
forall a. Eq a => a -> a -> Bool
== VisibilityTag
st]
  in [Doc] -> Doc
vcat ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ [Doc]
visVs [Doc] -> [Doc] -> [Doc]
forall a. Semigroup a => a -> a -> a
P.<> ((if [Doc] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Doc]
visVs then Doc
empty else Doc
blank) Doc -> [Doc] -> [Doc]
forall a. a -> [a] -> [a]
: [Doc]
visFs)

cppsClass :: [CppSrcCode StateVarData] ->
  [CppSrcCode MethodData] -> CppSrcCode Class
cppsClass :: [CppSrcCode StateVarData]
-> [CppSrcCode MethodData] -> CppSrcCode Doc
cppsClass [CppSrcCode StateVarData]
vs [CppSrcCode MethodData]
fs = Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode Doc) -> Doc -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vibcat ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vcat [Doc]
vars Doc -> [Doc] -> [Doc]
forall a. a -> [a] -> [a]
: [Doc]
funcs
  where vars :: [Doc]
vars = CppSrcCode StateVarData -> Doc
forall {k} (r :: k -> *) (stvr :: k).
StateVarElim r stvr =>
r stvr -> Doc
RC.stateVar (CppSrcCode StateVarData -> Doc)
-> [CppSrcCode StateVarData] -> [Doc]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [CppSrcCode StateVarData]
vs
        funcs :: [Doc]
funcs = CppSrcCode MethodData -> Doc
forall {k} (r :: k -> *) (mthd :: k).
MethodElim r mthd =>
r mthd -> Doc
RC.method (CppSrcCode MethodData -> Doc) -> [CppSrcCode MethodData] -> [Doc]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [CppSrcCode MethodData]
fs

cpphClass :: Label -> CppHdrCode ParentSpec ->
  [CppHdrCode StateVarData] -> [CppHdrCode MethodData] ->
  CppHdrCode (Doc, VisibilityTag) -> CppHdrCode (Doc, VisibilityTag) ->
  CppHdrCode Class
cpphClass :: String
-> CppHdrCode Doc
-> [CppHdrCode StateVarData]
-> [CppHdrCode MethodData]
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode (Doc, VisibilityTag)
-> CppHdrCode Doc
cpphClass String
n CppHdrCode Doc
ps [CppHdrCode StateVarData]
vars [CppHdrCode MethodData]
funcs CppHdrCode (Doc, VisibilityTag)
pub CppHdrCode (Doc, VisibilityTag)
priv = let
  pubs :: Doc
pubs  = VisibilityTag
-> [CppHdrCode StateVarData] -> [CppHdrCode MethodData] -> Doc
cpphVarsFuncsList VisibilityTag
Pub [CppHdrCode StateVarData]
vars [CppHdrCode MethodData]
funcs
  privs :: Doc
privs = VisibilityTag
-> [CppHdrCode StateVarData] -> [CppHdrCode MethodData] -> Doc
cpphVarsFuncsList VisibilityTag
Priv [CppHdrCode StateVarData]
vars [CppHdrCode MethodData]
funcs
  ifEmptyPubs :: Doc -> Doc
ifEmptyPubs  = Doc -> Doc -> Doc
emptyIfEmpty Doc
pubs
  ifEmptyPrivs :: Doc -> Doc
ifEmptyPrivs = Doc -> Doc -> Doc
emptyIfEmpty Doc
privs
  indLi :: [Doc]
indLi = [Doc -> Doc
ifEmptyPubs (CppHdrCode (Doc, VisibilityTag) -> Doc
forall {k} (r :: k -> *) (vis :: k).
VisibilityElim r vis =>
r vis -> Doc
RC.visibility CppHdrCode (Doc, VisibilityTag)
pub Doc -> Doc -> Doc
<> Doc
colon), Doc -> Doc
ifEmptyPubs (Doc -> Doc
indent Doc
pubs),
          Doc -> Doc
ifEmptyPubs (Doc -> Doc
ifEmptyPrivs Doc
blank),
          Doc -> Doc
ifEmptyPrivs (CppHdrCode (Doc, VisibilityTag) -> Doc
forall {k} (r :: k -> *) (vis :: k).
VisibilityElim r vis =>
r vis -> Doc
RC.visibility CppHdrCode (Doc, VisibilityTag)
priv Doc -> Doc -> Doc
<> Doc
colon), Doc -> Doc
ifEmptyPrivs (Doc -> Doc
indent Doc
privs)]
  in (Doc -> Doc) -> CppHdrCode Doc -> CppHdrCode Doc
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
onCodeValue (\Doc
p -> [Doc] -> Doc
vcat [
    Doc
classDec Doc -> Doc -> Doc
<+> String -> Doc
text String
n Doc -> Doc -> Doc
<+> Doc
p Doc -> Doc -> Doc
<+> Doc
bodyStart,
    [Doc] -> Doc
indentList [Doc]
indLi,
    Doc
bodyEnd Doc -> Doc -> Doc
<> Doc
endStatement]) CppHdrCode Doc
ps

cppInOutCall
  :: (Label -> VS (CppSrcCode TypeData) -> [VS (CppSrcCode Value)] -> VS (CppSrcCode Value))
  -> Label
  -> [VS (CppSrcCode Value)]
  -> [VS (CppSrcCode Variable)]
  -> [VS (CppSrcCode Variable)]
  -> MS (CppSrcCode Statement)
cppInOutCall :: (String
 -> State ValueState (CppSrcCode TypeData)
 -> [VS (CppSrcCode Value)]
 -> VS (CppSrcCode Value))
-> InOutCall CppSrcCode Statement Variable Value
cppInOutCall String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
f String
n [VS (CppSrcCode Value)]
ins [SrcState ValueState Variable
out] [] = SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
assign SrcState ValueState Variable
out (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
f String
n ((CppSrcCode Variable -> CppSrcCode TypeData)
-> SrcState ValueState Variable
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Variable -> CppSrcCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType SrcState ValueState Variable
out)
  [VS (CppSrcCode Value)]
ins
cppInOutCall String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
f String
n [VS (CppSrcCode Value)]
ins [] [SrcState ValueState Variable
out] = SrcState ValueState Variable
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (var :: k) (val :: k).
AssignStatement r stmt var val =>
VS (r var) -> VS (r val) -> MS (r stmt)
assign SrcState ValueState Variable
out (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
f String
n ((CppSrcCode Variable -> CppSrcCode TypeData)
-> SrcState ValueState Variable
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Variable -> CppSrcCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType SrcState ValueState Variable
out)
  (SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf SrcState ValueState Variable
out VS (CppSrcCode Value)
-> [VS (CppSrcCode Value)] -> [VS (CppSrcCode Value)]
forall a. a -> [a] -> [a]
: [VS (CppSrcCode Value)]
ins)
cppInOutCall String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
f String
n [VS (CppSrcCode Value)]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both = VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (stmt :: k) (val :: k).
ValueStatement r stmt val =>
VS (r val) -> MS (r stmt)
valStmt (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ String
-> State ValueState (CppSrcCode TypeData)
-> [VS (CppSrcCode Value)]
-> VS (CppSrcCode Value)
f String
n State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void ((SrcState ValueState Variable -> VS (CppSrcCode Value))
-> [SrcState ValueState Variable] -> [VS (CppSrcCode Value)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf [SrcState ValueState Variable]
both [VS (CppSrcCode Value)]
-> [VS (CppSrcCode Value)] -> [VS (CppSrcCode Value)]
forall a. Semigroup a => a -> a -> a
P.<> [VS (CppSrcCode Value)]
ins
  [VS (CppSrcCode Value)]
-> [VS (CppSrcCode Value)] -> [VS (CppSrcCode Value)]
forall a. Semigroup a => a -> a -> a
P.<> (SrcState ValueState Variable -> VS (CppSrcCode Value))
-> [SrcState ValueState Variable] -> [VS (CppSrcCode Value)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf [SrcState ValueState Variable]
outs)

cppsInOut
  :: (VS (CppSrcCode TypeData) -> [MS (CppSrcCode ParamData)] -> MS (CppSrcCode Body) -> MS (CppSrcCode mthd))
  -> [VS (CppSrcCode Variable)]
  -> [VS (CppSrcCode Variable)]
  -> [VS (CppSrcCode Variable)]
  -> MS (CppSrcCode Body)
  -> MS (CppSrcCode mthd)
cppsInOut :: forall mthd.
(State ValueState (CppSrcCode TypeData)
 -> [SrcState MethodState ParamData]
 -> SrcState MethodState Doc
 -> MS (CppSrcCode mthd))
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
cppsInOut State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
f [SrcState ValueState Variable]
ins [SrcState ValueState Variable
v] [] SrcState MethodState Doc
b = State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
f ((CppSrcCode Variable -> CppSrcCode TypeData)
-> SrcState ValueState Variable
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Variable -> CppSrcCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType SrcState ValueState Variable
v)
  ([SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState MethodState ParamData]
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
[VS (r var)] -> [VS (r var)] -> [VS (r var)] -> [MS (r param)]
cppInOutParams [SrcState ValueState Variable]
ins [SrcState ValueState Variable
v] []) ((CppSrcCode Statement
 -> CppSrcCode Doc -> CppSrcCode Statement -> CppSrcCode Doc)
-> SrcState MethodState Statement
-> SrcState MethodState Doc
-> SrcState MethodState Statement
-> SrcState MethodState Doc
forall a b c d s.
(a -> b -> c -> d)
-> State s a -> State s b -> State s c -> State s d
on3StateValues ((Statement -> Doc -> Statement -> Doc)
-> CppSrcCode Statement
-> CppSrcCode Doc
-> CppSrcCode Statement
-> CppSrcCode Doc
forall (r :: * -> *) a b c d.
Applicative r =>
(a -> b -> c -> d) -> r a -> r b -> r c -> r d
on3CodeValues Statement -> Doc -> Statement -> Doc
surroundBody)
  (SrcState ValueState Variable
-> CppSrcCode ScopeData -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (scope :: k) (val :: k).
DeclStatement r bod stmt var scope val =>
VS (r var) -> r scope -> MS (r stmt)
varDec SrcState ValueState Variable
v CppSrcCode ScopeData
forall {k} (r :: k -> *) (scope :: k). ScopeSym r scope => r scope
local) SrcState MethodState Doc
b (VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r stmt)
returnStmt (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf SrcState ValueState Variable
v))
cppsInOut State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
f [SrcState ValueState Variable]
ins [] [SrcState ValueState Variable
v] SrcState MethodState Doc
b = State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
f ((CppSrcCode Variable -> CppSrcCode TypeData)
-> SrcState ValueState Variable
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode Variable -> CppSrcCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType SrcState ValueState Variable
v)
  ([SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState MethodState ParamData]
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
[VS (r var)] -> [VS (r var)] -> [VS (r var)] -> [MS (r param)]
cppInOutParams [SrcState ValueState Variable]
ins [] [SrcState ValueState Variable
v]) ((CppSrcCode Doc -> CppSrcCode Statement -> CppSrcCode Doc)
-> SrcState MethodState Doc
-> SrcState MethodState Statement
-> SrcState MethodState Doc
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((Doc -> Statement -> Doc)
-> CppSrcCode Doc -> CppSrcCode Statement -> CppSrcCode Doc
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Doc -> Statement -> Doc
appendToBody) SrcState MethodState Doc
b
  (VS (CppSrcCode Value) -> SrcState MethodState Statement
forall {k} (r :: k -> *) (bod :: k) (stmt :: k) (var :: k)
       (val :: k).
ControlStatement r bod stmt var val =>
VS (r val) -> MS (r stmt)
returnStmt (VS (CppSrcCode Value) -> SrcState MethodState Statement)
-> VS (CppSrcCode Value) -> SrcState MethodState Statement
forall a b. (a -> b) -> a -> b
$ SrcState ValueState Variable -> VS (CppSrcCode Value)
forall {k} (r :: k -> *) (var :: k) (val :: k).
VariableValue r var val =>
VS (r var) -> VS (r val)
valueOf SrcState ValueState Variable
v))
cppsInOut State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
f [SrcState ValueState Variable]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both SrcState MethodState Doc
b = State ValueState (CppSrcCode TypeData)
-> [SrcState MethodState ParamData]
-> SrcState MethodState Doc
-> MS (CppSrcCode mthd)
f State ValueState (CppSrcCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void ([SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState ValueState Variable]
-> [SrcState MethodState ParamData]
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
[VS (r var)] -> [VS (r var)] -> [VS (r var)] -> [MS (r param)]
cppInOutParams [SrcState ValueState Variable]
ins [SrcState ValueState Variable]
outs [SrcState ValueState Variable]
both) SrcState MethodState Doc
b

cpphInOut
  :: (VS (CppHdrCode TypeData) -> [MS (CppHdrCode ParamData)] -> MS (CppHdrCode Body) -> MS (CppHdrCode mthd))
  -> [VS (CppHdrCode Variable)]
  -> [VS (CppHdrCode Variable)]
  -> [VS (CppHdrCode Variable)]
  -> MS (CppHdrCode Body)
  -> MS (CppHdrCode mthd)
cpphInOut :: forall mthd.
(State ValueState (CppHdrCode TypeData)
 -> [HdrState MethodState ParamData]
 -> HdrState MethodState Doc
 -> MS (CppHdrCode mthd))
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
cpphInOut State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
f [HdrState ValueState Variable]
ins [HdrState ValueState Variable
v] [] HdrState MethodState Doc
b = State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
f ((CppHdrCode Variable -> CppHdrCode TypeData)
-> HdrState ValueState Variable
-> State ValueState (CppHdrCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppHdrCode Variable -> CppHdrCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType HdrState ValueState Variable
v)
  ([HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState MethodState ParamData]
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
[VS (r var)] -> [VS (r var)] -> [VS (r var)] -> [MS (r param)]
cppInOutParams [HdrState ValueState Variable]
ins [HdrState ValueState Variable
v] []) HdrState MethodState Doc
b
cpphInOut State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
f [HdrState ValueState Variable]
ins [] [HdrState ValueState Variable
v] HdrState MethodState Doc
b = State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
f ((CppHdrCode Variable -> CppHdrCode TypeData)
-> HdrState ValueState Variable
-> State ValueState (CppHdrCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppHdrCode Variable -> CppHdrCode TypeData
forall {k} (r :: k -> *) (var :: k) (typ :: k).
VariableElim r var typ =>
r var -> r typ
variableType HdrState ValueState Variable
v)
  ([HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState MethodState ParamData]
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
[VS (r var)] -> [VS (r var)] -> [VS (r var)] -> [MS (r param)]
cppInOutParams [HdrState ValueState Variable]
ins [] [HdrState ValueState Variable
v]) HdrState MethodState Doc
b
cpphInOut State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
f [HdrState ValueState Variable]
ins [HdrState ValueState Variable]
outs [HdrState ValueState Variable]
both HdrState MethodState Doc
b = State ValueState (CppHdrCode TypeData)
-> [HdrState MethodState ParamData]
-> HdrState MethodState Doc
-> MS (CppHdrCode mthd)
f State ValueState (CppHdrCode TypeData)
forall {k} (r :: k -> *) (typ :: k). TypeSym r typ => VS (r typ)
void ([HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState ValueState Variable]
-> [HdrState MethodState ParamData]
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
[VS (r var)] -> [VS (r var)] -> [VS (r var)] -> [MS (r param)]
cppInOutParams [HdrState ValueState Variable]
ins [HdrState ValueState Variable]
outs [HdrState ValueState Variable]
both) HdrState MethodState Doc
b

cppInOutParams
  :: (ParameterSym r param var, TypeElim r typ, VariableElim r var typ)
  => [VS (r var)]
  -> [VS (r var)]
  -> [VS (r var)]
  -> [MS (r param)]
cppInOutParams :: forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
[VS (r var)] -> [VS (r var)] -> [VS (r var)] -> [MS (r param)]
cppInOutParams [VS (r var)]
ins [VS (r var)
_] [] = VS (r var) -> MS (r param)
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
VS (r var) -> MS (r param)
getParam (VS (r var) -> MS (r param)) -> [VS (r var)] -> [MS (r param)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [VS (r var)]
ins
cppInOutParams [VS (r var)]
ins [] [VS (r var)
v] = VS (r var) -> MS (r param)
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
VS (r var) -> MS (r param)
getParam (VS (r var) -> MS (r param)) -> [VS (r var)] -> [MS (r param)]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> VS (r var)
v VS (r var) -> [VS (r var)] -> [VS (r var)]
forall a. a -> [a] -> [a]
: [VS (r var)]
ins
cppInOutParams [VS (r var)]
ins [VS (r var)]
outs [VS (r var)]
both = (VS (r var) -> MS (r param)) -> [VS (r var)] -> [MS (r param)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap VS (r var) -> MS (r param)
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
pointerParam [VS (r var)]
both [MS (r param)] -> [MS (r param)] -> [MS (r param)]
forall a. Semigroup a => a -> a -> a
P.<> (VS (r var) -> MS (r param)) -> [VS (r var)] -> [MS (r param)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap VS (r var) -> MS (r param)
forall {k} (r :: k -> *) (param :: k) (var :: k) (typ :: k).
(ParameterSym r param var, TypeElim r typ,
 VariableElim r var typ) =>
VS (r var) -> MS (r param)
getParam [VS (r var)]
ins [MS (r param)] -> [MS (r param)] -> [MS (r param)]
forall a. Semigroup a => a -> a -> a
P.<>
  (VS (r var) -> MS (r param)) -> [VS (r var)] -> [MS (r param)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap VS (r var) -> MS (r param)
forall {k} (r :: k -> *) (param :: k) (var :: k).
ParameterSym r param var =>
VS (r var) -> MS (r param)
pointerParam [VS (r var)]
outs