{-# LANGUAGE TypeFamilies, Rank2Types #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE PostfixOperators #-}

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

import Utils.Drasil (blank, indent, indentList)

import GOOL.Drasil.CodeType (CodeType(..))
import GOOL.Drasil.ClassInterface (Label, MSBody, VSType, SVariable, SValue, 
  VSFunction, MSStatement, MSParameter, SMethod, CSStateVar, NamedArgs, OOProg, 
  ProgramSym(..), FileSym(..), PermanenceSym(..), BodySym(..), bodyStatements, 
  oneLiner, BlockSym(..), TypeSym(..), TypeElim(..), VariableSym(..), 
  VariableElim(..), ValueSym(..), Argument(..), Literal(..), MathConstant(..), 
  VariableValue(..), CommandLineArgs(..), NumericExpression(..), 
  BooleanExpression(..), Comparison(..), ValueExpression(..), funcApp, 
  selfFuncApp, extFuncApp, InternalValueExp(..), objMethodCall, FunctionSym(..),
  ($.), GetSet(..), List(..), InternalList(..), StatementSym(..), 
  AssignStatement(..), DeclStatement(..), IOStatement(..), StringStatement(..), 
  FuncAppStatement(..), CommentStatement(..), ControlStatement(..), switchAsIf, 
  StatePattern(..), ObserverPattern(..), StrategyPattern(..), ScopeSym(..), 
  ParameterSym(..), MethodSym(..), pubMethod, StateVarSym(..), ClassSym(..), 
  ModuleSym(..))
import GOOL.Drasil.RendererClasses (RenderSym, RenderFile(..), ImportSym(..), 
  ImportElim, PermElim(binding), RenderBody(..), BodyElim, RenderBlock(..), 
  BlockElim, RenderType(..), InternalTypeElim, UnaryOpSym(..), BinaryOpSym(..), 
  OpElim(uOpPrec, bOpPrec), RenderVariable(..), InternalVarElim(variableBind), 
  RenderValue(..), ValueElim(valuePrec), InternalGetSet(..), 
  InternalListFunc(..), RenderFunction(..), FunctionElim(functionType), 
  InternalAssignStmt(..), InternalIOStmt(..), InternalControlStmt(..), 
  RenderStatement(..), StatementElim(statementTerm), RenderScope(..), ScopeElim, 
  MSMthdType, MethodTypeSym(..), RenderParam(..), 
  ParamElim(parameterName, parameterType), RenderMethod(..), MethodElim, 
  StateVarElim, ParentSpec, RenderClass(..), ClassElim, RenderMod(..), 
  ModuleElim, BlockCommentSym(..), BlockCommentElim)
import qualified GOOL.Drasil.RendererClasses as RC (import', perm, body, block,
  type', uOp, bOp, variable, value, function, statement, scope, parameter,
  method, stateVar, class', module', blockComment')
import GOOL.Drasil.LanguageRenderer (addExt, classDec, dot, 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 GOOL.Drasil.LanguageRenderer as R (this', this, sqrt, fabs,
  log10, log, exp, sin, cos, tan, asin, acos, atan, floor, ceil, pow, multiStmt,
  body, param, stateVar, constVar, cast, castObj, static, dynamic, break, 
  continue, private, public, blockCmt, docCmt, addComments, commentedMod, 
  commentedItem)
import GOOL.Drasil.LanguageRenderer.Constructors (mkStmt, mkStmtNoEnd, 
  mkStateVal, mkVal, mkStateVar, mkVar, VSOp, mkOp, unOpPrec, powerPrec, 
  unExpr, unExpr', typeUnExpr, binExpr, binExpr', typeBinExpr)
import qualified GOOL.Drasil.LanguageRenderer.LanguagePolymorphic as G (
  multiBody, block, multiBlock, listInnerType, obj, negateOp, csc, sec, 
  cot, equalOp, notEqualOp, greaterOp, greaterEqualOp, lessOp, lessEqualOp, 
  plusOp, minusOp, multOp, divideOp, moduloOp, var, staticVar, objVar,
  arrayElem, litChar, litDouble, litInt, litString, valueOf, arg, argsList, 
  objAccess, objMethodCall, funcAppMixedArgs, selfFuncAppMixedArgs, 
  newObjMixedArgs, lambda, func, get, set, listAdd, listAppend, listAccess, 
  listSet, getFunc, setFunc, listAppendFunc, stmt, loopStmt, emptyStmt, assign, 
  subAssign, increment, objDecNew, print, closeFile, returnStmt, valStmt, 
  comment, throw, ifCond, tryCatch, construct, param, method, getMethod, 
  setMethod, function, buildClass, implementingClass, commentedClass, 
  modFromData, fileDoc, fileFromData)
import GOOL.Drasil.LanguageRenderer.LanguagePolymorphic (classVarCheckStatic)
import qualified GOOL.Drasil.LanguageRenderer.CommonPseudoOO as CP (int,
  constructor, doxFunc, doxClass, doxMod, funcType, buildModule, litArray, 
  call', listSizeFunc, listAccessFunc', string, constDecDef, docInOutFunc, 
  listSetFunc, extraClass)
import qualified GOOL.Drasil.LanguageRenderer.CLike as C (charRender, float, 
  double, char, listType, void, notOp, andOp, orOp, self, litTrue, litFalse, 
  litFloat, inlineIf, libFuncAppMixedArgs, libNewObjMixedArgs, listSize, 
  increment1, decrement1, varDec, varDecDef, listDec, extObjDecNew, switch, 
  for, while, intFunc, multiAssignError, multiReturnError, multiTypeError)
import qualified GOOL.Drasil.LanguageRenderer.Macros as M (runStrategy, 
  listSlice, stringListVals, stringListLists, forRange, notifyObservers)
import GOOL.Drasil.AST (Terminator(..), ScopeTag(..), Binding(..), onBinding, 
  BindData(..), bd, FileType(..), FileData(..), fileD, FuncData(..), fd, 
  ModData(..), md, updateMod, OpData(..), ParamData(..), pd, ProgData(..), 
  progD, emptyProg, StateVarData(..), svd, TypeData(..), td, ValData(..), vd, 
  VarData(..), vard)
import GOOL.Drasil.Classes (Pair(..))
import GOOL.Drasil.Helpers (angles, doubleQuotedText, hicat, vibcat, 
  emptyIfEmpty, toCode, toState, onCodeValue, onStateValue, on2CodeValues, 
  on2StateValues, on3CodeValues, on3StateValues, onCodeList, onStateList, 
  on2StateLists, on2StateWrapped)
import GOOL.Drasil.State (CS, MS, VS, lensGStoFS, lensFStoCS, lensFStoMS, 
  lensCStoMS, lensCStoVS, lensMStoCS, 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, setScope, getScope, setCurrMainFunc, getCurrMainFunc,
  addIter, getIter, resetIter)

import Prelude hiding (break,print,(<>),sin,cos,tan,floor,pi,const,log,exp,mod,max)
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, brackets, 
  braces, parens, empty, equals, vcat, lbrace, rbrace, colon, isEmpty, quotes)

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

data CppCode x y a = CPPC {CppCode x y a -> x a
src :: x a, CppCode x y a -> y a
hdr :: y a}

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

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

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

instance (Pair p) => OOProg (p CppSrcCode CppHdrCode)

instance (Pair p) => ProgramSym (p CppSrcCode CppHdrCode) where
  type Program (p CppSrcCode CppHdrCode) = ProgData
  prog :: String
-> [SFile (p CppSrcCode CppHdrCode)]
-> GSProgram (p CppSrcCode CppHdrCode)
prog n :: String
n mods :: [SFile (p CppSrcCode CppHdrCode)]
mods = do
    [p CppSrcCode CppHdrCode FileData]
m <-  (StateT FileState Identity (p CppSrcCode CppHdrCode FileData)
 -> StateT GOOLState Identity (p CppSrcCode CppHdrCode FileData))
-> [StateT FileState Identity (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)
mapM (LensLike'
  (Zoomed
     (StateT FileState Identity) (p CppSrcCode CppHdrCode FileData))
  GOOLState
  FileState
-> StateT FileState Identity (p CppSrcCode CppHdrCode FileData)
-> StateT GOOLState Identity (p CppSrcCode CppHdrCode FileData)
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
Lens' GOOLState FileState
lensGStoFS) [StateT FileState Identity (p CppSrcCode CppHdrCode FileData)]
[SFile (p CppSrcCode CppHdrCode)]
mods
    let fm :: [CppSrcCode FileData]
fm = (p CppSrcCode CppHdrCode FileData -> CppSrcCode FileData)
-> [p CppSrcCode CppHdrCode FileData] -> [CppSrcCode FileData]
forall a b. (a -> b) -> [a] -> [b]
map p CppSrcCode CppHdrCode FileData -> CppSrcCode FileData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst [p CppSrcCode CppHdrCode FileData]
m
        sm :: [CppSrcCode FileData]
sm = (p CppSrcCode CppHdrCode FileData -> CppSrcCode FileData)
-> [p CppSrcCode CppHdrCode FileData] -> [CppSrcCode FileData]
forall a b. (a -> b) -> [a] -> [b]
map (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode FileData]
m
    CppSrcCode ProgData
p1 <- String -> [SFile CppSrcCode] -> GSProgram CppSrcCode
forall (r :: * -> *).
ProgramSym r =>
String -> [SFile r] -> GSProgram r
prog String
n ([SFile CppSrcCode]
 -> StateT GOOLState Identity (CppSrcCode ProgData))
-> [SFile CppSrcCode]
-> StateT GOOLState Identity (CppSrcCode ProgData)
forall a b. (a -> b) -> a -> b
$ (CppSrcCode FileData
 -> StateT FileState Identity (CppSrcCode FileData))
-> [CppSrcCode FileData]
-> [StateT FileState Identity (CppSrcCode FileData)]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode FileData
-> StateT FileState Identity (CppSrcCode FileData)
forall (m :: * -> *) a. Monad m => a -> m a
return [CppSrcCode FileData]
sm [StateT FileState Identity (CppSrcCode FileData)]
-> [StateT FileState Identity (CppSrcCode FileData)]
-> [StateT FileState Identity (CppSrcCode FileData)]
forall a. [a] -> [a] -> [a]
++ (CppSrcCode FileData
 -> StateT FileState Identity (CppSrcCode FileData))
-> [CppSrcCode FileData]
-> [StateT FileState Identity (CppSrcCode FileData)]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode FileData
-> StateT FileState Identity (CppSrcCode FileData)
forall (m :: * -> *) a. Monad m => a -> m a
return [CppSrcCode FileData]
fm
    (GOOLState -> GOOLState) -> StateT GOOLState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify GOOLState -> GOOLState
revFiles
    p CppSrcCode CppHdrCode ProgData
-> StateT GOOLState Identity (p CppSrcCode CppHdrCode ProgData)
forall (m :: * -> *) a. Monad m => a -> m a
return (p CppSrcCode CppHdrCode ProgData
 -> StateT GOOLState Identity (p CppSrcCode CppHdrCode ProgData))
-> p CppSrcCode CppHdrCode ProgData
-> StateT GOOLState Identity (p CppSrcCode CppHdrCode ProgData)
forall a b. (a -> b) -> a -> b
$ CppSrcCode ProgData
-> CppHdrCode ProgData -> p CppSrcCode CppHdrCode ProgData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode ProgData
p1 (ProgData -> CppHdrCode ProgData
forall (r :: * -> *) a. Monad r => a -> r a
toCode ProgData
emptyProg)

instance (Pair p) => RenderSym (p CppSrcCode CppHdrCode)

instance (Pair p) => FileSym (p CppSrcCode CppHdrCode) where
  type File (p CppSrcCode CppHdrCode) = FileData
  fileDoc :: FSModule (p CppSrcCode CppHdrCode)
-> SFile (p CppSrcCode CppHdrCode)
fileDoc = (SrcState FileState ModData
 -> StateT FileState Identity (CppSrcCode FileData))
-> (HdrState FileState ModData -> HdrState FileState FileData)
-> PairState FileState p ModData
-> PairState FileState p 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
-> StateT FileState Identity (CppSrcCode FileData)
forall (r :: * -> *). FileSym r => FSModule r -> SFile r
fileDoc HdrState FileState ModData -> HdrState FileState FileData
forall (r :: * -> *). FileSym r => FSModule r -> SFile r
fileDoc

  docMod :: String
-> [String]
-> String
-> SFile (p CppSrcCode CppHdrCode)
-> SFile (p CppSrcCode CppHdrCode)
docMod d :: String
d a :: [String]
a dt :: String
dt = (StateT FileState Identity (CppSrcCode FileData)
 -> StateT FileState Identity (CppSrcCode FileData))
-> (HdrState FileState FileData -> HdrState FileState FileData)
-> PairState FileState p FileData
-> PairState FileState p 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 -> SFile CppSrcCode -> SFile CppSrcCode
forall (r :: * -> *).
FileSym r =>
String -> [String] -> String -> SFile r -> SFile r
docMod String
d [String]
a String
dt) (String
-> [String] -> String -> SFile CppHdrCode -> SFile CppHdrCode
forall (r :: * -> *).
FileSym r =>
String -> [String] -> String -> SFile r -> SFile r
docMod String
d [String]
a String
dt)

instance (Pair p) => RenderFile (p CppSrcCode CppHdrCode) where
  top :: p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Block (p CppSrcCode CppHdrCode))
top m :: p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
m = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode (Module CppSrcCode) -> CppSrcCode Doc
forall (r :: * -> *). RenderFile r => r (Module r) -> r (Block r)
top (CppSrcCode (Module CppSrcCode) -> CppSrcCode Doc)
-> CppSrcCode (Module CppSrcCode) -> CppSrcCode Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppSrcCode ModData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ModData
p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
m) (CppHdrCode (Module CppHdrCode) -> CppHdrCode Doc
forall (r :: * -> *). RenderFile r => r (Module r) -> r (Block r)
top (CppHdrCode (Module CppHdrCode) -> CppHdrCode Doc)
-> CppHdrCode (Module CppHdrCode) -> CppHdrCode Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppHdrCode ModData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ModData
p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
m)
  bottom :: p CppSrcCode CppHdrCode (Block (p CppSrcCode CppHdrCode))
bottom = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode Doc
forall (r :: * -> *). RenderFile r => r (Block r)
bottom CppHdrCode Doc
forall (r :: * -> *). RenderFile r => r (Block r)
bottom
  
  commentedMod :: SFile (p CppSrcCode CppHdrCode)
-> FS
     (p CppSrcCode CppHdrCode (BlockComment (p CppSrcCode CppHdrCode)))
-> SFile (p CppSrcCode CppHdrCode)
commentedMod = (StateT FileState Identity (CppSrcCode FileData)
 -> SrcState FileState Doc
 -> StateT FileState Identity (CppSrcCode FileData))
-> (HdrState FileState FileData
    -> HdrState FileState Doc -> HdrState FileState FileData)
-> PairState FileState p FileData
-> PairState FileState p Doc
-> PairState FileState p 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 StateT FileState Identity (CppSrcCode FileData)
-> SrcState FileState Doc
-> StateT FileState Identity (CppSrcCode FileData)
forall (r :: * -> *).
RenderFile r =>
SFile r -> FS (r (BlockComment r)) -> SFile r
commentedMod HdrState FileState FileData
-> HdrState FileState Doc -> HdrState FileState FileData
forall (r :: * -> *).
RenderFile r =>
SFile r -> FS (r (BlockComment r)) -> SFile r
commentedMod

  fileFromData :: String
-> FSModule (p CppSrcCode CppHdrCode)
-> SFile (p CppSrcCode CppHdrCode)
fileFromData fp :: String
fp = (SrcState FileState ModData
 -> StateT FileState Identity (CppSrcCode FileData))
-> (HdrState FileState ModData -> HdrState FileState FileData)
-> PairState FileState p ModData
-> PairState FileState p 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 -> FSModule CppSrcCode -> SFile CppSrcCode
forall (r :: * -> *).
RenderFile r =>
String -> FSModule r -> SFile r
fileFromData String
fp) (String -> FSModule CppHdrCode -> SFile CppHdrCode
forall (r :: * -> *).
RenderFile r =>
String -> FSModule r -> SFile r
fileFromData String
fp)

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

instance (Pair p) => ImportElim (p CppSrcCode CppHdrCode) where
  import' :: p CppSrcCode CppHdrCode (Import (p CppSrcCode CppHdrCode)) -> Doc
import' i :: p CppSrcCode CppHdrCode (Import (p CppSrcCode CppHdrCode))
i = CppSrcCode (Import CppSrcCode) -> Doc
forall (r :: * -> *). ImportElim r => r (Import r) -> Doc
RC.import' (CppSrcCode (Import CppSrcCode) -> Doc)
-> CppSrcCode (Import CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
p CppSrcCode CppHdrCode (Import (p CppSrcCode CppHdrCode))
i

instance (Pair p) => PermanenceSym (p CppSrcCode CppHdrCode) where
  type Permanence (p CppSrcCode CppHdrCode) = BindData
  static :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
static = CppSrcCode BindData
-> CppHdrCode BindData -> p CppSrcCode CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode BindData
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
static CppHdrCode BindData
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
static
  dynamic :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
dynamic = CppSrcCode BindData
-> CppHdrCode BindData -> p CppSrcCode CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode BindData
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
dynamic CppHdrCode BindData
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
dynamic

instance (Pair p) => PermElim (p CppSrcCode CppHdrCode) where
  perm :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> Doc
perm p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p = CppSrcCode (Permanence CppSrcCode) -> Doc
forall (r :: * -> *). PermElim r => r (Permanence r) -> Doc
RC.perm (CppSrcCode (Permanence CppSrcCode) -> Doc)
-> CppSrcCode (Permanence CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p
  binding :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> Binding
binding p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p = CppSrcCode (Permanence CppSrcCode) -> Binding
forall (r :: * -> *). PermElim r => r (Permanence r) -> Binding
binding (CppSrcCode (Permanence CppSrcCode) -> Binding)
-> CppSrcCode (Permanence CppSrcCode) -> Binding
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p

instance (Pair p) => BodySym (p CppSrcCode CppHdrCode) where
  type Body (p CppSrcCode CppHdrCode) = Doc
  body :: [MSBlock (p CppSrcCode CppHdrCode)]
-> MSBody (p CppSrcCode CppHdrCode)
body = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [PairState MethodState p Doc]
-> PairState MethodState p 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 (r :: * -> *). BodySym r => [MSBlock r] -> MSBody r
body [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *). BodySym r => [MSBlock r] -> MSBody r
body

  addComments :: String
-> MSBody (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
addComments s :: String
s = (SrcState MethodState Doc -> SrcState MethodState Doc)
-> (HdrState MethodState Doc -> HdrState MethodState Doc)
-> PairState MethodState p Doc
-> PairState MethodState p 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 -> MSBody CppSrcCode -> MSBody CppSrcCode
forall (r :: * -> *). BodySym r => String -> MSBody r -> MSBody r
addComments String
s) (String -> MSBody CppHdrCode -> MSBody CppHdrCode
forall (r :: * -> *). BodySym r => String -> MSBody r -> MSBody r
addComments String
s)

instance (Pair p) => RenderBody (p CppSrcCode CppHdrCode) where
  multiBody :: [MSBody (p CppSrcCode CppHdrCode)]
-> MSBody (p CppSrcCode CppHdrCode)
multiBody = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [PairState MethodState p Doc]
-> PairState MethodState p 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 (r :: * -> *). RenderBody r => [MSBody r] -> MSBody r
multiBody [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *). RenderBody r => [MSBody r] -> MSBody r
multiBody

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

instance (Pair p) => BlockSym (p CppSrcCode CppHdrCode) where
  type Block (p CppSrcCode CppHdrCode) = Doc
  block :: [MSStatement (p CppSrcCode CppHdrCode)]
-> MSBlock (p CppSrcCode CppHdrCode)
block = ([SrcState MethodState (Doc, Terminator)]
 -> SrcState MethodState Doc)
-> ([HdrState MethodState (Doc, Terminator)]
    -> HdrState MethodState Doc)
-> [PairState MethodState p (Doc, Terminator)]
-> PairState MethodState p 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, Terminator)]
-> SrcState MethodState Doc
forall (r :: * -> *). BlockSym r => [MSStatement r] -> MSBlock r
block [HdrState MethodState (Doc, Terminator)]
-> HdrState MethodState Doc
forall (r :: * -> *). BlockSym r => [MSStatement r] -> MSBlock r
block

instance (Pair p) => RenderBlock (p CppSrcCode CppHdrCode) where
  multiBlock :: [MSBlock (p CppSrcCode CppHdrCode)]
-> MSBlock (p CppSrcCode CppHdrCode)
multiBlock = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [PairState MethodState p Doc]
-> PairState MethodState p 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 (r :: * -> *). RenderBlock r => [MSBlock r] -> MSBlock r
multiBlock [HdrState MethodState Doc] -> HdrState MethodState Doc
forall (r :: * -> *). RenderBlock r => [MSBlock r] -> MSBlock r
multiBlock

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

instance (Pair p) => TypeSym (p CppSrcCode CppHdrCode) where
  type Type (p CppSrcCode CppHdrCode) = TypeData
  bool :: VSType (p CppSrcCode CppHdrCode)
bool = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
bool State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
bool
  int :: VSType (p CppSrcCode CppHdrCode)
int = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
int State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
int
  float :: VSType (p CppSrcCode CppHdrCode)
float = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
float State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
float
  double :: VSType (p CppSrcCode CppHdrCode)
double = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
double State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
double
  char :: VSType (p CppSrcCode CppHdrCode)
char = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
char State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
char
  string :: VSType (p CppSrcCode CppHdrCode)
string = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
string State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
string
  infile :: VSType (p CppSrcCode CppHdrCode)
infile = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
infile State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
infile
  outfile :: VSType (p CppSrcCode CppHdrCode)
outfile = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
outfile State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
outfile
  listType :: VSType (p CppSrcCode CppHdrCode)
-> VSType (p CppSrcCode CppHdrCode)
listType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> State ValueState (p CppSrcCode CppHdrCode TypeData)
-> State ValueState (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 (r :: * -> *). TypeSym r => VSType r -> VSType r
listType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
listType
  arrayType :: VSType (p CppSrcCode CppHdrCode)
-> VSType (p CppSrcCode CppHdrCode)
arrayType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> State ValueState (p CppSrcCode CppHdrCode TypeData)
-> State ValueState (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 (r :: * -> *). TypeSym r => VSType r -> VSType r
arrayType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
arrayType
  listInnerType :: VSType (p CppSrcCode CppHdrCode)
-> VSType (p CppSrcCode CppHdrCode)
listInnerType = (State ValueState (CppSrcCode TypeData)
 -> State ValueState (CppSrcCode TypeData))
-> (State ValueState (CppHdrCode TypeData)
    -> State ValueState (CppHdrCode TypeData))
-> State ValueState (p CppSrcCode CppHdrCode TypeData)
-> State ValueState (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 (r :: * -> *). TypeSym r => VSType r -> VSType r
listInnerType State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
listInnerType
  obj :: String -> VSType (p CppSrcCode CppHdrCode)
obj t :: String
t = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (String -> VSType CppSrcCode
forall (r :: * -> *). TypeSym r => String -> VSType r
obj String
t) (String -> VSType CppHdrCode
forall (r :: * -> *). TypeSym r => String -> VSType r
obj String
t)
  funcType :: [VSType (p CppSrcCode CppHdrCode)]
-> VSType (p CppSrcCode CppHdrCode)
-> VSType (p CppSrcCode CppHdrCode)
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))
-> [State ValueState (p CppSrcCode CppHdrCode TypeData)]
-> State ValueState (p CppSrcCode CppHdrCode TypeData)
-> State ValueState (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 (r :: * -> *).
TypeSym r =>
[VSType r] -> VSType r -> VSType r
funcType [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *).
TypeSym r =>
[VSType r] -> VSType r -> VSType r
funcType
  void :: VSType (p CppSrcCode CppHdrCode)
void = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> State ValueState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
void State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
void

instance (Pair p) => TypeElim (p CppSrcCode CppHdrCode) where
  getType :: p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
-> CodeType
getType s :: p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
s = CppSrcCode (Type CppSrcCode) -> CodeType
forall (r :: * -> *). TypeElim r => r (Type r) -> CodeType
getType (CppSrcCode (Type CppSrcCode) -> CodeType)
-> CppSrcCode (Type CppSrcCode) -> CodeType
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode TypeData -> CppSrcCode TypeData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode TypeData
p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
s
  getTypeString :: p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode)) -> String
getTypeString s :: p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
s = CppSrcCode (Type CppSrcCode) -> String
forall (r :: * -> *). TypeElim r => r (Type r) -> String
getTypeString (CppSrcCode (Type CppSrcCode) -> String)
-> CppSrcCode (Type CppSrcCode) -> String
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode TypeData -> CppSrcCode TypeData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode TypeData
p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
s
  
instance (Pair p) => RenderType (p CppSrcCode CppHdrCode) where
  multiType :: [VSType (p CppSrcCode CppHdrCode)]
-> VSType (p CppSrcCode CppHdrCode)
multiType = ([State ValueState (CppSrcCode TypeData)]
 -> State ValueState (CppSrcCode TypeData))
-> ([State ValueState (CppHdrCode TypeData)]
    -> State ValueState (CppHdrCode TypeData))
-> [PairState ValueState p TypeData]
-> PairState ValueState p 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 (r :: * -> *). RenderType r => [VSType r] -> VSType r
multiType [State ValueState (CppHdrCode TypeData)]
-> State ValueState (CppHdrCode TypeData)
forall (r :: * -> *). RenderType r => [VSType r] -> VSType r
multiType
  typeFromData :: CodeType -> String -> Doc -> VSType (p CppSrcCode CppHdrCode)
typeFromData t :: CodeType
t s :: String
s d :: Doc
d = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> State ValueState (CppSrcCode TypeData)
-> State ValueState (CppHdrCode TypeData)
-> PairState ValueState p 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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CodeType -> String -> Doc -> VSType CppSrcCode
forall (r :: * -> *).
RenderType r =>
CodeType -> String -> Doc -> VSType r
typeFromData CodeType
t String
s Doc
d) (CodeType -> String -> Doc -> VSType CppHdrCode
forall (r :: * -> *).
RenderType r =>
CodeType -> String -> Doc -> VSType r
typeFromData CodeType
t String
s Doc
d)

instance (Pair p) => InternalTypeElim (p CppSrcCode CppHdrCode) where
  type' :: p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode)) -> Doc
type' s :: p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
s = CppSrcCode (Type CppSrcCode) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' (CppSrcCode (Type CppSrcCode) -> Doc)
-> CppSrcCode (Type CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode TypeData -> CppSrcCode TypeData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode TypeData
p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
s

instance (Pair p) => UnaryOpSym (p CppSrcCode CppHdrCode) where
  type UnaryOp (p CppSrcCode CppHdrCode) = OpData
  notOp :: VSUnOp (p CppSrcCode CppHdrCode)
notOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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
  type BinaryOp (p CppSrcCode CppHdrCode) = OpData
  equalOp :: VSBinOp (p CppSrcCode CppHdrCode)
equalOp = (CppSrcCode OpData
 -> CppHdrCode OpData -> p CppSrcCode CppHdrCode OpData)
-> State ValueState (CppSrcCode OpData)
-> State ValueState (CppHdrCode OpData)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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)
-> State ValueState (p CppSrcCode CppHdrCode OpData)
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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
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 (UnaryOp (p CppSrcCode CppHdrCode)) -> Doc
uOp o :: p CppSrcCode CppHdrCode (UnaryOp (p CppSrcCode CppHdrCode))
o = CppSrcCode (UnaryOp CppSrcCode) -> Doc
forall (r :: * -> *). OpElim r => r (UnaryOp r) -> Doc
RC.uOp (CppSrcCode (UnaryOp CppSrcCode) -> Doc)
-> CppSrcCode (UnaryOp CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
p CppSrcCode CppHdrCode (UnaryOp (p CppSrcCode CppHdrCode))
o
  bOp :: p CppSrcCode CppHdrCode (BinaryOp (p CppSrcCode CppHdrCode)) -> Doc
bOp o :: p CppSrcCode CppHdrCode (BinaryOp (p CppSrcCode CppHdrCode))
o = CppSrcCode (BinaryOp CppSrcCode) -> Doc
forall (r :: * -> *). OpElim r => r (BinaryOp r) -> Doc
RC.bOp (CppSrcCode (BinaryOp CppSrcCode) -> Doc)
-> CppSrcCode (BinaryOp CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
p CppSrcCode CppHdrCode (BinaryOp (p CppSrcCode CppHdrCode))
o
  uOpPrec :: p CppSrcCode CppHdrCode (UnaryOp (p CppSrcCode CppHdrCode)) -> Int
uOpPrec o :: p CppSrcCode CppHdrCode (UnaryOp (p CppSrcCode CppHdrCode))
o = CppSrcCode (UnaryOp CppSrcCode) -> Int
forall (r :: * -> *). OpElim r => r (UnaryOp r) -> Int
uOpPrec (CppSrcCode (UnaryOp CppSrcCode) -> Int)
-> CppSrcCode (UnaryOp CppSrcCode) -> Int
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
p CppSrcCode CppHdrCode (UnaryOp (p CppSrcCode CppHdrCode))
o
  bOpPrec :: p CppSrcCode CppHdrCode (BinaryOp (p CppSrcCode CppHdrCode)) -> Int
bOpPrec o :: p CppSrcCode CppHdrCode (BinaryOp (p CppSrcCode CppHdrCode))
o = CppSrcCode (BinaryOp CppSrcCode) -> Int
forall (r :: * -> *). OpElim r => r (BinaryOp r) -> Int
bOpPrec (CppSrcCode (BinaryOp CppSrcCode) -> Int)
-> CppSrcCode (BinaryOp CppSrcCode) -> Int
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode OpData -> CppSrcCode OpData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode OpData
p CppSrcCode CppHdrCode (BinaryOp (p CppSrcCode CppHdrCode))
o

instance (Pair p) => VariableSym (p CppSrcCode CppHdrCode) where
  type Variable (p CppSrcCode CppHdrCode) = VarData
  var :: String
-> VSType (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
var n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState VarData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState VarData)
-> PairState ValueState p TypeData
-> PairState ValueState p VarData
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 -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
n) (String -> VSType CppHdrCode -> SVariable CppHdrCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
n)
  staticVar :: String
-> VSType (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
staticVar n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState VarData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState VarData)
-> PairState ValueState p TypeData
-> PairState ValueState p VarData
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 -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
staticVar String
n) (String -> VSType CppHdrCode -> SVariable CppHdrCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
staticVar String
n)
  const :: String
-> VSType (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
const n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState VarData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState VarData)
-> PairState ValueState p TypeData
-> PairState ValueState p VarData
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 -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
const String
n) (String -> VSType CppHdrCode -> SVariable CppHdrCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
const String
n)
  extVar :: String
-> String
-> VSType (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
extVar l :: String
l n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState VarData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState VarData)
-> PairState ValueState p TypeData
-> PairState ValueState p VarData
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 -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> String -> VSType r -> SVariable r
extVar String
l String
n) (String -> String -> VSType CppHdrCode -> SVariable CppHdrCode
forall (r :: * -> *).
VariableSym r =>
String -> String -> VSType r -> SVariable r
extVar String
l String
n)
  self :: SVariable (p CppSrcCode CppHdrCode)
self = (CppSrcCode VarData
 -> CppHdrCode VarData -> p CppSrcCode CppHdrCode VarData)
-> SrcState ValueState VarData
-> HdrState ValueState VarData
-> PairState ValueState p VarData
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode VarData
-> CppHdrCode VarData -> p CppSrcCode CppHdrCode VarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState VarData
forall (r :: * -> *). VariableSym r => SVariable r
self HdrState ValueState VarData
forall (r :: * -> *). VariableSym r => SVariable r
self
  classVar :: VSType (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
classVar = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState VarData -> SrcState ValueState VarData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState VarData -> HdrState ValueState VarData)
-> PairState ValueState p TypeData
-> PairState ValueState p VarData
-> PairState ValueState p VarData
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 VarData -> SrcState ValueState VarData
forall (r :: * -> *).
VariableSym r =>
VSType r -> SVariable r -> SVariable r
classVar State ValueState (CppHdrCode TypeData)
-> HdrState ValueState VarData -> HdrState ValueState VarData
forall (r :: * -> *).
VariableSym r =>
VSType r -> SVariable r -> SVariable r
classVar
  extClassVar :: VSType (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
extClassVar = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState VarData -> SrcState ValueState VarData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState VarData -> HdrState ValueState VarData)
-> PairState ValueState p TypeData
-> PairState ValueState p VarData
-> PairState ValueState p VarData
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 VarData -> SrcState ValueState VarData
forall (r :: * -> *).
VariableSym r =>
VSType r -> SVariable r -> SVariable r
extClassVar State ValueState (CppHdrCode TypeData)
-> HdrState ValueState VarData -> HdrState ValueState VarData
forall (r :: * -> *).
VariableSym r =>
VSType r -> SVariable r -> SVariable r
extClassVar
  objVar :: SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
objVar = (SrcState ValueState VarData
 -> SrcState ValueState VarData -> SrcState ValueState VarData)
-> (HdrState ValueState VarData
    -> HdrState ValueState VarData -> HdrState ValueState VarData)
-> PairState ValueState p VarData
-> PairState ValueState p VarData
-> PairState ValueState p VarData
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 VarData
-> SrcState ValueState VarData -> SrcState ValueState VarData
forall (r :: * -> *).
VariableSym r =>
SVariable r -> SVariable r -> SVariable r
objVar HdrState ValueState VarData
-> HdrState ValueState VarData -> HdrState ValueState VarData
forall (r :: * -> *).
VariableSym r =>
SVariable r -> SVariable r -> SVariable r
objVar
  objVarSelf :: SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
objVarSelf = (SrcState ValueState VarData -> SrcState ValueState VarData)
-> (HdrState ValueState VarData -> HdrState ValueState VarData)
-> PairState ValueState p VarData
-> PairState ValueState p VarData
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 VarData -> SrcState ValueState VarData
forall (r :: * -> *). VariableSym r => SVariable r -> SVariable r
objVarSelf HdrState ValueState VarData -> HdrState ValueState VarData
forall (r :: * -> *). VariableSym r => SVariable r -> SVariable r
objVarSelf
  arrayElem :: Integer
-> SVariable (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
arrayElem i :: Integer
i = (SrcState ValueState VarData -> SrcState ValueState VarData)
-> (HdrState ValueState VarData -> HdrState ValueState VarData)
-> PairState ValueState p VarData
-> PairState ValueState p VarData
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 (Integer -> SVariable CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
Integer -> SVariable r -> SVariable r
arrayElem Integer
i) (Integer -> SVariable CppHdrCode -> SVariable CppHdrCode
forall (r :: * -> *).
VariableSym r =>
Integer -> SVariable r -> SVariable r
arrayElem Integer
i)

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

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

instance (Pair p) => RenderVariable (p CppSrcCode CppHdrCode) where
  varFromData :: Binding
-> String
-> VSType (p CppSrcCode CppHdrCode)
-> Doc
-> SVariable (p CppSrcCode CppHdrCode)
varFromData b :: Binding
b n :: String
n t' :: VSType (p CppSrcCode CppHdrCode)
t' d :: Doc
d = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState VarData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState VarData)
-> PairState ValueState p TypeData
-> PairState ValueState p VarData
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 (\t :: State ValueState (CppSrcCode TypeData)
t ->Binding
-> String -> VSType CppSrcCode -> Doc -> SVariable CppSrcCode
forall (r :: * -> *).
RenderVariable r =>
Binding -> String -> VSType r -> Doc -> SVariable r
varFromData Binding
b String
n State ValueState (CppSrcCode TypeData)
VSType CppSrcCode
t Doc
d) 
    (\t :: State ValueState (CppHdrCode TypeData)
t -> Binding
-> String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
forall (r :: * -> *).
RenderVariable r =>
Binding -> String -> VSType r -> Doc -> SVariable r
varFromData Binding
b String
n State ValueState (CppHdrCode TypeData)
VSType CppHdrCode
t Doc
d) PairState ValueState p TypeData
VSType (p CppSrcCode CppHdrCode)
t'

instance (Pair p) => ValueSym (p CppSrcCode CppHdrCode) where
  type Value (p CppSrcCode CppHdrCode) = ValData
  valueType :: p CppSrcCode CppHdrCode (Value (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
valueType v :: p CppSrcCode CppHdrCode (Value (p CppSrcCode CppHdrCode))
v = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode (Value CppSrcCode) -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r (Value r) -> r (Type r)
valueType (CppSrcCode (Value CppSrcCode) -> CppSrcCode TypeData)
-> CppSrcCode (Value CppSrcCode) -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ValData
p CppSrcCode CppHdrCode (Value (p CppSrcCode CppHdrCode))
v) (CppHdrCode (Value CppHdrCode) -> CppHdrCode TypeData
forall (r :: * -> *). ValueSym r => r (Value r) -> r (Type r)
valueType (CppHdrCode (Value CppHdrCode) -> CppHdrCode TypeData)
-> CppHdrCode (Value CppHdrCode) -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ValData
p CppSrcCode CppHdrCode (Value (p CppSrcCode CppHdrCode))
v)

instance (Pair p) => Argument (p CppSrcCode CppHdrCode) where
  pointerArg :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
pointerArg = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). Argument r => SValue r -> SValue r
pointerArg HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). Argument r => SValue r -> SValue r
pointerArg

instance (Pair p) => Literal (p CppSrcCode CppHdrCode) where
  litTrue :: SValue (p CppSrcCode CppHdrCode)
litTrue = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState ValData
forall (r :: * -> *). Literal r => SValue r
litTrue HdrState ValueState ValData
forall (r :: * -> *). Literal r => SValue r
litTrue
  litFalse :: SValue (p CppSrcCode CppHdrCode)
litFalse = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState ValData
forall (r :: * -> *). Literal r => SValue r
litFalse HdrState ValueState ValData
forall (r :: * -> *). Literal r => SValue r
litFalse
  litChar :: Char -> SValue (p CppSrcCode CppHdrCode)
litChar c :: Char
c = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Char -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Char -> SValue r
litChar Char
c) (Char -> SValue CppHdrCode
forall (r :: * -> *). Literal r => Char -> SValue r
litChar Char
c)
  litDouble :: Double -> SValue (p CppSrcCode CppHdrCode)
litDouble v :: Double
v = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Double -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Double -> SValue r
litDouble Double
v) (Double -> SValue CppHdrCode
forall (r :: * -> *). Literal r => Double -> SValue r
litDouble Double
v)
  litFloat :: Float -> SValue (p CppSrcCode CppHdrCode)
litFloat v :: Float
v = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Float -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Float -> SValue r
litFloat Float
v) (Float -> SValue CppHdrCode
forall (r :: * -> *). Literal r => Float -> SValue r
litFloat Float
v)
  litInt :: Integer -> SValue (p CppSrcCode CppHdrCode)
litInt v :: Integer
v =(CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues  CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Integer -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
v) (Integer -> SValue CppHdrCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
v)
  litString :: String -> SValue (p CppSrcCode CppHdrCode)
litString s :: String
s = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (String -> SValue CppSrcCode
forall (r :: * -> *). Literal r => String -> SValue r
litString String
s) (String -> SValue CppHdrCode
forall (r :: * -> *). Literal r => String -> SValue r
litString String
s)
  litArray :: VSType (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
litArray = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData] -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData] -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [State ValueState (p CppSrcCode CppHdrCode ValData)]
-> State ValueState (p CppSrcCode CppHdrCode ValData)
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)
-> [SrcState ValueState ValData] -> SrcState ValueState ValData
forall (r :: * -> *).
Literal r =>
VSType r -> [SValue r] -> SValue r
litArray State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState ValData] -> HdrState ValueState ValData
forall (r :: * -> *).
Literal r =>
VSType r -> [SValue r] -> SValue r
litArray
  litList :: VSType (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
litList = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData] -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData] -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [State ValueState (p CppSrcCode CppHdrCode ValData)]
-> State ValueState (p CppSrcCode CppHdrCode ValData)
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)
-> [SrcState ValueState ValData] -> SrcState ValueState ValData
forall (r :: * -> *).
Literal r =>
VSType r -> [SValue r] -> SValue r
litList State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState ValData] -> HdrState ValueState ValData
forall (r :: * -> *).
Literal r =>
VSType r -> [SValue r] -> SValue r
litList

instance (Pair p) => MathConstant (p CppSrcCode CppHdrCode) where
  pi :: SValue (p CppSrcCode CppHdrCode)
pi = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState ValData
forall (r :: * -> *). MathConstant r => SValue r
pi HdrState ValueState ValData
forall (r :: * -> *). MathConstant r => SValue r
pi

instance (Pair p) => VariableValue (p CppSrcCode CppHdrCode) where
  valueOf :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
valueOf = (SrcState ValueState VarData -> SrcState ValueState ValData)
-> (HdrState ValueState VarData -> HdrState ValueState ValData)
-> PairState ValueState p VarData
-> PairState ValueState p ValData
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 VarData -> SrcState ValueState ValData
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf HdrState ValueState VarData -> HdrState ValueState ValData
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf
  
instance (Pair p) => CommandLineArgs (p CppSrcCode CppHdrCode) where
  arg :: Integer -> SValue (p CppSrcCode CppHdrCode)
arg n :: Integer
n = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Integer -> SValue CppSrcCode
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
arg Integer
n) (Integer -> SValue CppHdrCode
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
arg Integer
n)
  argsList :: SValue (p CppSrcCode CppHdrCode)
argsList = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState ValData
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList HdrState ValueState ValData
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList
  argExists :: Integer -> SValue (p CppSrcCode CppHdrCode)
argExists i :: Integer
i = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Integer -> SValue CppSrcCode
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
argExists Integer
i) (Integer -> SValue CppHdrCode
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
argExists Integer
i)

instance (Pair p) => NumericExpression (p CppSrcCode CppHdrCode) where
  #~ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#~) = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#~) HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#~)
  #/^ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#/^) = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#/^) HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#/^)
  #| :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#|) = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#|) HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#|)
  #+ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#+) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#+) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#+)
  #- :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#-) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#-) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#-)
  #* :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#*) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#*) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#*)
  #/ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#/) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#/) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#/)
  #% :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#%) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#%) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#%)
  #^ :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(#^) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#^) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#^)

  log :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
log = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
log HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
log
  ln :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
ln = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ln HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ln
  exp :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
exp = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
exp HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
exp
  sin :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
sin = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sin HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sin
  cos :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
cos = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cos HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cos
  tan :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
tan = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
tan HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
tan
  csc :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
csc = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
csc HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
csc
  sec :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
sec = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sec HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sec
  cot :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
cot = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cot HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cot
  arcsin :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
arcsin = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arcsin HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arcsin
  arccos :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
arccos = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arccos HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arccos
  arctan :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
arctan = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arctan HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arctan
  floor :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
floor = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
floor HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
floor
  ceil :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
ceil = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ceil HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ceil

instance (Pair p) => BooleanExpression (p CppSrcCode CppHdrCode) where
  ?! :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?!) = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). BooleanExpression r => SValue r -> SValue r
(?!) HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). BooleanExpression r => SValue r -> SValue r
(?!)
  ?&& :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?&&) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?&&) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?&&)
  ?|| :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?||) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?||) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?||)

instance (Pair p) => Comparison (p CppSrcCode CppHdrCode) where
  ?< :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?<) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<)
  ?<= :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?<=) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<=) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<=)
  ?> :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?>) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>)
  ?>= :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?>=) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>=) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>=)
  ?== :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?==) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?==) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?==)
  ?!= :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
(?!=) = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?!=) HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?!=)
  
instance (Pair p) => ValueExpression (p CppSrcCode CppHdrCode) where
  inlineIf :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
inlineIf = (SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
forall (r :: * -> *).
ValueExpression r =>
SValue r -> SValue r -> SValue r -> SValue r
inlineIf HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
forall (r :: * -> *).
ValueExpression r =>
SValue r -> SValue r -> SValue r -> SValue r
inlineIf

  funcAppMixedArgs :: MixedCall (p CppSrcCode CppHdrCode)
funcAppMixedArgs n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [PairState ValueState p ValData]
-> [(PairState ValueState p VarData,
     PairState ValueState p ValData)]
-> PairState ValueState p ValData
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
forall (r :: * -> *). ValueExpression r => MixedCall r
funcAppMixedArgs String
n) (MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => MixedCall r
funcAppMixedArgs String
n)
  selfFuncAppMixedArgs :: MixedCall (p CppSrcCode CppHdrCode)
selfFuncAppMixedArgs n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [PairState ValueState p ValData]
-> [(PairState ValueState p VarData,
     PairState ValueState p ValData)]
-> PairState ValueState p ValData
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
forall (r :: * -> *). ValueExpression r => MixedCall r
selfFuncAppMixedArgs String
n) 
    (MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => MixedCall r
selfFuncAppMixedArgs String
n) 
  extFuncAppMixedArgs :: String -> MixedCall (p CppSrcCode CppHdrCode)
extFuncAppMixedArgs l :: String
l n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [PairState ValueState p ValData]
-> [(PairState ValueState p VarData,
     PairState ValueState p ValData)]
-> PairState ValueState p ValData
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
forall (r :: * -> *). ValueExpression r => String -> MixedCall r
extFuncAppMixedArgs String
l String
n) 
    (String -> MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => String -> MixedCall r
extFuncAppMixedArgs String
l String
n) 
  libFuncAppMixedArgs :: String -> MixedCall (p CppSrcCode CppHdrCode)
libFuncAppMixedArgs l :: String
l n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [PairState ValueState p ValData]
-> [(PairState ValueState p VarData,
     PairState ValueState p ValData)]
-> PairState ValueState p ValData
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
forall (r :: * -> *). ValueExpression r => String -> MixedCall r
extFuncAppMixedArgs String
l String
n) 
    (String -> MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => String -> MixedCall r
extFuncAppMixedArgs String
l String
n)
  newObjMixedArgs :: MixedCtorCall (p CppSrcCode CppHdrCode)
newObjMixedArgs = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [PairState ValueState p ValData]
-> [(PairState ValueState p VarData,
     PairState ValueState p ValData)]
-> PairState ValueState p ValData
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)
-> [SrcState ValueState ValData]
-> [(SrcState ValueState VarData, SrcState ValueState ValData)]
-> SrcState ValueState ValData
forall (r :: * -> *). ValueExpression r => MixedCtorCall r
newObjMixedArgs State ValueState (CppHdrCode TypeData)
-> [HdrState ValueState ValData]
-> [(HdrState ValueState VarData, HdrState ValueState ValData)]
-> HdrState ValueState ValData
forall (r :: * -> *). ValueExpression r => MixedCtorCall r
newObjMixedArgs
  extNewObjMixedArgs :: MixedCall (p CppSrcCode CppHdrCode)
extNewObjMixedArgs l :: String
l = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [PairState ValueState p ValData]
-> [(PairState ValueState p VarData,
     PairState ValueState p ValData)]
-> PairState ValueState p ValData
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
forall (r :: * -> *). ValueExpression r => MixedCall r
extNewObjMixedArgs String
l) 
    (MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => MixedCall r
extNewObjMixedArgs String
l)
  libNewObjMixedArgs :: MixedCall (p CppSrcCode CppHdrCode)
libNewObjMixedArgs l :: String
l = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [PairState ValueState p ValData]
-> [(PairState ValueState p VarData,
     PairState ValueState p ValData)]
-> PairState ValueState p ValData
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
forall (r :: * -> *). ValueExpression r => MixedCall r
extNewObjMixedArgs String
l) 
    (MixedCall CppHdrCode
forall (r :: * -> *). ValueExpression r => MixedCall r
extNewObjMixedArgs String
l)

  lambda :: [SVariable (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
lambda = ([SrcState ValueState VarData]
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> ([HdrState ValueState VarData]
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> [PairState ValueState p VarData]
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 VarData]
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *).
ValueExpression r =>
[SVariable r] -> SValue r -> SValue r
lambda [HdrState ValueState VarData]
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
ValueExpression r =>
[SVariable r] -> SValue r -> SValue r
lambda

  notNull :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
notNull = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). ValueExpression r => SValue r -> SValue r
notNull HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). ValueExpression r => SValue r -> SValue r
notNull
  
instance (Pair p) => RenderValue (p CppSrcCode CppHdrCode) where
  inputFunc :: SValue (p CppSrcCode CppHdrCode)
inputFunc = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r
inputFunc HdrState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r
inputFunc
  printFunc :: SValue (p CppSrcCode CppHdrCode)
printFunc = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r
printFunc HdrState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r
printFunc
  printLnFunc :: SValue (p CppSrcCode CppHdrCode)
printLnFunc = (CppSrcCode ValData
 -> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
-> HdrState ValueState ValData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode ValData
-> CppHdrCode ValData -> p CppSrcCode CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc HdrState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc
  printFileFunc :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
printFileFunc = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileFunc HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileFunc
  printFileLnFunc :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
printFileLnFunc = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileLnFunc HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileLnFunc

  cast :: VSType (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
cast = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *).
RenderValue r =>
VSType r -> SValue r -> SValue r
cast State ValueState (CppHdrCode TypeData)
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *).
RenderValue r =>
VSType r -> SValue r -> SValue r
cast

  call :: Maybe String -> Maybe Doc -> MixedCall (p CppSrcCode CppHdrCode)
call l :: Maybe String
l o :: Maybe Doc
o n :: String
n = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> [State ValueState (p CppSrcCode CppHdrCode ValData)]
-> [(PairState ValueState p VarData,
     State ValueState (p CppSrcCode CppHdrCode ValData))]
-> State ValueState (p CppSrcCode CppHdrCode ValData)
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
forall (r :: * -> *).
RenderValue r =>
Maybe String -> Maybe Doc -> MixedCall r
call Maybe String
l Maybe Doc
o String
n) (Maybe String -> Maybe Doc -> MixedCall CppHdrCode
forall (r :: * -> *).
RenderValue r =>
Maybe String -> Maybe Doc -> MixedCall r
call Maybe String
l Maybe Doc
o String
n)

  valFromData :: Maybe Int
-> VSType (p CppSrcCode CppHdrCode)
-> Doc
-> SValue (p CppSrcCode CppHdrCode)
valFromData p :: Maybe Int
p t' :: VSType (p CppSrcCode CppHdrCode)
t' d :: Doc
d = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> State ValueState (p CppSrcCode CppHdrCode ValData)
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 (\t :: State ValueState (CppSrcCode TypeData)
t -> Maybe Int -> VSType CppSrcCode -> Doc -> SValue CppSrcCode
forall (r :: * -> *).
RenderValue r =>
Maybe Int -> VSType r -> Doc -> SValue r
valFromData Maybe Int
p State ValueState (CppSrcCode TypeData)
VSType CppSrcCode
t Doc
d) 
    (\t :: State ValueState (CppHdrCode TypeData)
t -> Maybe Int -> VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *).
RenderValue r =>
Maybe Int -> VSType r -> Doc -> SValue r
valFromData Maybe Int
p State ValueState (CppHdrCode TypeData)
VSType CppHdrCode
t Doc
d) PairState ValueState p TypeData
VSType (p CppSrcCode CppHdrCode)
t'

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

instance (Pair p) => InternalValueExp (p CppSrcCode CppHdrCode) where
  objMethodCallMixedArgs' :: String
-> VSType (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> NamedArgs (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
objMethodCallMixedArgs' f :: String
f = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState ValData
 -> [SrcState ValueState ValData]
 -> [(SrcState ValueState VarData, SrcState ValueState ValData)]
 -> SrcState ValueState ValData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState ValData
    -> [HdrState ValueState ValData]
    -> [(HdrState ValueState VarData, HdrState ValueState ValData)]
    -> HdrState ValueState ValData)
-> PairState ValueState p TypeData
-> PairState ValueState p ValData
-> [PairState ValueState p ValData]
-> [(PairState ValueState p VarData,
     PairState ValueState p ValData)]
-> PairState ValueState p ValData
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
-> VSType CppSrcCode
-> SValue CppSrcCode
-> [SValue CppSrcCode]
-> NamedArgs CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
InternalValueExp r =>
String
-> VSType r -> SValue r -> [SValue r] -> NamedArgs r -> SValue r
objMethodCallMixedArgs' String
f)
    (String
-> VSType CppHdrCode
-> SValue CppHdrCode
-> [SValue CppHdrCode]
-> NamedArgs CppHdrCode
-> SValue CppHdrCode
forall (r :: * -> *).
InternalValueExp r =>
String
-> VSType r -> SValue r -> [SValue r] -> NamedArgs r -> SValue r
objMethodCallMixedArgs' String
f)

instance (Pair p) => FunctionSym (p CppSrcCode CppHdrCode) where
  type Function (p CppSrcCode CppHdrCode) = FuncData
  func :: String
-> VSType (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> VSFunction (p CppSrcCode CppHdrCode)
func l :: String
l = (State ValueState (CppSrcCode TypeData)
 -> [SrcState ValueState ValData] -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> [HdrState ValueState ValData] -> HdrState ValueState FuncData)
-> PairState ValueState p TypeData
-> [PairState ValueState p ValData]
-> PairState ValueState p 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
-> VSType CppSrcCode
-> [SValue CppSrcCode]
-> VSFunction CppSrcCode
forall (r :: * -> *).
FunctionSym r =>
String -> VSType r -> [SValue r] -> VSFunction r
func String
l) (String
-> VSType CppHdrCode
-> [SValue CppHdrCode]
-> VSFunction CppHdrCode
forall (r :: * -> *).
FunctionSym r =>
String -> VSType r -> [SValue r] -> VSFunction r
func String
l)
  objAccess :: SValue (p CppSrcCode CppHdrCode)
-> VSFunction (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
objAccess = (SrcState ValueState ValData
 -> SrcState ValueState FuncData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState FuncData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p FuncData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState FuncData -> SrcState ValueState ValData
forall (r :: * -> *).
FunctionSym r =>
SValue r -> VSFunction r -> SValue r
objAccess HdrState ValueState ValData
-> HdrState ValueState FuncData -> HdrState ValueState ValData
forall (r :: * -> *).
FunctionSym r =>
SValue r -> VSFunction r -> SValue r
objAccess
  
instance (Pair p) => GetSet (p CppSrcCode CppHdrCode) where
  get :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
get = (SrcState ValueState ValData
 -> SrcState ValueState VarData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState VarData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p VarData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState VarData -> SrcState ValueState ValData
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r
get HdrState ValueState ValData
-> HdrState ValueState VarData -> HdrState ValueState ValData
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r
get
  set :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
set = (SrcState ValueState ValData
 -> SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p VarData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState VarData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r -> SValue r
set HdrState ValueState ValData
-> HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r -> SValue r
set

instance (Pair p) => List (p CppSrcCode CppHdrCode) where
  listSize :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
listSize = (SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData -> SrcState ValueState ValData
forall (r :: * -> *). List r => SValue r -> SValue r
listSize HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). List r => SValue r -> SValue r
listSize
  listAdd :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
listAdd = (SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
forall (r :: * -> *).
List r =>
SValue r -> SValue r -> SValue r -> SValue r
listAdd HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
forall (r :: * -> *).
List r =>
SValue r -> SValue r -> SValue r -> SValue r
listAdd
  listAppend :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
listAppend = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *). List r => SValue r -> SValue r -> SValue r
listAppend HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). List r => SValue r -> SValue r -> SValue r
listAppend
  listAccess :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
listAccess = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *). List r => SValue r -> SValue r -> SValue r
listAccess HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). List r => SValue r -> SValue r -> SValue r
listAccess
  listSet :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
listSet = (SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
forall (r :: * -> *).
List r =>
SValue r -> SValue r -> SValue r -> SValue r
listSet HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
forall (r :: * -> *).
List r =>
SValue r -> SValue r -> SValue r -> SValue r
listSet
  indexOf :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
indexOf = (SrcState ValueState ValData
 -> SrcState ValueState ValData -> SrcState ValueState ValData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData -> HdrState ValueState ValData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
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 ValData
-> SrcState ValueState ValData -> SrcState ValueState ValData
forall (r :: * -> *). List r => SValue r -> SValue r -> SValue r
indexOf HdrState ValueState ValData
-> HdrState ValueState ValData -> HdrState ValueState ValData
forall (r :: * -> *). List r => SValue r -> SValue r -> SValue r
indexOf

instance (Pair p) => InternalList (p CppSrcCode CppHdrCode) where
  listSlice' :: Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSBlock (p CppSrcCode CppHdrCode)
listSlice' b :: Maybe (SValue (p CppSrcCode CppHdrCode))
b e :: Maybe (SValue (p CppSrcCode CppHdrCode))
e s :: Maybe (SValue (p CppSrcCode CppHdrCode))
s vr :: SVariable (p CppSrcCode CppHdrCode)
vr vl :: SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState ValueState ValData -> SrcState MethodState Doc)
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData -> HdrState MethodState Doc)
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p 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 (SValue CppSrcCode)
-> Maybe (SValue CppSrcCode)
-> Maybe (SValue CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSBlock CppSrcCode
forall (r :: * -> *).
InternalList r =>
Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MSBlock r
listSlice' ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> SrcState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (SrcState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
b) ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> SrcState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (SrcState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
e) 
      ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> SrcState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (SrcState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
s))
    (Maybe (SValue CppHdrCode)
-> Maybe (SValue CppHdrCode)
-> Maybe (SValue CppHdrCode)
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> MSBlock CppHdrCode
forall (r :: * -> *).
InternalList r =>
Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MSBlock r
listSlice' ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> HdrState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (HdrState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> HdrState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
b) ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> HdrState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (HdrState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> HdrState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
e) 
      ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> HdrState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (HdrState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> HdrState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
s)) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS State ValueState (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
vl)

instance (Pair p) => InternalGetSet (p CppSrcCode CppHdrCode) where  
  getFunc :: SVariable (p CppSrcCode CppHdrCode)
-> VSFunction (p CppSrcCode CppHdrCode)
getFunc = (SrcState ValueState VarData -> SrcState ValueState FuncData)
-> (HdrState ValueState VarData -> HdrState ValueState FuncData)
-> PairState ValueState p VarData
-> PairState ValueState p 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 VarData -> SrcState ValueState FuncData
forall (r :: * -> *).
InternalGetSet r =>
SVariable r -> VSFunction r
getFunc HdrState ValueState VarData -> HdrState ValueState FuncData
forall (r :: * -> *).
InternalGetSet r =>
SVariable r -> VSFunction r
getFunc
  setFunc :: VSType (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> VSFunction (p CppSrcCode CppHdrCode)
setFunc = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState ValueState FuncData)
-> PairState ValueState p TypeData
-> PairState ValueState p VarData
-> PairState ValueState p ValData
-> PairState ValueState p 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 VarData
-> SrcState ValueState ValData
-> SrcState ValueState FuncData
forall (r :: * -> *).
InternalGetSet r =>
VSType r -> SVariable r -> SValue r -> VSFunction r
setFunc State ValueState (CppHdrCode TypeData)
-> HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState ValueState FuncData
forall (r :: * -> *).
InternalGetSet r =>
VSType r -> SVariable r -> SValue r -> VSFunction r
setFunc

instance (Pair p) => InternalListFunc (p CppSrcCode CppHdrCode) where  
  listSizeFunc :: VSFunction (p CppSrcCode CppHdrCode)
listSizeFunc = (CppSrcCode FuncData
 -> CppHdrCode FuncData -> p CppSrcCode CppHdrCode FuncData)
-> SrcState ValueState FuncData
-> HdrState ValueState FuncData
-> State ValueState (p CppSrcCode CppHdrCode FuncData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode FuncData
-> CppHdrCode FuncData -> p CppSrcCode CppHdrCode FuncData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState ValueState FuncData
forall (r :: * -> *). InternalListFunc r => VSFunction r
listSizeFunc HdrState ValueState FuncData
forall (r :: * -> *). InternalListFunc r => VSFunction r
listSizeFunc
  listAddFunc :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> VSFunction (p CppSrcCode CppHdrCode)
listAddFunc = (SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState FuncData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState FuncData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> State ValueState (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 SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
SValue r -> SValue r -> SValue r -> VSFunction r
listAddFunc HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
SValue r -> SValue r -> SValue r -> VSFunction r
listAddFunc
  listAppendFunc :: SValue (p CppSrcCode CppHdrCode)
-> VSFunction (p CppSrcCode CppHdrCode)
listAppendFunc = (SrcState ValueState ValData -> SrcState ValueState FuncData)
-> (HdrState ValueState ValData -> HdrState ValueState FuncData)
-> PairState ValueState p ValData
-> State ValueState (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 ValData -> SrcState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
SValue r -> VSFunction r
listAppendFunc HdrState ValueState ValData -> HdrState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
SValue r -> VSFunction r
listAppendFunc
  listAccessFunc :: VSType (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> VSFunction (p CppSrcCode CppHdrCode)
listAccessFunc = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState ValData -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState ValData -> HdrState ValueState FuncData)
-> PairState ValueState p TypeData
-> PairState ValueState p ValData
-> State ValueState (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)
-> SrcState ValueState ValData -> SrcState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
VSType r -> SValue r -> VSFunction r
listAccessFunc State ValueState (CppHdrCode TypeData)
-> HdrState ValueState ValData -> HdrState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
VSType r -> SValue r -> VSFunction r
listAccessFunc
  listSetFunc :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> VSFunction (p CppSrcCode CppHdrCode)
listSetFunc = (SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState FuncData)
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState FuncData)
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> PairState ValueState p ValData
-> State ValueState (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 SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
SValue r -> SValue r -> SValue r -> VSFunction r
listSetFunc HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState FuncData
forall (r :: * -> *).
InternalListFunc r =>
SValue r -> SValue r -> SValue r -> VSFunction r
listSetFunc

instance (Pair p) => RenderFunction (p CppSrcCode CppHdrCode) where  
  funcFromData :: Doc
-> VSType (p CppSrcCode CppHdrCode)
-> VSFunction (p CppSrcCode CppHdrCode)
funcFromData d :: Doc
d = (State ValueState (CppSrcCode TypeData)
 -> SrcState ValueState FuncData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState ValueState FuncData)
-> PairState ValueState p TypeData
-> PairState ValueState p 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 -> VSType CppSrcCode -> VSFunction CppSrcCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
d) (Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
d)
  
instance (Pair p) => FunctionElim (p CppSrcCode CppHdrCode) where  
  functionType :: p CppSrcCode CppHdrCode (Function (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Type (p CppSrcCode CppHdrCode))
functionType f :: p CppSrcCode CppHdrCode (Function (p CppSrcCode CppHdrCode))
f = CppSrcCode TypeData
-> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (CppSrcCode (Function CppSrcCode) -> CppSrcCode TypeData
forall (r :: * -> *).
FunctionElim r =>
r (Function r) -> r (Type r)
functionType (CppSrcCode (Function CppSrcCode) -> CppSrcCode TypeData)
-> CppSrcCode (Function CppSrcCode) -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppSrcCode FuncData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode FuncData
p CppSrcCode CppHdrCode (Function (p CppSrcCode CppHdrCode))
f) (CppHdrCode (Function CppHdrCode) -> CppHdrCode TypeData
forall (r :: * -> *).
FunctionElim r =>
r (Function r) -> r (Type r)
functionType (CppHdrCode (Function CppHdrCode) -> CppHdrCode TypeData)
-> CppHdrCode (Function CppHdrCode) -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppHdrCode FuncData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode FuncData
p CppSrcCode CppHdrCode (Function (p CppSrcCode CppHdrCode))
f)
  function :: p CppSrcCode CppHdrCode (Function (p CppSrcCode CppHdrCode)) -> Doc
function f :: p CppSrcCode CppHdrCode (Function (p CppSrcCode CppHdrCode))
f = CppSrcCode (Function CppSrcCode) -> Doc
forall (r :: * -> *). FunctionElim r => r (Function r) -> Doc
RC.function (CppSrcCode (Function CppSrcCode) -> Doc)
-> CppSrcCode (Function CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode FuncData -> CppSrcCode FuncData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode FuncData
p CppSrcCode CppHdrCode (Function (p CppSrcCode CppHdrCode))
f

instance (Pair p) => InternalAssignStmt (p CppSrcCode CppHdrCode) where
  multiAssign :: [SVariable (p CppSrcCode CppHdrCode)]
-> [SValue (p CppSrcCode CppHdrCode)]
-> MSStatement (p CppSrcCode CppHdrCode)
multiAssign vrs :: [SVariable (p CppSrcCode CppHdrCode)]
vrs vls :: [SValue (p CppSrcCode CppHdrCode)]
vls = ([SrcState ValueState VarData]
 -> [SrcState ValueState ValData]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState VarData]
    -> [HdrState ValueState ValData]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p VarData]
-> [PairState MethodState p ValData]
-> PairState MethodState p (Doc, Terminator)
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 VarData]
-> [SrcState ValueState ValData]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
InternalAssignStmt r =>
[SVariable r] -> [SValue r] -> MSStatement r
multiAssign [HdrState ValueState VarData]
-> [HdrState ValueState ValData]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
InternalAssignStmt r =>
[SVariable r] -> [SValue r] -> MSStatement r
multiAssign 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
vrs) ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
[SValue (p CppSrcCode CppHdrCode)]
vls)
    
instance (Pair p) => InternalIOStmt (p CppSrcCode CppHdrCode) where
  -- Another Maybe/State combination
  printSt :: Bool
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
printSt nl :: Bool
nl f :: Maybe (SValue (p CppSrcCode CppHdrCode))
f p :: SValue (p CppSrcCode CppHdrCode)
p v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
InternalIOStmt r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
printSt Bool
nl ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> SrcState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (SrcState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
f)) 
    (Bool
-> Maybe (SValue CppHdrCode)
-> SValue CppHdrCode
-> SValue CppHdrCode
-> MSStatement CppHdrCode
forall (r :: * -> *).
InternalIOStmt r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
printSt Bool
nl ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> HdrState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (HdrState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> HdrState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
f)) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS State ValueState (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
p) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS State ValueState (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)

instance (Pair p) => InternalControlStmt (p CppSrcCode CppHdrCode) where
  multiReturn :: [SValue (p CppSrcCode CppHdrCode)]
-> MSStatement (p CppSrcCode CppHdrCode)
multiReturn = ([SrcState ValueState ValData]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState ValData]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p ValData]
-> PairState MethodState p (Doc, Terminator)
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 ValueState ValData]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
InternalControlStmt r =>
[SValue r] -> MSStatement r
multiReturn [HdrState ValueState ValData]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
InternalControlStmt r =>
[SValue r] -> MSStatement r
multiReturn ([PairState MethodState p ValData]
 -> PairState MethodState p (Doc, Terminator))
-> ([StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
    -> [PairState MethodState p ValData])
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> PairState MethodState p (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS)
    
instance (Pair p) => RenderStatement (p CppSrcCode CppHdrCode) where
  stmt :: MSStatement (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
stmt = (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState MethodState (Doc, Terminator)
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p (Doc, Terminator)
-> PairState MethodState p (Doc, Terminator)
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, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
RenderStatement r =>
MSStatement r -> MSStatement r
stmt HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
RenderStatement r =>
MSStatement r -> MSStatement r
stmt
  loopStmt :: MSStatement (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
loopStmt = (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState MethodState (Doc, Terminator)
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p (Doc, Terminator)
-> PairState MethodState p (Doc, Terminator)
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, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
RenderStatement r =>
MSStatement r -> MSStatement r
loopStmt HdrState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
RenderStatement r =>
MSStatement r -> MSStatement r
loopStmt

  emptyStmt :: MSStatement (p CppSrcCode CppHdrCode)
emptyStmt = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> PairState MethodState p (Doc, Terminator)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  
  stmtFromData :: Doc -> Terminator -> MSStatement (p CppSrcCode CppHdrCode)
stmtFromData d :: Doc
d t :: Terminator
t = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> PairState MethodState p (Doc, Terminator)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (Doc -> Terminator -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderStatement r =>
Doc -> Terminator -> MSStatement r
stmtFromData Doc
d Terminator
t) (Doc -> Terminator -> MSStatement CppHdrCode
forall (r :: * -> *).
RenderStatement r =>
Doc -> Terminator -> MSStatement r
stmtFromData Doc
d Terminator
t)

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

instance (Pair p) => StatementSym (p CppSrcCode CppHdrCode) where
  type Statement (p CppSrcCode CppHdrCode) = (Doc, Terminator)
  valStmt :: SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
valStmt = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (PairState MethodState p ValData
 -> PairState MethodState p (Doc, Terminator))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
    -> PairState MethodState p ValData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS
  multi :: [MSStatement (p CppSrcCode CppHdrCode)]
-> MSStatement (p CppSrcCode CppHdrCode)
multi = ([SrcState MethodState (Doc, Terminator)]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState MethodState (Doc, Terminator)]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p (Doc, Terminator)]
-> PairState MethodState p (Doc, Terminator)
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, Terminator)]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
StatementSym r =>
[MSStatement r] -> MSStatement r
multi [HdrState MethodState (Doc, Terminator)]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
StatementSym r =>
[MSStatement r] -> MSStatement r
multi

instance (Pair p) => AssignStatement (p CppSrcCode CppHdrCode) where
  assign :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
assign vr :: SVariable (p CppSrcCode CppHdrCode)
vr vl :: SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
assign HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
assign (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
vl)
  &-= :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
(&-=) vr :: SVariable (p CppSrcCode CppHdrCode)
vr vl :: SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
(&-=) HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
(&-=) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
vl)
  &+= :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
(&+=) vr :: SVariable (p CppSrcCode CppHdrCode)
vr vl :: SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
(&+=) HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
(&+=) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
vl)
  &++ :: SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
(&++) vl :: SVariable (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> MSStatement r
(&++) HdrState ValueState VarData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> MSStatement r
(&++) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vl)
  &-- :: SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
(&--) vl :: SVariable (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> MSStatement r
(&--) HdrState ValueState VarData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> MSStatement r
(&--) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vl)

instance (Pair p) => DeclStatement (p CppSrcCode CppHdrCode) where
  varDec :: SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
varDec vr :: SVariable (p CppSrcCode CppHdrCode)
vr = (SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec HdrState ValueState VarData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr)
  varDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
varDecDef vr :: SVariable (p CppSrcCode CppHdrCode)
vr vl :: SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
varDecDef HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
varDecDef (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
vl)
  listDec :: Integer
-> SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
listDec n :: Integer
n vr :: SVariable (p CppSrcCode CppHdrCode)
vr = (SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 (Integer -> SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
Integer -> SVariable r -> MSStatement r
listDec Integer
n) (Integer -> SVariable CppHdrCode -> MSStatement CppHdrCode
forall (r :: * -> *).
DeclStatement r =>
Integer -> SVariable r -> MSStatement r
listDec Integer
n) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr)
  listDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> MSStatement (p CppSrcCode CppHdrCode)
listDecDef vr :: SVariable (p CppSrcCode CppHdrCode)
vr vs :: [SValue (p CppSrcCode CppHdrCode)]
vs = (SrcState ValueState VarData
 -> [SrcState ValueState ValData]
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> [HdrState ValueState ValData]
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> [PairState MethodState p ValData]
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> [SrcState ValueState ValData]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> [SValue r] -> MSStatement r
listDecDef HdrState ValueState VarData
-> [HdrState ValueState ValData]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> [SValue r] -> MSStatement r
listDecDef (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
[SValue (p CppSrcCode CppHdrCode)]
vs)
  arrayDec :: Integer
-> SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
arrayDec n :: Integer
n vr :: SVariable (p CppSrcCode CppHdrCode)
vr = (SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 (Integer -> SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
Integer -> SVariable r -> MSStatement r
arrayDec Integer
n) (Integer -> SVariable CppHdrCode -> MSStatement CppHdrCode
forall (r :: * -> *).
DeclStatement r =>
Integer -> SVariable r -> MSStatement r
arrayDec Integer
n) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr)
  arrayDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> MSStatement (p CppSrcCode CppHdrCode)
arrayDecDef vr :: SVariable (p CppSrcCode CppHdrCode)
vr vs :: [SValue (p CppSrcCode CppHdrCode)]
vs = (SrcState ValueState VarData
 -> [SrcState ValueState ValData]
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> [HdrState ValueState ValData]
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> [PairState MethodState p ValData]
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> [SrcState ValueState ValData]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> [SValue r] -> MSStatement r
arrayDecDef HdrState ValueState VarData
-> [HdrState ValueState ValData]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> [SValue r] -> MSStatement r
arrayDecDef (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr)
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
[SValue (p CppSrcCode CppHdrCode)]
vs)
  objDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
objDecDef o :: SVariable (p CppSrcCode CppHdrCode)
o v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
objDecDef HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
objDecDef (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
o) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)
  objDecNew :: SVariable (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> MSStatement (p CppSrcCode CppHdrCode)
objDecNew vr :: SVariable (p CppSrcCode CppHdrCode)
vr vs :: [SValue (p CppSrcCode CppHdrCode)]
vs = (SrcState ValueState VarData
 -> [SrcState ValueState ValData]
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> [HdrState ValueState ValData]
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> [PairState MethodState p ValData]
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> [SrcState ValueState ValData]
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> [SValue r] -> MSStatement r
objDecNew HdrState ValueState VarData
-> [HdrState ValueState ValData]
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> [SValue r] -> MSStatement r
objDecNew (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
[SValue (p CppSrcCode CppHdrCode)]
vs)
  extObjDecNew :: String
-> SVariable (p CppSrcCode CppHdrCode)
-> [SValue (p CppSrcCode CppHdrCode)]
-> MSStatement (p CppSrcCode CppHdrCode)
extObjDecNew lib :: String
lib vr :: SVariable (p CppSrcCode CppHdrCode)
vr vs :: [SValue (p CppSrcCode CppHdrCode)]
vs = (SrcState ValueState VarData
 -> [SrcState ValueState ValData]
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> [HdrState ValueState ValData]
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> [PairState MethodState p ValData]
-> PairState MethodState p (Doc, Terminator)
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
-> SVariable CppSrcCode
-> [SValue CppSrcCode]
-> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
String -> SVariable r -> [SValue r] -> MSStatement r
extObjDecNew String
lib) (String
-> SVariable CppHdrCode
-> [SValue CppHdrCode]
-> MSStatement CppHdrCode
forall (r :: * -> *).
DeclStatement r =>
String -> SVariable r -> [SValue r] -> MSStatement r
extObjDecNew String
lib) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
[SValue (p CppSrcCode CppHdrCode)]
vs)
  constDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
constDecDef vr :: SVariable (p CppSrcCode CppHdrCode)
vr vl :: SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
constDecDef HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
constDecDef (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
vl)
  funcDecDef :: SVariable (p CppSrcCode CppHdrCode)
-> [SVariable (p CppSrcCode CppHdrCode)]
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
funcDecDef v :: SVariable (p CppSrcCode CppHdrCode)
v ps :: [SVariable (p CppSrcCode CppHdrCode)]
ps = (SrcState ValueState VarData
 -> [SrcState ValueState VarData]
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> [HdrState ValueState VarData]
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> [PairState MethodState p VarData]
-> PairState MethodState p Doc
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> [SrcState ValueState VarData]
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> [SVariable r] -> MSBody r -> MSStatement r
funcDecDef HdrState ValueState VarData
-> [HdrState ValueState VarData]
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> [SVariable r] -> MSBody r -> MSStatement r
funcDecDef (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
v) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
ps)

instance (Pair p) => IOStatement (p CppSrcCode CppHdrCode) where
  print :: SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
print = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
print HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
print (PairState MethodState p ValData
 -> PairState MethodState p (Doc, Terminator))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
    -> PairState MethodState p ValData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS
  printLn :: SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
printLn = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
printLn HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
printLn (PairState MethodState p ValData
 -> PairState MethodState p (Doc, Terminator))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
    -> PairState MethodState p ValData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS
  printStr :: String -> MSStatement (p CppSrcCode CppHdrCode)
printStr s :: String
s = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> PairState MethodState p (Doc, Terminator)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (String -> MSStatement CppSrcCode
forall (r :: * -> *). IOStatement r => String -> MSStatement r
printStr String
s) (String -> MSStatement CppHdrCode
forall (r :: * -> *). IOStatement r => String -> MSStatement r
printStr String
s)
  printStrLn :: String -> MSStatement (p CppSrcCode CppHdrCode)
printStrLn s :: String
s = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> PairState MethodState p (Doc, Terminator)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (String -> MSStatement CppSrcCode
forall (r :: * -> *). IOStatement r => String -> MSStatement r
printStrLn String
s) (String -> MSStatement CppHdrCode
forall (r :: * -> *). IOStatement r => String -> MSStatement r
printStrLn String
s)

  printFile :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
printFile f :: SValue (p CppSrcCode CppHdrCode)
f v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SValue r -> MSStatement r
printFile HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SValue r -> MSStatement r
printFile (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
f) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)
  printFileLn :: SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
printFileLn f :: SValue (p CppSrcCode CppHdrCode)
f v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SValue r -> MSStatement r
printFileLn HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SValue r -> MSStatement r
printFileLn (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
f) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)
  printFileStr :: SValue (p CppSrcCode CppHdrCode)
-> String -> MSStatement (p CppSrcCode CppHdrCode)
printFileStr f :: SValue (p CppSrcCode CppHdrCode)
f s :: String
s = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 (SValue CppSrcCode -> String -> MSStatement CppSrcCode
forall (r :: * -> *).
IOStatement r =>
SValue r -> String -> MSStatement r
`printFileStr` String
s) (SValue CppHdrCode -> String -> MSStatement CppHdrCode
forall (r :: * -> *).
IOStatement r =>
SValue r -> String -> MSStatement r
`printFileStr` String
s) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
f)
  printFileStrLn :: SValue (p CppSrcCode CppHdrCode)
-> String -> MSStatement (p CppSrcCode CppHdrCode)
printFileStrLn f :: SValue (p CppSrcCode CppHdrCode)
f s :: String
s = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 (SValue CppSrcCode -> String -> MSStatement CppSrcCode
forall (r :: * -> *).
IOStatement r =>
SValue r -> String -> MSStatement r
`printFileStrLn` String
s) (SValue CppHdrCode -> String -> MSStatement CppHdrCode
forall (r :: * -> *).
IOStatement r =>
SValue r -> String -> MSStatement r
`printFileStrLn` String
s) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
f)

  getInput :: SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
getInput = (SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SVariable r -> MSStatement r
getInput HdrState ValueState VarData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SVariable r -> MSStatement r
getInput (PairState MethodState p VarData
 -> PairState MethodState p (Doc, Terminator))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
    -> PairState MethodState p VarData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS
  discardInput :: MSStatement (p CppSrcCode CppHdrCode)
discardInput = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> PairState MethodState p (Doc, Terminator)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => MSStatement r
discardInput HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => MSStatement r
discardInput
  getFileInput :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
getFileInput f :: SValue (p CppSrcCode CppHdrCode)
f v :: SVariable (p CppSrcCode CppHdrCode)
v = (SrcState ValueState ValData
 -> SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState ValueState VarData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SVariable r -> MSStatement r
getFileInput HdrState ValueState ValData
-> HdrState ValueState VarData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SVariable r -> MSStatement r
getFileInput (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
f) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
v)
  discardFileInput :: SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
discardFileInput = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
discardFileInput HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
discardFileInput (PairState MethodState p ValData
 -> PairState MethodState p (Doc, Terminator))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
    -> PairState MethodState p ValData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS

  openFileR :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
openFileR f :: SVariable (p CppSrcCode CppHdrCode)
f v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SVariable r -> SValue r -> MSStatement r
openFileR HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SVariable r -> SValue r -> MSStatement r
openFileR (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
f) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)
  openFileW :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
openFileW f :: SVariable (p CppSrcCode CppHdrCode)
f v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SVariable r -> SValue r -> MSStatement r
openFileW HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SVariable r -> SValue r -> MSStatement r
openFileW (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
f) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)
  openFileA :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
openFileA f :: SVariable (p CppSrcCode CppHdrCode)
f v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SVariable r -> SValue r -> MSStatement r
openFileA HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SVariable r -> SValue r -> MSStatement r
openFileA (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
f) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)
  closeFile :: SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
closeFile = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
closeFile HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
closeFile (PairState MethodState p ValData
 -> PairState MethodState p (Doc, Terminator))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
    -> PairState MethodState p ValData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS

  getFileInputLine :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
getFileInputLine f :: SValue (p CppSrcCode CppHdrCode)
f v :: SVariable (p CppSrcCode CppHdrCode)
v = (SrcState ValueState ValData
 -> SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState ValueState VarData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SVariable r -> MSStatement r
getFileInputLine HdrState ValueState ValData
-> HdrState ValueState VarData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SVariable r -> MSStatement r
getFileInputLine 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
v)
  discardFileLine :: SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
discardFileLine = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
discardFileLine HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
discardFileLine (PairState MethodState p ValData
 -> PairState MethodState p (Doc, Terminator))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
    -> PairState MethodState p ValData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS
  getFileInputAll :: SValue (p CppSrcCode CppHdrCode)
-> SVariable (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
getFileInputAll f :: SValue (p CppSrcCode CppHdrCode)
f v :: SVariable (p CppSrcCode CppHdrCode)
v = (SrcState ValueState ValData
 -> SrcState ValueState VarData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState ValueState VarData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p VarData
-> PairState MethodState p (Doc, Terminator)
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 ValData
-> SrcState ValueState VarData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SVariable r -> MSStatement r
getFileInputAll HdrState ValueState ValData
-> HdrState ValueState VarData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
IOStatement r =>
SValue r -> SVariable r -> MSStatement r
getFileInputAll 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
v)

instance (Pair p) => StringStatement (p CppSrcCode CppHdrCode) where
  stringSplit :: Char
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
stringSplit d :: Char
d vnew :: SVariable (p CppSrcCode CppHdrCode)
vnew s :: SValue (p CppSrcCode CppHdrCode)
s = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
StringStatement r =>
Char -> SVariable r -> SValue r -> MSStatement r
stringSplit Char
d) (Char
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> MSStatement CppHdrCode
forall (r :: * -> *).
StringStatement r =>
Char -> SVariable r -> SValue r -> MSStatement r
stringSplit Char
d) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vnew) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
s)

  stringListVals :: [SVariable (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
stringListVals vars :: [SVariable (p CppSrcCode CppHdrCode)]
vars sl :: SValue (p CppSrcCode CppHdrCode)
sl = ([SrcState ValueState VarData]
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState VarData]
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p VarData]
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData]
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
StringStatement r =>
[SVariable r] -> SValue r -> MSStatement r
stringListVals [HdrState ValueState VarData]
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
StringStatement r =>
[SVariable r] -> SValue r -> MSStatement r
stringListVals
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
vars) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
sl)
  stringListLists :: [SVariable (p CppSrcCode CppHdrCode)]
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
stringListLists lsts :: [SVariable (p CppSrcCode CppHdrCode)]
lsts sl :: SValue (p CppSrcCode CppHdrCode)
sl = ([SrcState ValueState VarData]
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState VarData]
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p VarData]
-> PairState MethodState p ValData
-> PairState MethodState p (Doc, Terminator)
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 VarData]
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
StringStatement r =>
[SVariable r] -> SValue r -> MSStatement r
stringListLists [HdrState ValueState VarData]
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
StringStatement r =>
[SVariable r] -> SValue r -> MSStatement r
stringListLists
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
lsts) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
sl)

instance (Pair p) => FuncAppStatement (p CppSrcCode CppHdrCode) where
  inOutCall :: InOutCall (p CppSrcCode CppHdrCode)
inOutCall n :: String
n is :: [SValue (p CppSrcCode CppHdrCode)]
is os :: [SVariable (p CppSrcCode CppHdrCode)]
os bs :: [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState ValData]
 -> [SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState ValData]
    -> [HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p ValData]
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> PairState MethodState p (Doc, Terminator)
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
forall (r :: * -> *). FuncAppStatement r => InOutCall r
inOutCall String
n) (InOutCall CppHdrCode
forall (r :: * -> *). FuncAppStatement r => InOutCall r
inOutCall String
n) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
[SValue (p CppSrcCode CppHdrCode)]
is) ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
os) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
bs)
  selfInOutCall :: InOutCall (p CppSrcCode CppHdrCode)
selfInOutCall n :: String
n is :: [SValue (p CppSrcCode CppHdrCode)]
is os :: [SVariable (p CppSrcCode CppHdrCode)]
os bs :: [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState ValData]
 -> [SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState ValData]
    -> [HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p ValData]
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> PairState MethodState p (Doc, Terminator)
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
forall (r :: * -> *). FuncAppStatement r => InOutCall r
selfInOutCall String
n) (InOutCall CppHdrCode
forall (r :: * -> *). FuncAppStatement r => InOutCall r
selfInOutCall String
n)
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
[SValue (p CppSrcCode CppHdrCode)]
is) ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
os) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
bs)
  extInOutCall :: String -> InOutCall (p CppSrcCode CppHdrCode)
extInOutCall m :: String
m n :: String
n is :: [SValue (p CppSrcCode CppHdrCode)]
is os :: [SVariable (p CppSrcCode CppHdrCode)]
os bs :: [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState ValData]
 -> [SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState ValData]
    -> [HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p ValData]
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> PairState MethodState p (Doc, Terminator)
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
forall (r :: * -> *). FuncAppStatement r => String -> InOutCall r
extInOutCall String
m String
n) (String -> InOutCall CppHdrCode
forall (r :: * -> *). FuncAppStatement r => String -> InOutCall r
extInOutCall String
m String
n) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)]
[SValue (p CppSrcCode CppHdrCode)]
is) ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
os) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
bs)

instance (Pair p) => CommentStatement (p CppSrcCode CppHdrCode) where
  comment :: String -> MSStatement (p CppSrcCode CppHdrCode)
comment cmt :: String
cmt = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (String -> MSStatement CppSrcCode
forall (r :: * -> *). CommentStatement r => String -> MSStatement r
comment String
cmt) (String -> MSStatement CppHdrCode
forall (r :: * -> *). CommentStatement r => String -> MSStatement r
comment String
cmt)

instance (Pair p) => ControlStatement (p CppSrcCode CppHdrCode) where
  break :: MSStatement (p CppSrcCode CppHdrCode)
break = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). ControlStatement r => MSStatement r
break HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). ControlStatement r => MSStatement r
break  
  continue :: MSStatement (p CppSrcCode CppHdrCode)
continue = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). ControlStatement r => MSStatement r
continue HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). ControlStatement r => MSStatement r
continue

  returnStmt :: SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
returnStmt = (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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 ValData
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSStatement r
returnStmt HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSStatement r
returnStmt (PairState MethodState p ValData
 -> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator)))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
    -> PairState MethodState p ValData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS

  throw :: String -> MSStatement (p CppSrcCode CppHdrCode)
throw errMsg :: String
errMsg = (CppSrcCode (Doc, Terminator)
 -> CppHdrCode (Doc, Terminator)
 -> p CppSrcCode CppHdrCode (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> HdrState MethodState (Doc, Terminator)
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues CppSrcCode (Doc, Terminator)
-> CppHdrCode (Doc, Terminator)
-> p CppSrcCode CppHdrCode (Doc, Terminator)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (String -> MSStatement CppSrcCode
forall (r :: * -> *). ControlStatement r => String -> MSStatement r
throw String
errMsg) (String -> MSStatement CppHdrCode
forall (r :: * -> *). ControlStatement r => String -> MSStatement r
throw String
errMsg)

  ifCond :: [(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
ifCond bs :: [(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
bs = ([SrcState ValueState ValData]
 -> [SrcState MethodState Doc]
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState ValData]
    -> [HdrState MethodState Doc]
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p ValData]
-> [PairState MethodState p Doc]
-> PairState MethodState p Doc
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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
    (\cs :: [SrcState ValueState ValData]
cs bods :: [SrcState MethodState Doc]
bods -> [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
ControlStatement r =>
[(SValue r, MSBody r)] -> MSBody r -> MSStatement r
ifCond ([SrcState ValueState ValData]
-> [SrcState MethodState Doc]
-> [(SrcState ValueState ValData, SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState ValueState ValData]
cs [SrcState MethodState Doc]
bods)) 
    (\cs :: [HdrState ValueState ValData]
cs bods :: [HdrState MethodState Doc]
bods -> [(SValue CppHdrCode, MSBody CppHdrCode)]
-> MSBody CppHdrCode -> MSStatement CppHdrCode
forall (r :: * -> *).
ControlStatement r =>
[(SValue r, MSBody r)] -> MSBody r -> MSStatement r
ifCond ([HdrState ValueState ValData]
-> [HdrState MethodState Doc]
-> [(HdrState ValueState ValData, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState ValData]
cs [HdrState MethodState Doc]
bods)) 
    (((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)
 -> PairState MethodState p ValData)
-> [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
    PairState MethodState p Doc)
-> PairState MethodState p ValData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
 PairState MethodState p Doc)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
forall a b. (a, b) -> a
fst) [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)]
[(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
bs) (((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)
 -> PairState MethodState p Doc)
-> [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)]
-> [PairState MethodState p Doc]
forall a b. (a -> b) -> [a] -> [b]
map (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
 PairState MethodState p Doc)
-> PairState MethodState p Doc
forall a b. (a, b) -> b
snd [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)]
[(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
bs)
  switch :: SValue (p CppSrcCode CppHdrCode)
-> [(SValue (p CppSrcCode CppHdrCode),
     MSBody (p CppSrcCode CppHdrCode))]
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
switch v :: SValue (p CppSrcCode CppHdrCode)
v cs :: [(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
cs = (SrcState ValueState ValData
 -> [SrcState ValueState ValData]
 -> [SrcState MethodState Doc]
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> [HdrState ValueState ValData]
    -> [HdrState MethodState Doc]
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> [PairState MethodState p ValData]
-> [PairState MethodState p Doc]
-> PairState MethodState p Doc
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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 
    (\s :: SrcState ValueState ValData
s cv :: [SrcState ValueState ValData]
cv cb :: [SrcState MethodState Doc]
cb -> SValue CppSrcCode
-> [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
ControlStatement r =>
SValue r -> [(SValue r, MSBody r)] -> MSBody r -> MSStatement r
switch SrcState ValueState ValData
SValue CppSrcCode
s ([SrcState ValueState ValData]
-> [SrcState MethodState Doc]
-> [(SrcState ValueState ValData, SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState ValueState ValData]
cv [SrcState MethodState Doc]
cb))
    (\s :: HdrState ValueState ValData
s cv :: [HdrState ValueState ValData]
cv cb :: [HdrState MethodState Doc]
cb -> SValue CppHdrCode
-> [(SValue CppHdrCode, MSBody CppHdrCode)]
-> MSBody CppHdrCode
-> MSStatement CppHdrCode
forall (r :: * -> *).
ControlStatement r =>
SValue r -> [(SValue r, MSBody r)] -> MSBody r -> MSStatement r
switch HdrState ValueState ValData
SValue CppHdrCode
s ([HdrState ValueState ValData]
-> [HdrState MethodState Doc]
-> [(HdrState ValueState ValData, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState ValData]
cv [HdrState MethodState Doc]
cb))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v) (((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)
 -> PairState MethodState p ValData)
-> [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
    PairState MethodState p Doc)
-> PairState MethodState p ValData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
 PairState MethodState p Doc)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
forall a b. (a, b) -> a
fst) [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)]
[(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
cs) (((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)
 -> PairState MethodState p Doc)
-> [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)]
-> [PairState MethodState p Doc]
forall a b. (a -> b) -> [a] -> [b]
map (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
 PairState MethodState p Doc)
-> PairState MethodState p Doc
forall a b. (a, b) -> b
snd [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)]
[(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
cs)

  ifExists :: SValue (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
ifExists v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState ValData
 -> SrcState MethodState Doc
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState Doc
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p Doc
-> PairState MethodState p Doc
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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 ValData
-> SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSBody r -> MSBody r -> MSStatement r
ifExists HdrState ValueState ValData
-> HdrState MethodState Doc
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSBody r -> MSBody r -> MSStatement r
ifExists (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)

  for :: MSStatement (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
for i :: MSStatement (p CppSrcCode CppHdrCode)
i initv :: SValue (p CppSrcCode CppHdrCode)
initv = (SrcState MethodState (Doc, Terminator)
 -> SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState MethodState (Doc, Terminator)
    -> HdrState ValueState ValData
    -> HdrState MethodState (Doc, Terminator)
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
-> PairState MethodState p ValData
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
-> PairState MethodState p Doc
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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 (Doc, Terminator)
-> SrcState ValueState ValData
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
MSStatement r
-> SValue r -> MSStatement r -> MSBody r -> MSStatement r
for HdrState MethodState (Doc, Terminator)
-> HdrState ValueState ValData
-> HdrState MethodState (Doc, Terminator)
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
MSStatement r
-> SValue r -> MSStatement r -> MSBody r -> MSStatement r
for State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
MSStatement (p CppSrcCode CppHdrCode)
i (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
initv)
  forRange :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
forRange i :: SVariable (p CppSrcCode CppHdrCode)
i initv :: SValue (p CppSrcCode CppHdrCode)
initv finalv :: SValue (p CppSrcCode CppHdrCode)
finalv stepv :: SValue (p CppSrcCode CppHdrCode)
stepv = (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState ValueState ValData
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState ValueState ValData
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p ValData
-> PairState MethodState p ValData
-> PairState MethodState p Doc
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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 VarData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState ValueState ValData
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SVariable r
-> SValue r -> SValue r -> SValue r -> MSBody r -> MSStatement r
forRange HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState ValueState ValData
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SVariable r
-> SValue r -> SValue r -> SValue r -> MSBody r -> MSStatement r
forRange (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
i) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
initv) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
finalv) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
stepv)
  forEach :: SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
forEach e' :: SVariable (p CppSrcCode CppHdrCode)
e' v :: SValue (p CppSrcCode CppHdrCode)
v b :: MSBody (p CppSrcCode CppHdrCode)
b = do 
    p CppSrcCode CppHdrCode VarData
e <- LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
e'
    let le :: String
le = p CppSrcCode CppHdrCode (Variable (p CppSrcCode CppHdrCode))
-> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName p CppSrcCode CppHdrCode VarData
p CppSrcCode CppHdrCode (Variable (p CppSrcCode CppHdrCode))
e 
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> MethodState -> MethodState
addIter String
le) 
    p CppSrcCode CppHdrCode (Doc, Terminator)
loop <- (SrcState ValueState VarData
 -> SrcState ValueState ValData
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p VarData
-> PairState MethodState p ValData
-> PairState MethodState p Doc
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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 VarData
-> SrcState ValueState ValData
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SVariable r -> SValue r -> MSBody r -> MSStatement r
forEach HdrState ValueState VarData
-> HdrState ValueState ValData
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SVariable r -> SValue r -> MSBody r -> MSStatement r
forEach (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
e') (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v) PairState MethodState p Doc
MSBody (p CppSrcCode CppHdrCode)
b
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> MethodState -> MethodState
resetIter String
le)
    p CppSrcCode CppHdrCode (Doc, Terminator)
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
forall a s. a -> State s a
toState p CppSrcCode CppHdrCode (Doc, Terminator)
loop
  while :: SValue (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
while v :: SValue (p CppSrcCode CppHdrCode)
v = (SrcState ValueState ValData
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState ValData
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p ValData
-> PairState MethodState p Doc
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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 ValData
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSBody r -> MSStatement r
while HdrState ValueState ValData
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSBody r -> MSStatement r
while (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
v)

  tryCatch :: MSBody (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
tryCatch = (SrcState MethodState Doc
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState MethodState Doc
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p Doc
-> PairState MethodState p Doc
-> State MethodState (p CppSrcCode CppHdrCode (Doc, Terminator))
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 (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
MSBody r -> MSBody r -> MSStatement r
tryCatch HdrState MethodState Doc
-> HdrState MethodState Doc
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
MSBody r -> MSBody r -> MSStatement r
tryCatch

instance (Pair p) => StatePattern (p CppSrcCode CppHdrCode) where
  checkState :: String
-> [(SValue (p CppSrcCode CppHdrCode),
     MSBody (p CppSrcCode CppHdrCode))]
-> MSBody (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
checkState l :: String
l vs :: [(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
vs = ([SrcState ValueState ValData]
 -> [SrcState MethodState Doc]
 -> SrcState MethodState Doc
 -> SrcState MethodState (Doc, Terminator))
-> ([HdrState ValueState ValData]
    -> [HdrState MethodState Doc]
    -> HdrState MethodState Doc
    -> HdrState MethodState (Doc, Terminator))
-> [PairState MethodState p ValData]
-> [PairState MethodState p Doc]
-> PairState MethodState p Doc
-> PairState MethodState p (Doc, Terminator)
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
    (\sts :: [SrcState ValueState ValData]
sts bods :: [SrcState MethodState Doc]
bods -> String
-> [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
StatePattern r =>
String -> [(SValue r, MSBody r)] -> MSBody r -> MSStatement r
checkState String
l ([SrcState ValueState ValData]
-> [SrcState MethodState Doc]
-> [(SrcState ValueState ValData, SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState ValueState ValData]
sts [SrcState MethodState Doc]
bods))
    (\sts :: [HdrState ValueState ValData]
sts bods :: [HdrState MethodState Doc]
bods -> String
-> [(SValue CppHdrCode, MSBody CppHdrCode)]
-> MSBody CppHdrCode
-> MSStatement CppHdrCode
forall (r :: * -> *).
StatePattern r =>
String -> [(SValue r, MSBody r)] -> MSBody r -> MSStatement r
checkState String
l ([HdrState ValueState ValData]
-> [HdrState MethodState Doc]
-> [(HdrState ValueState ValData, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState ValData]
sts [HdrState MethodState Doc]
bods)) 
    (((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)
 -> PairState MethodState p ValData)
-> [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> ((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
    PairState MethodState p Doc)
-> PairState MethodState p ValData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
 PairState MethodState p Doc)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
forall a b. (a, b) -> a
fst) [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)]
[(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
vs) (((StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)
 -> PairState MethodState p Doc)
-> [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
     PairState MethodState p Doc)]
-> [PairState MethodState p Doc]
forall a b. (a -> b) -> [a] -> [b]
map (StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
 PairState MethodState p Doc)
-> PairState MethodState p Doc
forall a b. (a, b) -> b
snd [(StateT ValueState Identity (p CppSrcCode CppHdrCode ValData),
  PairState MethodState p Doc)]
[(SValue (p CppSrcCode CppHdrCode),
  MSBody (p CppSrcCode CppHdrCode))]
vs)

instance (Pair p) => ObserverPattern (p CppSrcCode CppHdrCode) where
  notifyObservers :: VSFunction (p CppSrcCode CppHdrCode)
-> VSType (p CppSrcCode CppHdrCode)
-> MSStatement (p CppSrcCode CppHdrCode)
notifyObservers f :: VSFunction (p CppSrcCode CppHdrCode)
f t :: VSType (p CppSrcCode CppHdrCode)
t = (SrcState ValueState FuncData
 -> State ValueState (CppSrcCode TypeData)
 -> SrcState MethodState (Doc, Terminator))
-> (HdrState ValueState FuncData
    -> State ValueState (CppHdrCode TypeData)
    -> HdrState MethodState (Doc, Terminator))
-> PairState MethodState p FuncData
-> PairState MethodState p TypeData
-> PairState MethodState p (Doc, Terminator)
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 (Doc, Terminator)
forall (r :: * -> *).
ObserverPattern r =>
VSFunction r -> VSType r -> MSStatement r
notifyObservers HdrState ValueState FuncData
-> State ValueState (CppHdrCode TypeData)
-> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
ObserverPattern r =>
VSFunction r -> VSType r -> MSStatement r
notifyObservers 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode FuncData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode FuncData)
-> PairState MethodState p FuncData
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
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode FuncData)
VSFunction (p CppSrcCode CppHdrCode)
f) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
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
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
VSType (p CppSrcCode CppHdrCode)
t)

instance (Pair p) => StrategyPattern (p CppSrcCode CppHdrCode) 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, MSBody (p CppSrcCode CppHdrCode))]
-> Maybe (SValue (p CppSrcCode CppHdrCode))
-> Maybe (SVariable (p CppSrcCode CppHdrCode))
-> MSBlock (p CppSrcCode CppHdrCode)
runStrategy l :: String
l strats :: [(String, MSBody (p CppSrcCode CppHdrCode))]
strats rv :: Maybe (SValue (p CppSrcCode CppHdrCode))
rv av :: Maybe (SVariable (p CppSrcCode CppHdrCode))
av = ([SrcState MethodState Doc] -> SrcState MethodState Doc)
-> ([HdrState MethodState Doc] -> HdrState MethodState Doc)
-> [PairState MethodState p Doc]
-> PairState MethodState p 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
    (\s :: [SrcState MethodState Doc]
s -> String
-> [(String, MSBody CppSrcCode)]
-> Maybe (SValue CppSrcCode)
-> Maybe (SVariable CppSrcCode)
-> MSBlock CppSrcCode
forall (r :: * -> *).
StrategyPattern r =>
String
-> [(String, MSBody r)]
-> Maybe (SValue r)
-> Maybe (SVariable r)
-> MSBlock r
runStrategy String
l ([String]
-> [SrcState MethodState Doc]
-> [(String, SrcState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String, PairState MethodState p Doc) -> String)
-> [(String, PairState MethodState p Doc)] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String, PairState MethodState p Doc) -> String
forall a b. (a, b) -> a
fst [(String, PairState MethodState p Doc)]
[(String, MSBody (p CppSrcCode CppHdrCode))]
strats) [SrcState MethodState Doc]
s) ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> SrcState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (SrcState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> SrcState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppSrcCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
rv)
      ((State ValueState (p CppSrcCode CppHdrCode VarData)
 -> SrcState ValueState VarData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode VarData))
-> Maybe (SrcState ValueState VarData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode VarData -> CppSrcCode VarData)
-> State ValueState (p CppSrcCode CppHdrCode VarData)
-> SrcState ValueState VarData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode VarData -> CppSrcCode VarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) Maybe (State ValueState (p CppSrcCode CppHdrCode VarData))
Maybe (SVariable (p CppSrcCode CppHdrCode))
av)) 
    (\s :: [HdrState MethodState Doc]
s -> String
-> [(String, MSBody CppHdrCode)]
-> Maybe (SValue CppHdrCode)
-> Maybe (SVariable CppHdrCode)
-> MSBlock CppHdrCode
forall (r :: * -> *).
StrategyPattern r =>
String
-> [(String, MSBody r)]
-> Maybe (SValue r)
-> Maybe (SVariable r)
-> MSBlock r
runStrategy String
l ([String]
-> [HdrState MethodState Doc]
-> [(String, HdrState MethodState Doc)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String, PairState MethodState p Doc) -> String)
-> [(String, PairState MethodState p Doc)] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String, PairState MethodState p Doc) -> String
forall a b. (a, b) -> a
fst [(String, PairState MethodState p Doc)]
[(String, MSBody (p CppSrcCode CppHdrCode))]
strats) [HdrState MethodState Doc]
s) ((State ValueState (p CppSrcCode CppHdrCode ValData)
 -> HdrState ValueState ValData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
-> Maybe (HdrState ValueState ValData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData)
-> State ValueState (p CppSrcCode CppHdrCode ValData)
-> HdrState ValueState ValData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode ValData -> CppHdrCode ValData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (State ValueState (p CppSrcCode CppHdrCode ValData))
Maybe (SValue (p CppSrcCode CppHdrCode))
rv) 
      ((State ValueState (p CppSrcCode CppHdrCode VarData)
 -> HdrState ValueState VarData)
-> Maybe (State ValueState (p CppSrcCode CppHdrCode VarData))
-> Maybe (HdrState ValueState VarData)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((p CppSrcCode CppHdrCode VarData -> CppHdrCode VarData)
-> State ValueState (p CppSrcCode CppHdrCode VarData)
-> HdrState ValueState VarData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue p CppSrcCode CppHdrCode VarData -> CppHdrCode VarData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) Maybe (State ValueState (p CppSrcCode CppHdrCode VarData))
Maybe (SVariable (p CppSrcCode CppHdrCode))
av)) (((String, PairState MethodState p Doc)
 -> PairState MethodState p Doc)
-> [(String, PairState MethodState p Doc)]
-> [PairState MethodState p Doc]
forall a b. (a -> b) -> [a] -> [b]
map (String, PairState MethodState p Doc)
-> PairState MethodState p Doc
forall a b. (a, b) -> b
snd [(String, PairState MethodState p Doc)]
[(String, MSBody (p CppSrcCode CppHdrCode))]
strats)

instance (Pair p) => ScopeSym (p CppSrcCode CppHdrCode) where
  type Scope (p CppSrcCode CppHdrCode) = (Doc, ScopeTag)
  private :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
private = CppSrcCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
-> p CppSrcCode CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode (Doc, ScopeTag)
forall (r :: * -> *). ScopeSym r => r (Scope r)
private CppHdrCode (Doc, ScopeTag)
forall (r :: * -> *). ScopeSym r => r (Scope r)
private
  public :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
public = CppSrcCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
-> p CppSrcCode CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode (Doc, ScopeTag)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public CppHdrCode (Doc, ScopeTag)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public

instance (Pair p) => RenderScope (p CppSrcCode CppHdrCode) where
  scopeFromData :: ScopeTag
-> Doc -> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
scopeFromData s :: ScopeTag
s d :: Doc
d = CppSrcCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
-> p CppSrcCode CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ScopeTag -> Doc -> CppSrcCode (Scope CppSrcCode)
forall (r :: * -> *).
RenderScope r =>
ScopeTag -> Doc -> r (Scope r)
scopeFromData ScopeTag
s Doc
d) (ScopeTag -> Doc -> CppHdrCode (Scope CppHdrCode)
forall (r :: * -> *).
RenderScope r =>
ScopeTag -> Doc -> r (Scope r)
scopeFromData ScopeTag
s Doc
d)
  
instance (Pair p) => ScopeElim (p CppSrcCode CppHdrCode) where
  scope :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode)) -> Doc
scope s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s = CppSrcCode (Scope CppSrcCode) -> Doc
forall (r :: * -> *). ScopeElim r => r (Scope r) -> Doc
RC.scope (CppSrcCode (Scope CppSrcCode) -> Doc)
-> CppSrcCode (Scope CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s

instance (Pair p) => MethodTypeSym (p CppSrcCode CppHdrCode) where
  type MethodType (p CppSrcCode CppHdrCode) = TypeData
  mType :: VSType (p CppSrcCode CppHdrCode)
-> MSMthdType (p CppSrcCode CppHdrCode)
mType = (State ValueState (CppSrcCode TypeData)
 -> SrcState MethodState TypeData)
-> (State ValueState (CppHdrCode TypeData)
    -> HdrState MethodState TypeData)
-> PairState MethodState p TypeData
-> PairState MethodState p 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 (r :: * -> *). MethodTypeSym r => VSType r -> MSMthdType r
mType State ValueState (CppHdrCode TypeData)
-> HdrState MethodState TypeData
forall (r :: * -> *). MethodTypeSym r => VSType r -> MSMthdType r
mType (PairState MethodState p TypeData
 -> PairState MethodState p TypeData)
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
    -> PairState MethodState p TypeData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
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
Lens' MethodState ValueState
lensMStoVS
  construct :: String -> MSMthdType (p CppSrcCode CppHdrCode)
construct n :: String
n = (CppSrcCode TypeData
 -> CppHdrCode TypeData -> p CppSrcCode CppHdrCode TypeData)
-> SrcState MethodState TypeData
-> HdrState MethodState TypeData
-> PairState MethodState p 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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (String -> MSMthdType CppSrcCode
forall (r :: * -> *). MethodTypeSym r => String -> MSMthdType r
construct String
n) (String -> MSMthdType CppHdrCode
forall (r :: * -> *). MethodTypeSym r => String -> MSMthdType r
construct String
n)

instance (Pair p) => ParameterSym (p CppSrcCode CppHdrCode) where
  type Parameter (p CppSrcCode CppHdrCode) = ParamData
  param :: SVariable (p CppSrcCode CppHdrCode)
-> MSParameter (p CppSrcCode CppHdrCode)
param = (SrcState ValueState VarData -> SrcState MethodState ParamData)
-> (HdrState ValueState VarData -> HdrState MethodState ParamData)
-> PairState MethodState p VarData
-> PairState MethodState p 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 VarData -> SrcState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
param HdrState ValueState VarData -> HdrState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
param (PairState MethodState p VarData
 -> PairState MethodState p ParamData)
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
    -> PairState MethodState p VarData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p ParamData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS
  pointerParam :: SVariable (p CppSrcCode CppHdrCode)
-> MSParameter (p CppSrcCode CppHdrCode)
pointerParam = (SrcState ValueState VarData -> SrcState MethodState ParamData)
-> (HdrState ValueState VarData -> HdrState MethodState ParamData)
-> PairState MethodState p VarData
-> PairState MethodState p 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 VarData -> SrcState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
pointerParam HdrState ValueState VarData -> HdrState MethodState ParamData
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
pointerParam (PairState MethodState p VarData
 -> PairState MethodState p ParamData)
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
    -> PairState MethodState p VarData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p ParamData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS

instance (Pair p) => RenderParam (p CppSrcCode CppHdrCode) where
  paramFromData :: SVariable (p CppSrcCode CppHdrCode)
-> Doc -> MSParameter (p CppSrcCode CppHdrCode)
paramFromData v' :: SVariable (p CppSrcCode CppHdrCode)
v' d :: Doc
d = (SrcState ValueState VarData -> SrcState MethodState ParamData)
-> (HdrState ValueState VarData -> HdrState MethodState ParamData)
-> PairState MethodState p VarData
-> PairState MethodState p 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 (SVariable CppSrcCode -> Doc -> MSParameter CppSrcCode
forall (r :: * -> *).
RenderParam r =>
SVariable r -> Doc -> MSParameter r
`paramFromData` Doc
d) (SVariable CppHdrCode -> Doc -> MSParameter CppHdrCode
forall (r :: * -> *).
RenderParam r =>
SVariable r -> Doc -> MSParameter r
`paramFromData` Doc
d) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
v')

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

instance (Pair p) => MethodSym (p CppSrcCode CppHdrCode) where
  type Method (p CppSrcCode CppHdrCode) = MethodData
  method :: String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> VSType (p CppSrcCode CppHdrCode)
-> [MSParameter (p CppSrcCode CppHdrCode)]
-> MSBody (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
method n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p t :: VSType (p CppSrcCode CppHdrCode)
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
-> [PairState MethodState p ParamData]
-> PairState MethodState p Doc
-> PairState MethodState p 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 (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> r (Permanence r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
method String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) (String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> r (Permanence r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
method String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
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
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
VSType (p CppSrcCode CppHdrCode)
t)
  getMethod :: SVariable (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
getMethod = (SrcState ValueState VarData -> SrcState MethodState MethodData)
-> (HdrState ValueState VarData -> HdrState MethodState MethodData)
-> PairState MethodState p VarData
-> PairState MethodState p 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 VarData -> SrcState MethodState MethodData
forall (r :: * -> *). MethodSym r => SVariable r -> SMethod r
getMethod HdrState ValueState VarData -> HdrState MethodState MethodData
forall (r :: * -> *). MethodSym r => SVariable r -> SMethod r
getMethod (PairState MethodState p VarData
 -> PairState MethodState p MethodData)
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
    -> PairState MethodState p VarData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS
  setMethod :: SVariable (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
setMethod = (SrcState ValueState VarData -> SrcState MethodState MethodData)
-> (HdrState ValueState VarData -> HdrState MethodState MethodData)
-> PairState MethodState p VarData
-> PairState MethodState p 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 VarData -> SrcState MethodState MethodData
forall (r :: * -> *). MethodSym r => SVariable r -> SMethod r
setMethod HdrState ValueState VarData -> HdrState MethodState MethodData
forall (r :: * -> *). MethodSym r => SVariable r -> SMethod r
setMethod (PairState MethodState p VarData
 -> PairState MethodState p MethodData)
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
    -> PairState MethodState p VarData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS
  constructor :: [MSParameter (p CppSrcCode CppHdrCode)]
-> Initializers (p CppSrcCode CppHdrCode)
-> MSBody (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
constructor ps :: [MSParameter (p CppSrcCode CppHdrCode)]
ps is :: Initializers (p CppSrcCode CppHdrCode)
is = ([SrcState MethodState ParamData]
 -> [SrcState ValueState VarData]
 -> [SrcState ValueState ValData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState MethodState ParamData]
    -> [HdrState ValueState VarData]
    -> [HdrState ValueState ValData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p ParamData]
-> [PairState MethodState p VarData]
-> [PairState MethodState p ValData]
-> PairState MethodState p Doc
-> PairState MethodState p 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 
    (\pms :: [SrcState MethodState ParamData]
pms ivars :: [SrcState ValueState VarData]
ivars ivals :: [SrcState ValueState ValData]
ivals -> [MSParameter CppSrcCode]
-> NamedArgs CppSrcCode -> MSBody CppSrcCode -> SMethod CppSrcCode
forall (r :: * -> *).
MethodSym r =>
[MSParameter r] -> Initializers r -> MSBody r -> SMethod r
constructor [SrcState MethodState ParamData]
[MSParameter CppSrcCode]
pms ([SrcState ValueState VarData]
-> [SrcState ValueState ValData]
-> [(SrcState ValueState VarData, SrcState ValueState ValData)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState ValueState VarData]
ivars [SrcState ValueState ValData]
ivals))
    (\pms :: [HdrState MethodState ParamData]
pms ivars :: [HdrState ValueState VarData]
ivars ivals :: [HdrState ValueState ValData]
ivals -> [MSParameter CppHdrCode]
-> NamedArgs CppHdrCode -> MSBody CppHdrCode -> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
[MSParameter r] -> Initializers r -> MSBody r -> SMethod r
constructor [HdrState MethodState ParamData]
[MSParameter CppHdrCode]
pms ([HdrState ValueState VarData]
-> [HdrState ValueState ValData]
-> [(HdrState ValueState VarData, HdrState ValueState ValData)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState ValueState VarData]
ivars [HdrState ValueState ValData]
ivals)) 
    [PairState MethodState p ParamData]
[MSParameter (p CppSrcCode CppHdrCode)]
ps (((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
  VS (p CppSrcCode CppHdrCode ValData))
 -> PairState MethodState p VarData)
-> [(StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
     VS (p CppSrcCode CppHdrCode ValData))]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
     VS (p CppSrcCode CppHdrCode ValData))
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
    VS (p CppSrcCode CppHdrCode ValData))
-> PairState MethodState p VarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
 VS (p CppSrcCode CppHdrCode ValData))
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
forall a b. (a, b) -> a
fst) [(StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
  VS (p CppSrcCode CppHdrCode ValData))]
Initializers (p CppSrcCode CppHdrCode)
is) (((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
  VS (p CppSrcCode CppHdrCode ValData))
 -> PairState MethodState p ValData)
-> [(StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
     VS (p CppSrcCode CppHdrCode ValData))]
-> [PairState MethodState p ValData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  MethodState
  ValueState
-> VS (p CppSrcCode CppHdrCode ValData)
-> PairState MethodState p ValData
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (VS (p CppSrcCode CppHdrCode ValData)
 -> PairState MethodState p ValData)
-> ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
     VS (p CppSrcCode CppHdrCode ValData))
    -> VS (p CppSrcCode CppHdrCode ValData))
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
    VS (p CppSrcCode CppHdrCode ValData))
-> PairState MethodState p ValData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
 VS (p CppSrcCode CppHdrCode ValData))
-> VS (p CppSrcCode CppHdrCode ValData)
forall a b. (a, b) -> b
snd) [(StateT ValueState Identity (p CppSrcCode CppHdrCode VarData),
  VS (p CppSrcCode CppHdrCode ValData))]
Initializers (p CppSrcCode CppHdrCode)
is)

  docMain :: MSBody (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
docMain = (SrcState MethodState Doc -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc -> HdrState MethodState MethodData)
-> PairState MethodState p Doc
-> PairState MethodState p 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 (r :: * -> *). MethodSym r => MSBody r -> SMethod r
docMain HdrState MethodState Doc -> HdrState MethodState MethodData
forall (r :: * -> *). MethodSym r => MSBody r -> SMethod r
docMain

  function :: String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> VSType (p CppSrcCode CppHdrCode)
-> [MSParameter (p CppSrcCode CppHdrCode)]
-> MSBody (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
function n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s t :: VSType (p CppSrcCode CppHdrCode)
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
-> [PairState MethodState p ParamData]
-> PairState MethodState p Doc
-> PairState MethodState p 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 (Scope CppSrcCode)
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
function String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s)) (String
-> CppHdrCode (Scope CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
function String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s)) 
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode TypeData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
-> PairState MethodState p TypeData
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
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode TypeData)
VSType (p CppSrcCode CppHdrCode)
t)
  mainFunction :: MSBody (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
mainFunction = (SrcState MethodState Doc -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc -> HdrState MethodState MethodData)
-> PairState MethodState p Doc
-> PairState MethodState p 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 (r :: * -> *). MethodSym r => MSBody r -> SMethod r
mainFunction HdrState MethodState Doc -> HdrState MethodState MethodData
forall (r :: * -> *). MethodSym r => MSBody r -> SMethod r
mainFunction

  docFunc :: String
-> [String]
-> Maybe String
-> SMethod (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
docFunc desc :: String
desc pComms :: [String]
pComms rComm :: Maybe String
rComm = (SrcState MethodState MethodData
 -> SrcState MethodState MethodData)
-> (HdrState MethodState MethodData
    -> HdrState MethodState MethodData)
-> PairState MethodState p MethodData
-> PairState MethodState p 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
-> SMethod CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String -> [String] -> Maybe String -> SMethod r -> SMethod r
docFunc String
desc [String]
pComms Maybe String
rComm) 
    (String
-> [String]
-> Maybe String
-> SMethod CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String -> [String] -> Maybe String -> SMethod r -> SMethod r
docFunc String
desc [String]
pComms Maybe String
rComm)

  inOutMethod :: String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> InOutFunc (p CppSrcCode CppHdrCode)
inOutMethod n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p is :: [SVariable (p CppSrcCode CppHdrCode)]
is os :: [SVariable (p CppSrcCode CppHdrCode)]
os bs :: [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> PairState MethodState p Doc
-> PairState MethodState p 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 (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> InOutFunc CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> r (Permanence r) -> InOutFunc r
inOutMethod String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) (String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> InOutFunc CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> r (Permanence r) -> InOutFunc r
inOutMethod String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
is) ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
os) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
bs)

  docInOutMethod :: String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> DocInOutFunc (p CppSrcCode CppHdrCode)
docInOutMethod n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p desc :: String
desc is :: [(String, SVariable (p CppSrcCode CppHdrCode))]
is os :: [(String, SVariable (p CppSrcCode CppHdrCode))]
os bs :: [(String, SVariable (p CppSrcCode CppHdrCode))]
bs = ([SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> PairState MethodState p Doc
-> PairState MethodState p 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
    (\ins :: [SrcState ValueState VarData]
ins outs :: [SrcState ValueState VarData]
outs both :: [SrcState ValueState VarData]
both -> String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> DocInOutFunc CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> r (Permanence r) -> DocInOutFunc r
docInOutMethod String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p) String
desc ([String]
-> [SrcState ValueState VarData]
-> [(String, SrcState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst 
      [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
is) [SrcState ValueState VarData]
ins) ([String]
-> [SrcState ValueState VarData]
-> [(String, SrcState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
os) [SrcState ValueState VarData]
outs) ([String]
-> [SrcState ValueState VarData]
-> [(String, SrcState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
bs) [SrcState ValueState VarData]
both))
    (\ins :: [HdrState ValueState VarData]
ins outs :: [HdrState ValueState VarData]
outs both :: [HdrState ValueState VarData]
both -> String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> DocInOutFunc CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> r (Permanence r) -> DocInOutFunc r
docInOutMethod String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p) String
desc ([String]
-> [HdrState ValueState VarData]
-> [(String, HdrState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst 
      [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
is) [HdrState ValueState VarData]
ins) ([String]
-> [HdrState ValueState VarData]
-> [(String, HdrState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
os) [HdrState ValueState VarData]
outs) ([String]
-> [HdrState ValueState VarData]
-> [(String, HdrState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
bs) [HdrState ValueState VarData]
both))
    (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> PairState MethodState p VarData)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> ((String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> (String,
    StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> PairState MethodState p VarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
forall a b. (a, b) -> b
snd) [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
is) (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> PairState MethodState p VarData)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> ((String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> (String,
    StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> PairState MethodState p VarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
forall a b. (a, b) -> b
snd) [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
os) 
    (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> PairState MethodState p VarData)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> ((String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> (String,
    StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> PairState MethodState p VarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
forall a b. (a, b) -> b
snd) [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
bs)

  inOutFunc :: String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> InOutFunc (p CppSrcCode CppHdrCode)
inOutFunc n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s is :: [SVariable (p CppSrcCode CppHdrCode)]
is os :: [SVariable (p CppSrcCode CppHdrCode)]
os bs :: [SVariable (p CppSrcCode CppHdrCode)]
bs = ([SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> PairState MethodState p Doc
-> PairState MethodState p 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 (Scope CppSrcCode) -> InOutFunc CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> InOutFunc r
inOutFunc String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s)) (String -> CppHdrCode (Scope CppHdrCode) -> InOutFunc CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> InOutFunc r
inOutFunc String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s))
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
is) ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
os) 
    ((StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)]
[SVariable (p CppSrcCode CppHdrCode)]
bs)

  docInOutFunc :: String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> DocInOutFunc (p CppSrcCode CppHdrCode)
docInOutFunc n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s desc :: String
desc is :: [(String, SVariable (p CppSrcCode CppHdrCode))]
is os :: [(String, SVariable (p CppSrcCode CppHdrCode))]
os bs :: [(String, SVariable (p CppSrcCode CppHdrCode))]
bs = ([SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> [SrcState ValueState VarData]
 -> SrcState MethodState Doc
 -> SrcState MethodState MethodData)
-> ([HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> [HdrState ValueState VarData]
    -> HdrState MethodState Doc
    -> HdrState MethodState MethodData)
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> [PairState MethodState p VarData]
-> PairState MethodState p Doc
-> PairState MethodState p 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 
    (\ins :: [SrcState ValueState VarData]
ins outs :: [SrcState ValueState VarData]
outs both :: [SrcState ValueState VarData]
both -> String -> CppSrcCode (Scope CppSrcCode) -> DocInOutFunc CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> DocInOutFunc r
docInOutFunc String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) String
desc ([String]
-> [SrcState ValueState VarData]
-> [(String, SrcState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst 
      [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
is) [SrcState ValueState VarData]
ins) ([String]
-> [SrcState ValueState VarData]
-> [(String, SrcState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
os) [SrcState ValueState VarData]
outs) ([String]
-> [SrcState ValueState VarData]
-> [(String, SrcState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
bs) [SrcState ValueState VarData]
both))
    (\ins :: [HdrState ValueState VarData]
ins outs :: [HdrState ValueState VarData]
outs both :: [HdrState ValueState VarData]
both -> String -> CppHdrCode (Scope CppHdrCode) -> DocInOutFunc CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> DocInOutFunc r
docInOutFunc String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) String
desc ([String]
-> [HdrState ValueState VarData]
-> [(String, HdrState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst 
      [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
is) [HdrState ValueState VarData]
ins) ([String]
-> [HdrState ValueState VarData]
-> [(String, HdrState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
os) [HdrState ValueState VarData]
outs) ([String]
-> [HdrState ValueState VarData]
-> [(String, HdrState ValueState VarData)]
forall a b. [a] -> [b] -> [(a, b)]
zip (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> String)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> String
forall a b. (a, b) -> a
fst [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
bs) [HdrState ValueState VarData]
both))
    (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> PairState MethodState p VarData)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> ((String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> (String,
    StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> PairState MethodState p VarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
forall a b. (a, b) -> b
snd) [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
is) (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> PairState MethodState p VarData)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> ((String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> (String,
    StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> PairState MethodState p VarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
forall a b. (a, b) -> b
snd) [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
os) 
    (((String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
 -> PairState MethodState p VarData)
-> [(String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
-> [PairState MethodState p VarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  MethodState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState MethodState p VarData
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
 -> PairState MethodState p VarData)
-> ((String,
     StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
    -> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> (String,
    StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> PairState MethodState p VarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String,
 StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
forall a b. (a, b) -> b
snd) [(String,
  StateT ValueState Identity (p CppSrcCode CppHdrCode VarData))]
[(String, SVariable (p CppSrcCode CppHdrCode))]
bs)
  
instance (Pair p) => RenderMethod (p CppSrcCode CppHdrCode) where
  intMethod :: Bool
-> String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> MSMthdType (p CppSrcCode CppHdrCode)
-> [MSParameter (p CppSrcCode CppHdrCode)]
-> MSBody (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
intMethod m :: Bool
m n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
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)
-> PairState MethodState p TypeData
-> [PairState MethodState p ParamData]
-> PairState MethodState p Doc
-> PairState MethodState p 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 (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> MSMthdType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
RenderMethod r =>
Bool
-> String
-> r (Scope r)
-> r (Permanence r)
-> MSMthdType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
intMethod Bool
m String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) (Bool
-> String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> MSMthdType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
RenderMethod r =>
Bool
-> String
-> r (Scope r)
-> r (Permanence r)
-> MSMthdType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
intMethod Bool
m String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p))
  intFunc :: Bool
-> String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> MSMthdType (p CppSrcCode CppHdrCode)
-> [MSParameter (p CppSrcCode CppHdrCode)]
-> MSBody (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
intFunc m :: Bool
m n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
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)
-> PairState MethodState p TypeData
-> [PairState MethodState p ParamData]
-> PairState MethodState p Doc
-> PairState MethodState p 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 (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> MSMthdType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
RenderMethod r =>
Bool
-> String
-> r (Scope r)
-> r (Permanence r)
-> MSMthdType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
intFunc Bool
m String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) (Bool
-> String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> MSMthdType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
RenderMethod r =>
Bool
-> String
-> r (Scope r)
-> r (Permanence r)
-> MSMthdType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
intFunc Bool
m String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p))
  commentedFunc :: MS
  (p CppSrcCode CppHdrCode (BlockComment (p CppSrcCode CppHdrCode)))
-> SMethod (p CppSrcCode CppHdrCode)
-> SMethod (p CppSrcCode CppHdrCode)
commentedFunc = (SrcState MethodState Doc
 -> SrcState MethodState MethodData
 -> SrcState MethodState MethodData)
-> (HdrState MethodState Doc
    -> HdrState MethodState MethodData
    -> HdrState MethodState MethodData)
-> PairState MethodState p Doc
-> PairState MethodState p MethodData
-> PairState MethodState p 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 :: * -> *).
RenderMethod r =>
MS (r (BlockComment r)) -> SMethod r -> SMethod r
commentedFunc HdrState MethodState Doc
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *).
RenderMethod r =>
MS (r (BlockComment r)) -> SMethod r -> SMethod r
commentedFunc
  
  destructor :: [CSStateVar (p CppSrcCode CppHdrCode)]
-> SMethod (p CppSrcCode CppHdrCode)
destructor = ([SrcState ClassState StateVarData]
 -> SrcState MethodState MethodData)
-> ([HdrState ClassState StateVarData]
    -> HdrState MethodState MethodData)
-> [PairState MethodState p StateVarData]
-> PairState MethodState p 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
pair1List [SrcState ClassState StateVarData]
-> SrcState MethodState MethodData
forall (r :: * -> *). RenderMethod r => [CSStateVar r] -> SMethod r
destructor [HdrState ClassState StateVarData]
-> HdrState MethodState MethodData
forall (r :: * -> *). RenderMethod r => [CSStateVar r] -> SMethod r
destructor ([PairState MethodState p StateVarData]
 -> PairState MethodState p MethodData)
-> ([StateT
       ClassState Identity (p CppSrcCode CppHdrCode StateVarData)]
    -> [PairState MethodState p StateVarData])
-> [StateT
      ClassState Identity (p CppSrcCode CppHdrCode StateVarData)]
-> PairState MethodState p MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateT ClassState Identity (p CppSrcCode CppHdrCode StateVarData)
 -> PairState MethodState p StateVarData)
-> [StateT
      ClassState Identity (p CppSrcCode CppHdrCode StateVarData)]
-> [PairState MethodState p StateVarData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT ClassState Identity)
     (p CppSrcCode CppHdrCode StateVarData))
  MethodState
  ClassState
-> StateT
     ClassState Identity (p CppSrcCode CppHdrCode StateVarData)
-> PairState MethodState p StateVarData
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 StateVarData))
  MethodState
  ClassState
Lens' MethodState ClassState
lensMStoCS)
  
  mthdFromData :: ScopeTag -> Doc -> SMethod (p CppSrcCode CppHdrCode)
mthdFromData s :: ScopeTag
s d :: Doc
d = (CppSrcCode MethodData
 -> CppHdrCode MethodData -> p CppSrcCode CppHdrCode MethodData)
-> SrcState MethodState MethodData
-> HdrState MethodState MethodData
-> PairState MethodState p 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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (ScopeTag -> Doc -> SMethod CppSrcCode
forall (r :: * -> *).
RenderMethod r =>
ScopeTag -> Doc -> SMethod r
mthdFromData ScopeTag
s Doc
d) (ScopeTag -> Doc -> SMethod CppHdrCode
forall (r :: * -> *).
RenderMethod r =>
ScopeTag -> Doc -> SMethod r
mthdFromData ScopeTag
s Doc
d)
  
instance (Pair p) => MethodElim (p CppSrcCode CppHdrCode) where
  method :: p CppSrcCode CppHdrCode (Method (p CppSrcCode CppHdrCode)) -> Doc
method m :: p CppSrcCode CppHdrCode (Method (p CppSrcCode CppHdrCode))
m = CppSrcCode (Method CppSrcCode) -> Doc
forall (r :: * -> *). MethodElim r => r (Method r) -> Doc
RC.method (CppSrcCode (Method CppSrcCode) -> Doc)
-> CppSrcCode (Method CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode MethodData -> CppSrcCode MethodData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Method (p CppSrcCode CppHdrCode))
p CppSrcCode CppHdrCode MethodData
m

instance (Pair p) => StateVarSym (p CppSrcCode CppHdrCode) where
  type StateVar (p CppSrcCode CppHdrCode) = StateVarData
  stateVar :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
-> CSStateVar (p CppSrcCode CppHdrCode)
stateVar s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p = (SrcState ValueState VarData -> SrcState ClassState StateVarData)
-> (HdrState ValueState VarData
    -> HdrState ClassState StateVarData)
-> PairState ClassState p VarData
-> PairState ClassState p 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 (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> SVariable CppSrcCode
-> CSStateVar CppSrcCode
forall (r :: * -> *).
StateVarSym r =>
r (Scope r) -> r (Permanence r) -> SVariable r -> CSStateVar r
stateVar (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) (CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> SVariable CppHdrCode
-> CSStateVar CppHdrCode
forall (r :: * -> *).
StateVarSym r =>
r (Scope r) -> r (Permanence r) -> SVariable r -> CSStateVar r
stateVar (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p))
    (PairState ClassState p VarData
 -> PairState ClassState p StateVarData)
-> (StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
    -> PairState ClassState p VarData)
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState ClassState p StateVarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  ClassState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState ClassState p VarData
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 VarData))
  ClassState
  ValueState
Lens' ClassState ValueState
lensCStoVS
  stateVarDef :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> CSStateVar (p CppSrcCode CppHdrCode)
stateVarDef s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s p :: p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p vr :: SVariable (p CppSrcCode CppHdrCode)
vr vl :: SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState ValueState ValData -> SrcState ClassState StateVarData)
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData -> HdrState ClassState StateVarData)
-> PairState ClassState p VarData
-> PairState ClassState p ValData
-> PairState ClassState p 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 (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> CSStateVar CppSrcCode
forall (r :: * -> *).
StateVarSym r =>
r (Scope r)
-> r (Permanence r) -> SVariable r -> SValue r -> CSStateVar r
stateVarDef (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppSrcCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) 
    (CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> CSStateVar CppHdrCode
forall (r :: * -> *).
StateVarSym r =>
r (Scope r)
-> r (Permanence r) -> SVariable r -> SValue r -> CSStateVar r
stateVarDef (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode BindData -> CppHdrCode BindData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode BindData
p CppSrcCode CppHdrCode (Permanence (p CppSrcCode CppHdrCode))
p)) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  ClassState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState ClassState p VarData
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 VarData))
  ClassState
  ValueState
Lens' ClassState ValueState
lensCStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  ClassState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState ClassState p ValData
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 ValData))
  ClassState
  ValueState
Lens' ClassState ValueState
lensCStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
vl)
  constVar :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> SVariable (p CppSrcCode CppHdrCode)
-> SValue (p CppSrcCode CppHdrCode)
-> CSStateVar (p CppSrcCode CppHdrCode)
constVar s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s vr :: SVariable (p CppSrcCode CppHdrCode)
vr vl :: SValue (p CppSrcCode CppHdrCode)
vl = (SrcState ValueState VarData
 -> SrcState ValueState ValData -> SrcState ClassState StateVarData)
-> (HdrState ValueState VarData
    -> HdrState ValueState ValData -> HdrState ClassState StateVarData)
-> PairState ClassState p VarData
-> PairState ClassState p ValData
-> PairState ClassState p 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 (Scope CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> CSStateVar CppSrcCode
forall (r :: * -> *).
StateVarSym r =>
r (Scope r) -> SVariable r -> SValue r -> CSStateVar r
constVar (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s)) (CppHdrCode (Scope CppHdrCode)
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> CSStateVar CppHdrCode
forall (r :: * -> *).
StateVarSym r =>
r (Scope r) -> SVariable r -> SValue r -> CSStateVar r
constVar (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s))
    (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode VarData))
  ClassState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
-> PairState ClassState p VarData
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 VarData))
  ClassState
  ValueState
Lens' ClassState ValueState
lensCStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode VarData)
SVariable (p CppSrcCode CppHdrCode)
vr) (LensLike'
  (Zoomed
     (StateT ValueState Identity) (p CppSrcCode CppHdrCode ValData))
  ClassState
  ValueState
-> StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
-> PairState ClassState p ValData
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 ValData))
  ClassState
  ValueState
Lens' ClassState ValueState
lensCStoVS StateT ValueState Identity (p CppSrcCode CppHdrCode ValData)
SValue (p CppSrcCode CppHdrCode)
vl)

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

instance (Pair p) => ClassSym (p CppSrcCode CppHdrCode) where
  type Class (p CppSrcCode CppHdrCode) = Doc
  buildClass :: Maybe String
-> [CSStateVar (p CppSrcCode CppHdrCode)]
-> [SMethod (p CppSrcCode CppHdrCode)]
-> SClass (p CppSrcCode CppHdrCode)
buildClass p :: Maybe String
p vs :: [CSStateVar (p CppSrcCode CppHdrCode)]
vs fs :: [SMethod (p CppSrcCode CppHdrCode)]
fs = do
    String
n <- LensLike'
  (Zoomed (StateT FileState Identity) String) ClassState FileState
-> StateT FileState Identity String
-> StateT ClassState Identity String
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
Lens' ClassState FileState
lensCStoFS StateT FileState Identity String
getModuleName
    (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ClassState -> ClassState
setClassName String
n)
    ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData] -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData] -> HdrState ClassState Doc)
-> [PairState ClassState p StateVarData]
-> [PairState ClassState p MethodData]
-> PairState ClassState p 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
pair2Lists (Maybe String
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
forall (r :: * -> *).
ClassSym r =>
Maybe String -> [CSStateVar r] -> [SMethod r] -> SClass r
buildClass Maybe String
p) (Maybe String
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
forall (r :: * -> *).
ClassSym r =>
Maybe String -> [CSStateVar r] -> [SMethod r] -> SClass r
buildClass Maybe String
p) [PairState ClassState p StateVarData]
[CSStateVar (p CppSrcCode CppHdrCode)]
vs ((StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [StateT
      MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
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
Lens' ClassState MethodState
lensCStoMS) [SMethod (p CppSrcCode CppHdrCode)]
[StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
fs)
  extraClass :: String
-> Maybe String
-> [CSStateVar (p CppSrcCode CppHdrCode)]
-> [SMethod (p CppSrcCode CppHdrCode)]
-> SClass (p CppSrcCode CppHdrCode)
extraClass n :: String
n p :: Maybe String
p vs :: [CSStateVar (p CppSrcCode CppHdrCode)]
vs fs :: [SMethod (p CppSrcCode CppHdrCode)]
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 ()
-> PairState ClassState p Doc -> PairState ClassState p Doc
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData] -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData] -> HdrState ClassState Doc)
-> [PairState ClassState p StateVarData]
-> [PairState ClassState p MethodData]
-> PairState ClassState p 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
pair2Lists 
    (String
-> Maybe String
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
forall (r :: * -> *).
ClassSym r =>
String -> Maybe String -> [CSStateVar r] -> [SMethod r] -> SClass r
extraClass String
n Maybe String
p) (String
-> Maybe String
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
forall (r :: * -> *).
ClassSym r =>
String -> Maybe String -> [CSStateVar r] -> [SMethod r] -> SClass r
extraClass String
n Maybe String
p)
    [PairState ClassState p StateVarData]
[CSStateVar (p CppSrcCode CppHdrCode)]
vs ((StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [StateT
      MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
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
Lens' ClassState MethodState
lensCStoMS) [SMethod (p CppSrcCode CppHdrCode)]
[StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
fs)
  implementingClass :: String
-> [String]
-> [CSStateVar (p CppSrcCode CppHdrCode)]
-> [SMethod (p CppSrcCode CppHdrCode)]
-> SClass (p CppSrcCode CppHdrCode)
implementingClass n :: String
n is :: [String]
is vs :: [CSStateVar (p CppSrcCode CppHdrCode)]
vs fs :: [SMethod (p CppSrcCode CppHdrCode)]
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 ()
-> PairState ClassState p Doc -> PairState ClassState p Doc
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData] -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData] -> HdrState ClassState Doc)
-> [PairState ClassState p StateVarData]
-> [PairState ClassState p MethodData]
-> PairState ClassState p 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
pair2Lists
    (String
-> [String]
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
forall (r :: * -> *).
ClassSym r =>
String -> [String] -> [CSStateVar r] -> [SMethod r] -> SClass r
implementingClass String
n [String]
is) (String
-> [String]
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
forall (r :: * -> *).
ClassSym r =>
String -> [String] -> [CSStateVar r] -> [SMethod r] -> SClass r
implementingClass String
n [String]
is)
    [PairState ClassState p StateVarData]
[CSStateVar (p CppSrcCode CppHdrCode)]
vs ((StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [StateT
      MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
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
Lens' ClassState MethodState
lensCStoMS) [SMethod (p CppSrcCode CppHdrCode)]
[StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
fs)

  docClass :: String
-> SClass (p CppSrcCode CppHdrCode)
-> SClass (p CppSrcCode CppHdrCode)
docClass d :: String
d = (SrcState ClassState Doc -> SrcState ClassState Doc)
-> (HdrState ClassState Doc -> HdrState ClassState Doc)
-> PairState ClassState p Doc
-> PairState ClassState p 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 -> SClass CppSrcCode -> SClass CppSrcCode
forall (r :: * -> *). ClassSym r => String -> SClass r -> SClass r
docClass String
d) (String -> SClass CppHdrCode -> SClass CppHdrCode
forall (r :: * -> *). ClassSym r => String -> SClass r -> SClass r
docClass String
d)

instance (Pair p) => RenderClass (p CppSrcCode CppHdrCode) where
  intClass :: String
-> p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode Doc
-> [CSStateVar (p CppSrcCode CppHdrCode)]
-> [SMethod (p CppSrcCode CppHdrCode)]
-> SClass (p CppSrcCode CppHdrCode)
intClass n :: String
n s :: p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s i :: p CppSrcCode CppHdrCode Doc
i vs :: [CSStateVar (p CppSrcCode CppHdrCode)]
vs fs :: [SMethod (p CppSrcCode CppHdrCode)]
fs = ([SrcState ClassState StateVarData]
 -> [SrcState MethodState MethodData] -> SrcState ClassState Doc)
-> ([HdrState ClassState StateVarData]
    -> [HdrState MethodState MethodData] -> HdrState ClassState Doc)
-> [PairState ClassState p StateVarData]
-> [PairState ClassState p MethodData]
-> PairState ClassState p 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
pair2Lists 
    (String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode Doc
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
forall (r :: * -> *).
RenderClass r =>
String
-> r (Scope r)
-> r Doc
-> [CSStateVar r]
-> [SMethod r]
-> SClass r
intClass String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppSrcCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
i)) (String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode Doc
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
forall (r :: * -> *).
RenderClass r =>
String
-> r (Scope r)
-> r Doc
-> [CSStateVar r]
-> [SMethod r]
-> SClass r
intClass String
n (p CppSrcCode CppHdrCode (Doc, ScopeTag)
-> CppHdrCode (Doc, ScopeTag)
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode (Doc, ScopeTag)
p CppSrcCode CppHdrCode (Scope (p CppSrcCode CppHdrCode))
s) (p CppSrcCode CppHdrCode Doc -> CppHdrCode Doc
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode Doc
i)) 
    [PairState ClassState p StateVarData]
[CSStateVar (p CppSrcCode CppHdrCode)]
vs ((StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
 -> PairState ClassState p MethodData)
-> [StateT
      MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
-> [PairState ClassState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  ClassState
  MethodState
-> StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
-> PairState ClassState p MethodData
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
Lens' ClassState MethodState
lensCStoMS) [SMethod (p CppSrcCode CppHdrCode)]
[StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
fs)

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

  commentedClass :: CS
  (p CppSrcCode CppHdrCode (BlockComment (p CppSrcCode CppHdrCode)))
-> SClass (p CppSrcCode CppHdrCode)
-> SClass (p CppSrcCode CppHdrCode)
commentedClass = (SrcState ClassState Doc
 -> SrcState ClassState Doc -> SrcState ClassState Doc)
-> (HdrState ClassState Doc
    -> HdrState ClassState Doc -> HdrState ClassState Doc)
-> PairState ClassState p Doc
-> PairState ClassState p Doc
-> PairState ClassState p 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 :: * -> *).
RenderClass r =>
CS (r (BlockComment r)) -> SClass r -> SClass r
commentedClass HdrState ClassState Doc
-> HdrState ClassState Doc -> HdrState ClassState Doc
forall (r :: * -> *).
RenderClass r =>
CS (r (BlockComment r)) -> SClass r -> SClass r
commentedClass
  
instance (Pair p) => ClassElim (p CppSrcCode CppHdrCode) where
  class' :: p CppSrcCode CppHdrCode (Class (p CppSrcCode CppHdrCode)) -> Doc
class' c :: p CppSrcCode CppHdrCode (Class (p CppSrcCode CppHdrCode))
c = CppSrcCode (Class CppSrcCode) -> Doc
forall (r :: * -> *). ClassElim r => r (Class r) -> Doc
RC.class' (CppSrcCode (Class CppSrcCode) -> Doc)
-> CppSrcCode (Class CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
p CppSrcCode CppHdrCode (Class (p CppSrcCode CppHdrCode))
c

instance (Pair p) => ModuleSym (p CppSrcCode CppHdrCode) where
  type Module (p CppSrcCode CppHdrCode) = ModData
  buildModule :: String
-> [String]
-> [SMethod (p CppSrcCode CppHdrCode)]
-> [SClass (p CppSrcCode CppHdrCode)]
-> FSModule (p CppSrcCode CppHdrCode)
buildModule n :: String
n is :: [String]
is ms :: [SMethod (p CppSrcCode CppHdrCode)]
ms cs :: [SClass (p CppSrcCode CppHdrCode)]
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]
-> PairState FileState p 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]
-> [SMethod CppSrcCode]
-> [SClass CppSrcCode]
-> FSModule CppSrcCode
forall (r :: * -> *).
ModuleSym r =>
String -> [String] -> [SMethod r] -> [SClass r] -> FSModule r
buildModule String
n [String]
is) (String
-> [String]
-> [SMethod CppHdrCode]
-> [SClass CppHdrCode]
-> FSModule CppHdrCode
forall (r :: * -> *).
ModuleSym r =>
String -> [String] -> [SMethod r] -> [SClass r] -> FSModule r
buildModule String
n [String]
is) 
        ((StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
 -> PairState FileState p MethodData)
-> [StateT
      MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
-> [PairState FileState p MethodData]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed
     (StateT MethodState Identity) (p CppSrcCode CppHdrCode MethodData))
  FileState
  MethodState
-> StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)
-> PairState FileState p MethodData
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
Lens' FileState MethodState
lensFStoMS) [SMethod (p CppSrcCode CppHdrCode)]
[StateT MethodState Identity (p CppSrcCode CppHdrCode MethodData)]
ms) ((StateT ClassState Identity (p CppSrcCode CppHdrCode Doc)
 -> PairState FileState p Doc)
-> [StateT ClassState Identity (p CppSrcCode CppHdrCode Doc)]
-> [PairState FileState p Doc]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed (StateT ClassState Identity) (p CppSrcCode CppHdrCode Doc))
  FileState
  ClassState
-> StateT ClassState Identity (p CppSrcCode CppHdrCode Doc)
-> PairState FileState p Doc
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
Lens' FileState ClassState
lensFStoCS)[StateT ClassState Identity (p CppSrcCode CppHdrCode Doc)]
[SClass (p CppSrcCode CppHdrCode)]
cs)
  
instance (Pair p) => RenderMod (p CppSrcCode CppHdrCode) where
  modFromData :: String -> FS Doc -> FSModule (p CppSrcCode CppHdrCode)
modFromData n :: String
n d :: FS Doc
d = (CppSrcCode ModData
 -> CppHdrCode ModData -> p CppSrcCode CppHdrCode ModData)
-> SrcState FileState ModData
-> HdrState FileState ModData
-> State FileState (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (String -> FS Doc -> FSModule CppSrcCode
forall (r :: * -> *). RenderMod r => String -> FS Doc -> FSModule r
modFromData String
n FS Doc
d) (String -> FS Doc -> FSModule CppHdrCode
forall (r :: * -> *). RenderMod r => String -> FS Doc -> FSModule r
modFromData String
n FS Doc
d)
  updateModuleDoc :: (Doc -> Doc)
-> p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
-> p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
updateModuleDoc f :: Doc -> Doc
f m :: p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
m = CppSrcCode ModData
-> CppHdrCode ModData -> p CppSrcCode CppHdrCode ModData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair 
    ((Doc -> Doc)
-> CppSrcCode (Module CppSrcCode) -> CppSrcCode (Module CppSrcCode)
forall (r :: * -> *).
RenderMod r =>
(Doc -> Doc) -> r (Module r) -> r (Module r)
updateModuleDoc Doc -> Doc
f (CppSrcCode (Module CppSrcCode) -> CppSrcCode ModData)
-> CppSrcCode (Module CppSrcCode) -> CppSrcCode ModData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppSrcCode ModData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ModData
p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
m) ((Doc -> Doc)
-> CppHdrCode (Module CppHdrCode) -> CppHdrCode (Module CppHdrCode)
forall (r :: * -> *).
RenderMod r =>
(Doc -> Doc) -> r (Module r) -> r (Module r)
updateModuleDoc Doc -> Doc
f (CppHdrCode (Module CppHdrCode) -> CppHdrCode ModData)
-> CppHdrCode (Module CppHdrCode) -> CppHdrCode ModData
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppHdrCode ModData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode ModData
p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
m)
    
instance (Pair p) => ModuleElim (p CppSrcCode CppHdrCode) where
  module' :: p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode)) -> Doc
module' m :: p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
m = CppSrcCode (Module CppSrcCode) -> Doc
forall (r :: * -> *). ModuleElim r => r (Module r) -> Doc
RC.module' (CppSrcCode (Module CppSrcCode) -> Doc)
-> CppSrcCode (Module CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode ModData -> CppSrcCode ModData
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode ModData
p CppSrcCode CppHdrCode (Module (p CppSrcCode CppHdrCode))
m

instance (Pair p) => BlockCommentSym (p CppSrcCode CppHdrCode) where
  type BlockComment (p CppSrcCode CppHdrCode) = Doc
  blockComment :: [String]
-> p CppSrcCode CppHdrCode (BlockComment (p CppSrcCode CppHdrCode))
blockComment lns :: [String]
lns = CppSrcCode Doc -> CppHdrCode Doc -> p CppSrcCode CppHdrCode Doc
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair ([String] -> CppSrcCode (BlockComment CppSrcCode)
forall (r :: * -> *).
BlockCommentSym r =>
[String] -> r (BlockComment r)
blockComment [String]
lns) ([String] -> CppHdrCode (BlockComment CppHdrCode)
forall (r :: * -> *).
BlockCommentSym r =>
[String] -> r (BlockComment r)
blockComment [String]
lns)
  docComment :: State a [String]
-> State
     a
     (p CppSrcCode CppHdrCode (BlockComment (p CppSrcCode CppHdrCode)))
docComment lns :: 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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair (State a [String] -> State a (CppSrcCode (BlockComment CppSrcCode))
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [String] -> State a (r (BlockComment r))
docComment State a [String]
lns) (State a [String] -> State a (CppHdrCode (BlockComment CppHdrCode))
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [String] -> State a (r (BlockComment r))
docComment State a [String]
lns)

instance (Pair p) => BlockCommentElim (p CppSrcCode CppHdrCode) where
  blockComment' :: p CppSrcCode CppHdrCode (BlockComment (p CppSrcCode CppHdrCode))
-> Doc
blockComment' c :: p CppSrcCode CppHdrCode (BlockComment (p CppSrcCode CppHdrCode))
c = CppSrcCode (BlockComment CppSrcCode) -> Doc
forall (r :: * -> *).
BlockCommentElim r =>
r (BlockComment r) -> Doc
RC.blockComment' (CppSrcCode (BlockComment CppSrcCode) -> Doc)
-> CppSrcCode (BlockComment CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode Doc -> CppSrcCode Doc
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode Doc
p CppSrcCode CppHdrCode (BlockComment (p CppSrcCode CppHdrCode))
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 :: (SrcState r a -> SrcState s b)
-> (HdrState r a -> HdrState s b)
-> PairState s p a
-> PairState s p b
pair1 srcf :: SrcState r a -> SrcState s b
srcf hdrf :: HdrState r a -> HdrState s b
hdrf stv :: PairState s p a
stv = do
  p CppSrcCode CppHdrCode a
v <- PairState s p a
stv
  let fp :: SrcState r a
fp = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v
      sp :: HdrState r a
sp = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v
  CppSrcCode b
p1 <- SrcState r a -> SrcState s b
srcf SrcState r a
fp
  CppHdrCode b
p2 <- HdrState r a -> HdrState s b
hdrf HdrState r a
sp
  p CppSrcCode CppHdrCode b -> PairState s p b
forall (m :: * -> *) a. Monad m => a -> m a
return (p CppSrcCode CppHdrCode b -> PairState s p b)
-> p CppSrcCode CppHdrCode b -> PairState s p b
forall a b. (a -> b) -> a -> b
$ CppSrcCode b -> CppHdrCode b -> p CppSrcCode CppHdrCode b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode b
p1 CppHdrCode b
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 :: (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 srcf :: SrcState r a -> SrcState s b -> SrcState t c
srcf hdrf :: HdrState r a -> HdrState s b -> HdrState t c
hdrf stv1 :: PairState t p a
stv1 stv2 :: PairState t p b
stv2 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState t p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b -> SrcState t c)
-> (HdrState s b -> HdrState t c)
-> PairState t p b
-> PairState t p c
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 -> SrcState t c
srcf SrcState r a
fv1) (HdrState r a -> HdrState s b -> HdrState t c
hdrf HdrState r a
sv1) PairState t p b
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 :: (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 srcf :: SrcState r a -> SrcState s b -> SrcState t c -> SrcState u d
srcf hdrf :: HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d
hdrf stv1 :: PairState u p a
stv1 stv2 :: PairState u p b
stv2 stv3 :: PairState u p c
stv3 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState u p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b -> SrcState t c -> SrcState u d)
-> (HdrState s b -> HdrState t c -> HdrState u d)
-> PairState u p b
-> PairState u p c
-> PairState u p d
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 -> SrcState u d
srcf SrcState r a
fv1) (HdrState r a -> HdrState s b -> HdrState t c -> HdrState u d
hdrf HdrState r a
sv1) PairState u p b
stv2 PairState u p c
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 :: (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 srcf :: SrcState r a
-> SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e
srcf hdrf :: HdrState r a
-> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e
hdrf stv1 :: PairState v p a
stv1 stv2 :: PairState v p b
stv2 stv3 :: PairState v p c
stv3 stv4 :: PairState v p d
stv4 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState v p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b -> SrcState t c -> SrcState u d -> SrcState v e)
-> (HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e)
-> PairState v p b
-> PairState v p c
-> PairState v p d
-> PairState v p e
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 -> SrcState v e
srcf SrcState r a
fv1) (HdrState r a
-> HdrState s b -> HdrState t c -> HdrState u d -> HdrState v e
hdrf HdrState r a
sv1) PairState v p b
stv2 PairState v p c
stv3 PairState v p d
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 :: (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 srcf :: SrcState r a
-> SrcState s b
-> SrcState t c
-> SrcState u d
-> SrcState v e
-> SrcState w f
srcf hdrf :: HdrState r a
-> HdrState s b
-> HdrState t c
-> HdrState u d
-> HdrState v e
-> HdrState w f
hdrf stv1 :: PairState w p a
stv1 stv2 :: PairState w p b
stv2 stv3 :: PairState w p c
stv3 stv4 :: PairState w p d
stv4 stv5 :: PairState w p e
stv5 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState w p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b
 -> SrcState t c -> SrcState u d -> SrcState v e -> SrcState w f)
-> (HdrState s b
    -> HdrState t c -> HdrState u d -> HdrState v e -> HdrState w f)
-> PairState w p b
-> PairState w p c
-> PairState w p d
-> PairState w p e
-> PairState w p f
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
-> SrcState w f
srcf SrcState r a
fv1) (HdrState r a
-> HdrState s b
-> HdrState t c
-> HdrState u d
-> HdrState v e
-> HdrState w f
hdrf HdrState r a
sv1) PairState w p b
stv2 PairState w p c
stv3 PairState w p d
stv4 PairState w p e
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 :: ([SrcState r a] -> SrcState s b)
-> ([HdrState r a] -> HdrState s b)
-> [PairState s p a]
-> PairState s p b
pair1List srcf :: [SrcState r a] -> SrcState s b
srcf hdrf :: [HdrState r a] -> HdrState s b
hdrf stv :: [PairState s p a]
stv = do
  [p CppSrcCode CppHdrCode a]
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)
sequence [PairState s p a]
stv
  let fl :: [SrcState r a]
fl = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v
      sl :: [HdrState r a]
sl = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v
  CppSrcCode b
p1 <- [SrcState r a] -> SrcState s b
srcf [SrcState r a]
fl
  CppHdrCode b
p2 <- [HdrState r a] -> HdrState s b
hdrf [HdrState r a]
sl
  p CppSrcCode CppHdrCode b -> PairState s p b
forall (m :: * -> *) a. Monad m => a -> m a
return (p CppSrcCode CppHdrCode b -> PairState s p b)
-> p CppSrcCode CppHdrCode b -> PairState s p b
forall a b. (a -> b) -> a -> b
$ CppSrcCode b -> CppHdrCode b -> p CppSrcCode CppHdrCode b
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode b
p1 CppHdrCode b
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 :: ([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 srcf :: [SrcState r a] -> [SrcState s b] -> SrcState t c
srcf hdrf :: [HdrState r a] -> [HdrState s b] -> HdrState t c
hdrf stv1 :: [PairState t p a]
stv1 stv2 :: [PairState t p b]
stv2 = do
  [p CppSrcCode CppHdrCode a]
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)
sequence [PairState t p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  ([SrcState s b] -> SrcState t c)
-> ([HdrState s b] -> HdrState t c)
-> [PairState t p b]
-> PairState t p c
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] -> SrcState t c
srcf [SrcState r a]
fl1) ([HdrState r a] -> [HdrState s b] -> HdrState t c
hdrf [HdrState r a]
sl1) [PairState t p b]
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 :: ([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 srcf :: [SrcState r a] -> [SrcState s b] -> [SrcState t c] -> SrcState u d
srcf hdrf :: [HdrState r a] -> [HdrState s b] -> [HdrState t c] -> HdrState u d
hdrf stv1 :: [PairState u p a]
stv1 stv2 :: [PairState u p b]
stv2 stv3 :: [PairState u p c]
stv3 = do
  [p CppSrcCode CppHdrCode a]
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)
sequence [PairState u p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  ([SrcState s b] -> [SrcState t c] -> SrcState u d)
-> ([HdrState s b] -> [HdrState t c] -> HdrState u d)
-> [PairState u p b]
-> [PairState u p c]
-> PairState u p d
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] -> SrcState u d
srcf [SrcState r a]
fl1) ([HdrState r a] -> [HdrState s b] -> [HdrState t c] -> HdrState u d
hdrf [HdrState r a]
sl1) [PairState u p b]
stv2 [PairState u p c]
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 :: ([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 srcf :: [SrcState r a] -> SrcState s b -> SrcState t c
srcf hdrf :: [HdrState r a] -> HdrState s b -> HdrState t c
hdrf stv1 :: [PairState t p a]
stv1 stv2 :: PairState t p b
stv2 = do
  [p CppSrcCode CppHdrCode a]
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)
sequence [PairState t p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  (SrcState s b -> SrcState t c)
-> (HdrState s b -> HdrState t c)
-> PairState t p b
-> PairState t p c
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 -> SrcState t c
srcf [SrcState r a]
fl1) ([HdrState r a] -> HdrState s b -> HdrState t c
hdrf [HdrState r a]
sl1) PairState t p b
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 :: (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 srcf :: SrcState r a -> [SrcState s b] -> SrcState t c
srcf hdrf :: HdrState r a -> [HdrState s b] -> HdrState t c
hdrf stv1 :: PairState t p a
stv1 stv2 :: [PairState t p b]
stv2 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState t p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  ([SrcState s b] -> SrcState t c)
-> ([HdrState s b] -> HdrState t c)
-> [PairState t p b]
-> PairState t p c
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] -> SrcState t c
srcf SrcState r a
fv1) (HdrState r a -> [HdrState s b] -> HdrState t c
hdrf HdrState r a
sv1) [PairState t p b]
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 :: ([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 srcf :: [SrcState r a] -> [SrcState s b] -> SrcState t c -> SrcState u d
srcf hdrf :: [HdrState r a] -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf stv1 :: [PairState u p a]
stv1 stv2 :: [PairState u p b]
stv2 stv3 :: PairState u p c
stv3 = do
  [p CppSrcCode CppHdrCode a]
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)
sequence [PairState u p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  ([SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
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 -> SrcState u d
srcf [SrcState r a]
fl1) ([HdrState r a] -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf [HdrState r a]
sl1) [PairState u p b]
stv2 PairState u p c
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 :: (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 srcf :: SrcState r a -> [SrcState s b] -> SrcState t c -> SrcState u d
srcf hdrf :: HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf stv1 :: PairState u p a
stv1 stv2 :: [PairState u p b]
stv2 stv3 :: PairState u p c
stv3 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState u p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  ([SrcState s b] -> SrcState t c -> SrcState u d)
-> ([HdrState s b] -> HdrState t c -> HdrState u d)
-> [PairState u p b]
-> PairState u p c
-> PairState u p d
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 -> SrcState u d
srcf SrcState r a
fv1) (HdrState r a -> [HdrState s b] -> HdrState t c -> HdrState u d
hdrf HdrState r a
sv1) [PairState u p b]
stv2 PairState u p c
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 :: ([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 srcf :: [SrcState r a]
-> [SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e
srcf hdrf :: [HdrState r a]
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf stv1 :: [PairState v p a]
stv1 stv2 :: [PairState v p b]
stv2 stv3 :: [PairState v p c]
stv3 stv4 :: PairState v p d
stv4 = do
  [p CppSrcCode CppHdrCode a]
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)
sequence [PairState v p a]
stv1
  let fl1 :: [SrcState r a]
fl1 = (p CppSrcCode CppHdrCode a -> SrcState r a)
-> [p CppSrcCode CppHdrCode a] -> [SrcState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode a]
v1
      sl1 :: [HdrState r a]
sl1 = (p CppSrcCode CppHdrCode a -> HdrState r a)
-> [p CppSrcCode CppHdrCode a] -> [HdrState r a]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode a]
v1
  ([SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e)
-> ([HdrState s b]
    -> [HdrState t c] -> HdrState u d -> HdrState v e)
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
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 -> SrcState v e
srcf [SrcState r a]
fl1) ([HdrState r a]
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf [HdrState r a]
sl1) [PairState v p b]
stv2 [PairState v p c]
stv3 PairState v p d
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 :: (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 srcf :: SrcState r a
-> [SrcState s b] -> [(SrcState t c, SrcState u d)] -> SrcState v e
srcf hdrf :: HdrState r a
-> [HdrState s b] -> [(HdrState t c, HdrState u d)] -> HdrState v e
hdrf stv1 :: PairState v p a
stv1 stv2 :: [PairState v p b]
stv2 stv34 :: [(PairState v p c, PairState v p d)]
stv34 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState v p a
stv1
  [p CppSrcCode CppHdrCode b]
v2 <- [PairState v p b] -> StateT v Identity [p CppSrcCode CppHdrCode b]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [PairState v p b]
stv2
  [p CppSrcCode CppHdrCode c]
v3 <- ((PairState v p c, PairState v p d) -> PairState v p c)
-> [(PairState v p c, PairState v p d)]
-> StateT v Identity [p CppSrcCode CppHdrCode c]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (PairState v p c, PairState v p d) -> PairState v p c
forall a b. (a, b) -> a
fst [(PairState v p c, PairState v p d)]
stv34
  [p CppSrcCode CppHdrCode d]
v4 <- ((PairState v p c, PairState v p d) -> PairState v p d)
-> [(PairState v p c, PairState v p d)]
-> StateT v Identity [p CppSrcCode CppHdrCode d]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (PairState v p c, PairState v p d) -> PairState v p d
forall a b. (a, b) -> b
snd [(PairState v p c, PairState v p d)]
stv34
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
      fv2 :: [SrcState s b]
fv2 = (p CppSrcCode CppHdrCode b -> SrcState s b)
-> [p CppSrcCode CppHdrCode b] -> [SrcState s b]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode b -> SrcState s b
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode b]
v2
      sv2 :: [HdrState s b]
sv2 = (p CppSrcCode CppHdrCode b -> HdrState s b)
-> [p CppSrcCode CppHdrCode b] -> [HdrState s b]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode b -> HdrState s b
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode b]
v2
      fv3 :: [SrcState t c]
fv3 = (p CppSrcCode CppHdrCode c -> SrcState t c)
-> [p CppSrcCode CppHdrCode c] -> [SrcState t c]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode c -> SrcState t c
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode c]
v3
      sv3 :: [HdrState t c]
sv3 = (p CppSrcCode CppHdrCode c -> HdrState t c)
-> [p CppSrcCode CppHdrCode c] -> [HdrState t c]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode c -> HdrState t c
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode c]
v3
      fv4 :: [SrcState u d]
fv4 = (p CppSrcCode CppHdrCode d -> SrcState u d)
-> [p CppSrcCode CppHdrCode d] -> [SrcState u d]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode d -> SrcState u d
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst) [p CppSrcCode CppHdrCode d]
v4
      sv4 :: [HdrState u d]
sv4 = (p CppSrcCode CppHdrCode d -> HdrState u d)
-> [p CppSrcCode CppHdrCode d] -> [HdrState u d]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode d -> HdrState u d
forall (m :: * -> *) a. Monad m => a -> m a
return (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 (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd) [p CppSrcCode CppHdrCode d]
v4
  CppSrcCode e
p1 <- SrcState r a
-> [SrcState s b] -> [(SrcState t c, SrcState u d)] -> SrcState v e
srcf SrcState r a
fv1 [SrcState s b]
fv2 ([SrcState t c] -> [SrcState u d] -> [(SrcState t c, SrcState u d)]
forall a b. [a] -> [b] -> [(a, b)]
zip [SrcState t c]
fv3 [SrcState u d]
fv4)
  CppHdrCode e
p2 <- HdrState r a
-> [HdrState s b] -> [(HdrState t c, HdrState u d)] -> HdrState v e
hdrf HdrState r a
sv1 [HdrState s b]
sv2 ([HdrState t c] -> [HdrState u d] -> [(HdrState t c, HdrState u d)]
forall a b. [a] -> [b] -> [(a, b)]
zip [HdrState t c]
sv3 [HdrState u d]
sv4)
  p CppSrcCode CppHdrCode e -> PairState v p e
forall (m :: * -> *) a. Monad m => a -> m a
return (p CppSrcCode CppHdrCode e -> PairState v p e)
-> p CppSrcCode CppHdrCode e -> PairState v p e
forall a b. (a -> b) -> a -> b
$ CppSrcCode e -> CppHdrCode e -> p CppSrcCode CppHdrCode e
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *) a
       (y :: * -> *).
Pair p =>
x a -> y a -> p x y a
pair CppSrcCode e
p1 CppHdrCode e
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 :: (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 srcf :: SrcState r a
-> SrcState s b
-> [SrcState t c]
-> [(SrcState u d, SrcState v e)]
-> SrcState w f
srcf hdrf :: HdrState r a
-> HdrState s b
-> [HdrState t c]
-> [(HdrState u d, HdrState v e)]
-> HdrState w f
hdrf stv1 :: PairState w p a
stv1 stv2 :: PairState w p b
stv2 stv3 :: [PairState w p c]
stv3 stv45 :: [(PairState w p d, PairState w p e)]
stv45 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState w p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  (SrcState s b
 -> [SrcState t c]
 -> [(SrcState u d, SrcState v e)]
 -> SrcState w f)
-> (HdrState s b
    -> [HdrState t c]
    -> [(HdrState u d, HdrState v e)]
    -> HdrState w f)
-> PairState w p b
-> [PairState w p c]
-> [(PairState w p d, PairState w p e)]
-> PairState w p f
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)]
-> SrcState w f
srcf SrcState r a
fv1) (HdrState r a
-> HdrState s b
-> [HdrState t c]
-> [(HdrState u d, HdrState v e)]
-> HdrState w f
hdrf HdrState r a
sv1) PairState w p b
stv2 [PairState w p c]
stv3 [(PairState w p d, PairState w p e)]
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 :: (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 srcf :: SrcState r a
-> [SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e
srcf hdrf :: HdrState r a
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf stv1 :: PairState v p a
stv1 stv2 :: [PairState v p b]
stv2 stv3 :: [PairState v p c]
stv3 stv4 :: PairState v p d
stv4 = do
  p CppSrcCode CppHdrCode a
v1 <- PairState v p a
stv1
  let fv1 :: SrcState r a
fv1 = CppSrcCode a -> SrcState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode a -> SrcState r a) -> CppSrcCode a -> SrcState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppSrcCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) a.
Pair p =>
p x y a -> x a
pfst p CppSrcCode CppHdrCode a
v1
      sv1 :: HdrState r a
sv1 = CppHdrCode a -> HdrState r a
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode a -> HdrState r a) -> CppHdrCode a -> HdrState r a
forall a b. (a -> b) -> a -> b
$ p CppSrcCode CppHdrCode a -> CppHdrCode a
forall (p :: (* -> *) -> (* -> *) -> * -> *) (x :: * -> *)
       (y :: * -> *) b.
Pair p =>
p x y b -> y b
psnd p CppSrcCode CppHdrCode a
v1
  ([SrcState s b] -> [SrcState t c] -> SrcState u d -> SrcState v e)
-> ([HdrState s b]
    -> [HdrState t c] -> HdrState u d -> HdrState v e)
-> [PairState v p b]
-> [PairState v p c]
-> PairState v p d
-> PairState v p e
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 -> SrcState v e
srcf SrcState r a
fv1) (HdrState r a
-> [HdrState s b] -> [HdrState t c] -> HdrState u d -> HdrState v e
hdrf HdrState r a
sv1) [PairState v p b]
stv2 [PairState v p c]
stv3 PairState v p d
stv4

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

newtype CppSrcCode a = CPPSC {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
/= :: CppSrcCode a -> CppSrcCode a -> Bool
$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
Eq

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

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

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

instance ProgramSym CppSrcCode where
  type Program CppSrcCode = ProgData
  prog :: String -> [SFile CppSrcCode] -> GSProgram CppSrcCode
prog n :: String
n = ([CppSrcCode FileData] -> CppSrcCode ProgData)
-> [State GOOLState (CppSrcCode FileData)]
-> StateT GOOLState Identity (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 -> [FileData] -> ProgData
progD String
n)) ([State GOOLState (CppSrcCode FileData)]
 -> StateT GOOLState Identity (CppSrcCode ProgData))
-> ([StateT FileState Identity (CppSrcCode FileData)]
    -> [State GOOLState (CppSrcCode FileData)])
-> [StateT FileState Identity (CppSrcCode FileData)]
-> StateT GOOLState Identity (CppSrcCode ProgData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateT FileState Identity (CppSrcCode FileData)
 -> State GOOLState (CppSrcCode FileData))
-> [StateT FileState Identity (CppSrcCode FileData)]
-> [State GOOLState (CppSrcCode FileData)]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed (StateT FileState Identity) (CppSrcCode FileData))
  GOOLState
  FileState
-> StateT FileState Identity (CppSrcCode FileData)
-> State GOOLState (CppSrcCode FileData)
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
Lens' GOOLState FileState
lensGStoFS)

instance RenderSym CppSrcCode
  
instance FileSym CppSrcCode where
  type File CppSrcCode = FileData
  fileDoc :: FSModule CppSrcCode -> SFile CppSrcCode
fileDoc m :: FSModule CppSrcCode
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 (Module CppSrcCode)
    -> CppSrcCode (Block CppSrcCode))
-> CppSrcCode (Block CppSrcCode)
-> FSModule CppSrcCode
-> SFile CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String
-> (r (Module r) -> r (Block r))
-> r (Block r)
-> FSModule r
-> SFile r
G.fileDoc String
cppSrcExt CppSrcCode (Module CppSrcCode) -> CppSrcCode (Block CppSrcCode)
forall (r :: * -> *). RenderFile r => r (Module r) -> r (Block r)
top CppSrcCode (Block CppSrcCode)
forall (r :: * -> *). RenderFile r => r (Block r)
bottom FSModule CppSrcCode
m

  docMod :: String
-> [String] -> String -> SFile CppSrcCode -> SFile CppSrcCode
docMod = String
-> String
-> [String]
-> String
-> SFile CppSrcCode
-> SFile CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> String -> [String] -> String -> SFile r -> SFile r
CP.doxMod String
cppSrcExt

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

  commentedMod :: SFile CppSrcCode
-> FS (CppSrcCode (BlockComment CppSrcCode)) -> SFile CppSrcCode
commentedMod = (Bool
 -> CppSrcCode FileData -> CppSrcCode Doc -> CppSrcCode FileData)
-> State FileState Bool
-> StateT FileState Identity (CppSrcCode FileData)
-> SrcState FileState Doc
-> StateT FileState Identity (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 (\mn :: Bool
mn m :: CppSrcCode FileData
m cmt :: 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 -> FSModule CppSrcCode -> SFile CppSrcCode
fileFromData = (String
 -> CppSrcCode (Module CppSrcCode) -> CppSrcCode (File CppSrcCode))
-> String -> FSModule CppSrcCode -> SFile CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(String -> r (Module r) -> r (File r))
-> String -> FSModule r -> SFile r
G.fileFromData ((ModData -> FileData) -> CppSrcCode ModData -> CppSrcCode FileData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r 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
  type Import CppSrcCode = Doc
  langImport :: String -> CppSrcCode (Import CppSrcCode)
langImport n :: String
n = Doc -> CppSrcCode (Import CppSrcCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode (Import CppSrcCode))
-> Doc -> CppSrcCode (Import CppSrcCode)
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> Doc -> Doc
angles (String -> Doc
text String
n)
  modImport :: String -> CppSrcCode (Import CppSrcCode)
modImport n :: String
n = Doc -> CppSrcCode (Import CppSrcCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode (Import CppSrcCode))
-> Doc -> CppSrcCode (Import CppSrcCode)
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> String -> Doc
doubleQuotedText (String -> String -> String
addExt String
cppHdrExt 
    String
n)

instance ImportElim CppSrcCode where
  import' :: CppSrcCode (Import CppSrcCode) -> Doc
import' = CppSrcCode (Import CppSrcCode) -> Doc
forall a. CppSrcCode a -> a
unCPPSC

instance PermanenceSym CppSrcCode where
  type Permanence CppSrcCode = BindData
  static :: CppSrcCode (Permanence CppSrcCode)
static = BindData -> CppSrcCode (Permanence CppSrcCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (BindData -> CppSrcCode (Permanence CppSrcCode))
-> BindData -> CppSrcCode (Permanence CppSrcCode)
forall a b. (a -> b) -> a -> b
$ Binding -> Doc -> BindData
bd Binding
Static Doc
R.static
  dynamic :: CppSrcCode (Permanence CppSrcCode)
dynamic = BindData -> CppSrcCode (Permanence CppSrcCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (BindData -> CppSrcCode (Permanence CppSrcCode))
-> BindData -> CppSrcCode (Permanence CppSrcCode)
forall a b. (a -> b) -> a -> b
$ Binding -> Doc -> BindData
bd Binding
Dynamic Doc
R.dynamic
  
instance PermElim CppSrcCode where
  perm :: CppSrcCode (Permanence CppSrcCode) -> Doc
perm = BindData -> Doc
bindDoc (BindData -> Doc)
-> (CppSrcCode BindData -> BindData) -> CppSrcCode BindData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode BindData -> BindData
forall a. CppSrcCode a -> a
unCPPSC
  binding :: CppSrcCode (Permanence CppSrcCode) -> Binding
binding = BindData -> Binding
bind (BindData -> Binding)
-> (CppSrcCode BindData -> BindData)
-> CppSrcCode BindData
-> Binding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode BindData -> BindData
forall a. CppSrcCode a -> a
unCPPSC

instance BodySym CppSrcCode where
  type Body CppSrcCode = Doc
  body :: [MSBlock CppSrcCode] -> MSBody CppSrcCode
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 -> MSBody CppSrcCode -> MSBody CppSrcCode
addComments s :: 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 (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (String -> Doc -> Doc -> Doc
R.addComments String
s Doc
commentStart))

instance RenderBody CppSrcCode where
  multiBody :: [MSBody CppSrcCode] -> MSBody CppSrcCode
multiBody = [MSBody CppSrcCode] -> MSBody CppSrcCode
forall (r :: * -> *).
(RenderSym r, Monad r) =>
[MSBody r] -> MS (r Doc)
G.multiBody 

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

instance BlockSym CppSrcCode where
  type Block CppSrcCode = Doc
  block :: [MSStatement CppSrcCode] -> MSBlock CppSrcCode
block = [MSStatement CppSrcCode] -> MSBlock CppSrcCode
forall (r :: * -> *).
(RenderSym r, Monad r) =>
[MSStatement r] -> MS (r Doc)
G.block

instance RenderBlock CppSrcCode where
  multiBlock :: [MSBlock CppSrcCode] -> MSBlock CppSrcCode
multiBlock = [MSBlock CppSrcCode] -> MSBlock CppSrcCode
forall (r :: * -> *).
(RenderSym r, Monad r) =>
[MSBlock r] -> MS (r Doc)
G.multiBlock

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

instance TypeSym CppSrcCode where
  type Type CppSrcCode = TypeData
  bool :: VSType CppSrcCode
bool = VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r
cppBoolType
  int :: VSType CppSrcCode
int = VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r
CP.int
  float :: VSType CppSrcCode
float = VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r
C.float
  double :: VSType CppSrcCode
double = VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r
C.double
  char :: VSType CppSrcCode
char = VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r
C.char
  string :: VSType CppSrcCode
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 :: * -> *). RenderSym r => VSType r
CP.string
  infile :: VSType CppSrcCode
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 :: * -> *). RenderSym r => VSType r
cppInfileType
  outfile :: VSType CppSrcCode
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 :: * -> *). RenderSym r => VSType r
cppOutfileType
  listType :: VSType CppSrcCode -> VSType CppSrcCode
listType t :: VSType CppSrcCode
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 -> VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => String -> VSType r -> VSType r
C.listType String
vector VSType CppSrcCode
t
  arrayType :: VSType CppSrcCode -> VSType CppSrcCode
arrayType = VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
cppArrayType
  listInnerType :: VSType CppSrcCode -> VSType CppSrcCode
listInnerType = VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
G.listInnerType
  obj :: String -> VSType CppSrcCode
obj n :: String
n = do 
    String
cn <- LensLike'
  (Zoomed (StateT MethodState Identity) String)
  ValueState
  MethodState
-> StateT MethodState Identity String
-> StateT ValueState Identity String
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
Lens' ValueState MethodState
lensVStoMS StateT MethodState Identity String
getClassName
    if String
cn String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
n then String -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => String -> VSType r
G.obj String
n else 
      VS (Map String String)
getClassMap VS (Map String String)
-> (Map String String -> State ValueState (CppSrcCode TypeData))
-> State ValueState (CppSrcCode TypeData)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\cm :: 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 (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 -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => String -> VSType r
G.obj String
n))
  funcType :: [VSType CppSrcCode] -> VSType CppSrcCode -> VSType CppSrcCode
funcType = [VSType CppSrcCode] -> VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *).
RenderSym r =>
[VSType r] -> VSType r -> VSType r
CP.funcType
  void :: VSType CppSrcCode
void = VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r
C.void

instance TypeElim CppSrcCode where
  getType :: CppSrcCode (Type CppSrcCode) -> CodeType
getType = 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
  getTypeString :: CppSrcCode (Type CppSrcCode) -> String
getTypeString = TypeData -> String
typeString (TypeData -> String)
-> (CppSrcCode TypeData -> TypeData)
-> CppSrcCode TypeData
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode TypeData -> TypeData
forall a. CppSrcCode a -> a
unCPPSC
  
instance RenderType CppSrcCode where
  multiType :: [VSType CppSrcCode] -> VSType CppSrcCode
multiType _ = String -> VSType CppSrcCode
forall a. HasCallStack => String -> a
error (String -> VSType CppSrcCode) -> String -> VSType CppSrcCode
forall a b. (a -> b) -> a -> b
$ String -> String
C.multiTypeError String
cppName
  typeFromData :: CodeType -> String -> Doc -> VSType CppSrcCode
typeFromData t :: CodeType
t s :: String
s d :: Doc
d = CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall a s. a -> State s a
toState (TypeData -> CppSrcCode TypeData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (TypeData -> CppSrcCode TypeData)
-> TypeData -> CppSrcCode TypeData
forall a b. (a -> b) -> a -> b
$ CodeType -> String -> Doc -> TypeData
td CodeType
t String
s Doc
d)

instance InternalTypeElim CppSrcCode where
  type' :: CppSrcCode (Type CppSrcCode) -> Doc
type' = TypeData -> Doc
typeDoc (TypeData -> Doc)
-> (CppSrcCode TypeData -> TypeData) -> CppSrcCode TypeData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode TypeData -> TypeData
forall a. CppSrcCode a -> a
unCPPSC
  
instance UnaryOpSym CppSrcCode where
  type UnaryOp CppSrcCode = OpData
  notOp :: VSUnOp CppSrcCode
notOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
C.notOp
  negateOp :: VSUnOp CppSrcCode
negateOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.negateOp
  sqrtOp :: VSUnOp CppSrcCode
sqrtOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppSqrtOp
  absOp :: VSUnOp CppSrcCode
absOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppAbsOp
  logOp :: VSUnOp CppSrcCode
logOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppLogOp
  lnOp :: VSUnOp CppSrcCode
lnOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppLnOp
  expOp :: VSUnOp CppSrcCode
expOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppExpOp
  sinOp :: VSUnOp CppSrcCode
sinOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppSinOp
  cosOp :: VSUnOp CppSrcCode
cosOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppCosOp
  tanOp :: VSUnOp CppSrcCode
tanOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppTanOp
  asinOp :: VSUnOp CppSrcCode
asinOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppAsinOp
  acosOp :: VSUnOp CppSrcCode
acosOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppAcosOp
  atanOp :: VSUnOp CppSrcCode
atanOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppAtanOp
  floorOp :: VSUnOp CppSrcCode
floorOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppFloorOp
  ceilOp :: VSUnOp CppSrcCode
ceilOp = VSUnOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
cppCeilOp

instance BinaryOpSym CppSrcCode where
  type BinaryOp CppSrcCode = OpData
  equalOp :: VSBinOp CppSrcCode
equalOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.equalOp
  notEqualOp :: VSBinOp CppSrcCode
notEqualOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.notEqualOp
  greaterOp :: VSBinOp CppSrcCode
greaterOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.greaterOp
  greaterEqualOp :: VSBinOp CppSrcCode
greaterEqualOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.greaterEqualOp
  lessOp :: VSBinOp CppSrcCode
lessOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.lessOp
  lessEqualOp :: VSBinOp CppSrcCode
lessEqualOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.lessEqualOp
  plusOp :: VSBinOp CppSrcCode
plusOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.plusOp
  minusOp :: VSBinOp CppSrcCode
minusOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.minusOp
  multOp :: VSBinOp CppSrcCode
multOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.multOp
  divideOp :: VSBinOp CppSrcCode
divideOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.divideOp
  powerOp :: VSBinOp CppSrcCode
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 :: VSBinOp CppSrcCode
moduloOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
G.moduloOp
  andOp :: VSBinOp CppSrcCode
andOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
C.andOp
  orOp :: VSBinOp CppSrcCode
orOp = VSBinOp CppSrcCode
forall (r :: * -> *). Monad r => VSOp r
C.orOp

instance OpElim CppSrcCode where
  uOp :: CppSrcCode (UnaryOp CppSrcCode) -> 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 (BinaryOp CppSrcCode) -> 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 (UnaryOp CppSrcCode) -> 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 (BinaryOp CppSrcCode) -> 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 VariableSym CppSrcCode where
  type Variable CppSrcCode = VarData
  var :: String -> VSType CppSrcCode -> SVariable CppSrcCode
var = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> SVariable r
G.var
  staticVar :: String -> VSType CppSrcCode -> SVariable CppSrcCode
staticVar = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> SVariable r
G.staticVar
  const :: String -> VSType CppSrcCode -> SVariable CppSrcCode
const = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var
  extVar :: String -> String -> VSType CppSrcCode -> SVariable CppSrcCode
extVar l :: String
l n :: String
n t :: VSType CppSrcCode
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 VarData -> SrcState ValueState VarData
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
n VSType CppSrcCode
t
  self :: SVariable CppSrcCode
self = SVariable CppSrcCode
forall (r :: * -> *). RenderSym r => SVariable r
C.self
  classVar :: VSType CppSrcCode -> SVariable CppSrcCode -> SVariable CppSrcCode
classVar c' :: VSType CppSrcCode
c' v' :: SVariable CppSrcCode
v'= do 
    CppSrcCode TypeData
c <- State ValueState (CppSrcCode TypeData)
VSType CppSrcCode
c'
    CppSrcCode VarData
v <- SrcState ValueState VarData
SVariable CppSrcCode
v'
    CppSrcCode VarData
vfd <- Binding
-> String -> VSType CppSrcCode -> Doc -> SVariable CppSrcCode
forall (r :: * -> *).
RenderVariable r =>
Binding -> String -> VSType r -> Doc -> SVariable r
varFromData 
      (CppSrcCode (Variable CppSrcCode) -> Binding
forall (r :: * -> *).
InternalVarElim r =>
r (Variable r) -> Binding
variableBind CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v) (CppSrcCode (Type CppSrcCode) -> String
forall (r :: * -> *). TypeElim r => r (Type r) -> String
getTypeString CppSrcCode TypeData
CppSrcCode (Type CppSrcCode)
c String -> String -> String
`nmSpcAccess` CppSrcCode (Variable CppSrcCode) -> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v) 
      (CppSrcCode TypeData -> VSType CppSrcCode
forall a s. a -> State s a
toState (CppSrcCode TypeData -> VSType CppSrcCode)
-> CppSrcCode TypeData -> VSType CppSrcCode
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Variable CppSrcCode) -> CppSrcCode (Type CppSrcCode)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v) (Doc -> Doc -> Doc
cppClassVar (CppSrcCode (Type CppSrcCode) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' CppSrcCode TypeData
CppSrcCode (Type CppSrcCode)
c) (CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v))
    CppSrcCode VarData -> SrcState ValueState VarData
forall a s. a -> State s a
toState (CppSrcCode VarData -> SrcState ValueState VarData)
-> CppSrcCode VarData -> SrcState ValueState VarData
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Variable CppSrcCode)
-> CppSrcCode (Variable CppSrcCode)
forall (r :: * -> *).
RenderSym r =>
r (Variable r) -> r (Variable r)
classVarCheckStatic CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
vfd
  extClassVar :: VSType CppSrcCode -> SVariable CppSrcCode -> SVariable CppSrcCode
extClassVar c :: VSType CppSrcCode
c v :: SVariable CppSrcCode
v = do
    CppSrcCode TypeData
t <- State ValueState (CppSrcCode TypeData)
VSType CppSrcCode
c
    Map String String
cm <- VS (Map String String)
getClassMap
    (SrcState ValueState VarData -> SrcState ValueState VarData)
-> (String
    -> SrcState ValueState VarData -> SrcState ValueState VarData)
-> Maybe String
-> SrcState ValueState VarData
-> SrcState ValueState VarData
forall b a. b -> (a -> b) -> Maybe a -> b
maybe SrcState ValueState VarData -> SrcState ValueState VarData
forall a. a -> a
id (StateT ValueState Identity ()
-> SrcState ValueState VarData -> SrcState ValueState VarData
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
(>>) (StateT ValueState Identity ()
 -> SrcState ValueState VarData -> SrcState ValueState VarData)
-> (String -> StateT ValueState Identity ())
-> String
-> SrcState ValueState VarData
-> SrcState ValueState VarData
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 (CppSrcCode (Type CppSrcCode) -> String
forall (r :: * -> *). TypeElim r => r (Type r) -> String
getTypeString CppSrcCode TypeData
CppSrcCode (Type CppSrcCode)
t) Map String String
cm) (SrcState ValueState VarData -> SrcState ValueState VarData)
-> SrcState ValueState VarData -> SrcState ValueState VarData
forall a b. (a -> b) -> a -> b
$ VSType CppSrcCode -> SVariable CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
VSType r -> SVariable r -> SVariable r
classVar (CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall (m :: * -> *) a. Monad m => a -> m a
return CppSrcCode TypeData
t) SVariable CppSrcCode
v
  objVar :: SVariable CppSrcCode
-> SVariable CppSrcCode -> SVariable CppSrcCode
objVar = SVariable CppSrcCode
-> SVariable CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SVariable r -> SVariable r -> SVariable r
G.objVar
  objVarSelf :: SVariable CppSrcCode -> SVariable CppSrcCode
objVarSelf v' :: SVariable CppSrcCode
v' = do 
    CppSrcCode VarData
v <- SrcState ValueState VarData
SVariable CppSrcCode
v' 
    String
-> CppSrcCode (Type CppSrcCode) -> Doc -> SVariable CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> r (Type r) -> Doc -> SVariable r
mkVar (String
R.this String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
ptrAccess String -> String -> String
forall a. [a] -> [a] -> [a]
++ CppSrcCode (Variable CppSrcCode) -> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v)
      (CppSrcCode (Variable CppSrcCode) -> CppSrcCode (Type CppSrcCode)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v) (Doc
R.this' Doc -> Doc -> Doc
<> Doc
ptrAccess' Doc -> Doc -> Doc
<> CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v)
  arrayElem :: Integer -> SVariable CppSrcCode -> SVariable CppSrcCode
arrayElem i :: Integer
i = SValue CppSrcCode -> SVariable CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SVariable r -> SVariable r
G.arrayElem (Integer -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
i)

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

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

instance RenderVariable CppSrcCode where
  varFromData :: Binding
-> String -> VSType CppSrcCode -> Doc -> SVariable CppSrcCode
varFromData b :: Binding
b n :: String
n t' :: VSType CppSrcCode
t' d :: Doc
d = do 
    CppSrcCode TypeData
t <- State ValueState (CppSrcCode TypeData)
VSType CppSrcCode
t'
    CppSrcCode VarData -> SrcState ValueState VarData
forall a s. a -> State s a
toState (CppSrcCode VarData -> SrcState ValueState VarData)
-> CppSrcCode VarData -> SrcState ValueState VarData
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> VarData)
-> CppSrcCode TypeData -> CppSrcCode Doc -> CppSrcCode VarData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (Binding -> String -> TypeData -> Doc -> VarData
vard Binding
b String
n) CppSrcCode TypeData
t (Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)

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

instance Argument CppSrcCode where
  pointerArg :: SValue CppSrcCode -> SValue CppSrcCode
pointerArg = SValue CppSrcCode -> SValue CppSrcCode
forall a. a -> a
id

instance Literal CppSrcCode where
  litTrue :: SValue CppSrcCode
litTrue = SValue CppSrcCode
forall (r :: * -> *). RenderSym r => SValue r
C.litTrue
  litFalse :: SValue CppSrcCode
litFalse = SValue CppSrcCode
forall (r :: * -> *). RenderSym r => SValue r
C.litFalse
  litChar :: Char -> SValue CppSrcCode
litChar = (Doc -> Doc) -> Char -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(Doc -> Doc) -> Char -> SValue r
G.litChar Doc -> Doc
quotes
  litDouble :: Double -> SValue CppSrcCode
litDouble = Double -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => Double -> SValue r
G.litDouble
  litFloat :: Float -> SValue CppSrcCode
litFloat = Float -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => Float -> SValue r
C.litFloat
  litInt :: Integer -> SValue CppSrcCode
litInt = Integer -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => Integer -> SValue r
G.litInt
  litString :: String -> SValue CppSrcCode
litString = String -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => String -> SValue r
G.litString
  litArray :: VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
litArray = (Doc -> Doc)
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(Doc -> Doc) -> VSType r -> [SValue r] -> SValue r
CP.litArray Doc -> Doc
braces
  litList :: VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
litList _ _ = String -> SValue CppSrcCode
forall a. HasCallStack => String -> a
error (String -> SValue CppSrcCode) -> String -> SValue CppSrcCode
forall a b. (a -> b) -> a -> b
$ "List literals not supported in " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
cppName

instance MathConstant CppSrcCode where
  pi :: SValue CppSrcCode
pi = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addDefine String
mathDefines)
    SrcState ValueState ValData -> SrcState ValueState ValData
forall a. VS a -> VS a
addMathHImport (VSType CppSrcCode -> Doc -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
double Doc
cppPi)

instance VariableValue CppSrcCode where
  valueOf :: SVariable CppSrcCode -> SValue CppSrcCode
valueOf vr' :: SVariable CppSrcCode
vr' = do 
    CppSrcCode VarData
vr <- SrcState ValueState VarData
SVariable CppSrcCode
vr'
    [String]
its <- LensLike'
  (Zoomed (StateT MethodState Identity) [String])
  ValueState
  MethodState
-> StateT MethodState Identity [String]
-> StateT ValueState Identity [String]
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
Lens' ValueState MethodState
lensVStoMS StateT MethodState Identity [String]
getIter
    let namevr :: String
namevr = CppSrcCode (Variable CppSrcCode) -> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
vr 
    if String
namevr String -> [String] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [String]
its then 
      VSType CppSrcCode -> Doc -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal (VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
iterator (VSType CppSrcCode -> VSType CppSrcCode)
-> VSType CppSrcCode -> VSType CppSrcCode
forall a b. (a -> b) -> a -> b
$ CppSrcCode TypeData -> VSType CppSrcCode
forall a s. a -> State s a
toState (CppSrcCode TypeData -> VSType CppSrcCode)
-> CppSrcCode TypeData -> VSType CppSrcCode
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Variable CppSrcCode) -> CppSrcCode (Type CppSrcCode)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
vr) 
        (Doc -> Doc
parens (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ Doc
cppDeref Doc -> Doc -> Doc
<> CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
vr)
      else SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => SVariable r -> SValue r
G.valueOf SVariable CppSrcCode
vr'

instance CommandLineArgs CppSrcCode where
  arg :: Integer -> SValue CppSrcCode
arg n :: Integer
n = SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SValue r -> SValue r
G.arg (Integer -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt (Integer -> SValue CppSrcCode) -> Integer -> SValue CppSrcCode
forall a b. (a -> b) -> a -> b
$ Integer
nInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+1) SValue CppSrcCode
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList
  argsList :: SValue CppSrcCode
argsList = String -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => String -> SValue r
G.argsList String
argv
  argExists :: Integer -> SValue CppSrcCode
argExists i :: Integer
i = SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). List r => SValue r -> SValue r
listSize SValue CppSrcCode
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
?> Integer -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Integer -> SValue r
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
+1)

instance NumericExpression CppSrcCode where
  #~ :: SValue CppSrcCode -> SValue CppSrcCode
(#~) = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr' VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
negateOp
  #/^ :: SValue CppSrcCode -> SValue CppSrcCode
(#/^) = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sqrtOp
  #| :: SValue CppSrcCode -> SValue CppSrcCode
(#|) = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
absOp
  #+ :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(#+) = VSBinOp CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
plusOp
  #- :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(#-) = VSBinOp CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
minusOp
  #* :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(#*) = VSBinOp CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
multOp
  #/ :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(#/) = VSBinOp CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
divideOp
  #% :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(#%) = VSBinOp CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
moduloOp
  #^ :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(#^) = VSBinOp CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr' VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
powerOp

  log :: SValue CppSrcCode -> SValue CppSrcCode
log = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
logOp
  ln :: SValue CppSrcCode -> SValue CppSrcCode
ln = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
lnOp
  exp :: SValue CppSrcCode -> SValue CppSrcCode
exp = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
expOp
  sin :: SValue CppSrcCode -> SValue CppSrcCode
sin = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sinOp
  cos :: SValue CppSrcCode -> SValue CppSrcCode
cos = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
cosOp
  tan :: SValue CppSrcCode -> SValue CppSrcCode
tan = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
tanOp
  csc :: SValue CppSrcCode -> SValue CppSrcCode
csc = SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => SValue r -> SValue r
G.csc
  sec :: SValue CppSrcCode -> SValue CppSrcCode
sec = SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => SValue r -> SValue r
G.sec
  cot :: SValue CppSrcCode -> SValue CppSrcCode
cot = SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => SValue r -> SValue r
G.cot
  arcsin :: SValue CppSrcCode -> SValue CppSrcCode
arcsin = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
asinOp
  arccos :: SValue CppSrcCode -> SValue CppSrcCode
arccos = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
acosOp
  arctan :: SValue CppSrcCode -> SValue CppSrcCode
arctan = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
atanOp
  floor :: SValue CppSrcCode -> SValue CppSrcCode
floor = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
floorOp
  ceil :: SValue CppSrcCode -> SValue CppSrcCode
ceil = VSUnOp CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
ceilOp

instance BooleanExpression CppSrcCode where
  ?! :: SValue CppSrcCode -> SValue CppSrcCode
(?!) = VSUnOp CppSrcCode
-> VSType CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSUnOp r -> VSType r -> SValue r -> SValue r
typeUnExpr VSUnOp CppSrcCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
notOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool
  ?&& :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(?&&) = VSBinOp CppSrcCode
-> VSType CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
andOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool
  ?|| :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(?||) = VSBinOp CppSrcCode
-> VSType CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
orOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool

instance Comparison CppSrcCode where
  ?< :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(?<) = VSBinOp CppSrcCode
-> VSType CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool
  ?<= :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(?<=) = VSBinOp CppSrcCode
-> VSType CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessEqualOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool
  ?> :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(?>) = VSBinOp CppSrcCode
-> VSType CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool
  ?>= :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(?>=) = VSBinOp CppSrcCode
-> VSType CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterEqualOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool
  ?== :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(?==) = VSBinOp CppSrcCode
-> VSType CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
equalOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool
  ?!= :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
(?!=) = VSBinOp CppSrcCode
-> VSType CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSBinOp CppSrcCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
notEqualOp VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
bool
   
instance ValueExpression CppSrcCode where
  inlineIf :: SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
inlineIf = SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SValue r -> SValue r -> SValue r
C.inlineIf

  funcAppMixedArgs :: MixedCall CppSrcCode
funcAppMixedArgs = MixedCall CppSrcCode
forall (r :: * -> *). RenderSym r => MixedCall r
G.funcAppMixedArgs
  selfFuncAppMixedArgs :: MixedCall CppSrcCode
selfFuncAppMixedArgs = Doc -> SVariable CppSrcCode -> MixedCall CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Doc -> SVariable r -> MixedCall r
G.selfFuncAppMixedArgs Doc
ptrAccess' SVariable CppSrcCode
forall (r :: * -> *). VariableSym r => SVariable r
self
  extFuncAppMixedArgs :: String -> MixedCall CppSrcCode
extFuncAppMixedArgs l :: String
l n :: String
n t :: VSType CppSrcCode
t vs :: [SValue CppSrcCode]
vs ns :: NamedArgs CppSrcCode
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
forall (r :: * -> *). ValueExpression r => MixedCall r
funcAppMixedArgs String
n VSType CppSrcCode
t [SValue CppSrcCode]
vs NamedArgs CppSrcCode
ns
  libFuncAppMixedArgs :: String -> MixedCall CppSrcCode
libFuncAppMixedArgs = String -> MixedCall CppSrcCode
forall (r :: * -> *). RenderSym r => String -> MixedCall r
C.libFuncAppMixedArgs
  newObjMixedArgs :: MixedCtorCall CppSrcCode
newObjMixedArgs = MixedCall CppSrcCode
forall (r :: * -> *). RenderSym r => MixedCall r
G.newObjMixedArgs ""
  extNewObjMixedArgs :: MixedCall CppSrcCode
extNewObjMixedArgs l :: String
l t :: VSType CppSrcCode
t vs :: [SValue CppSrcCode]
vs ns :: NamedArgs CppSrcCode
ns = do
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addModuleImportVS String
l)
    MixedCtorCall CppSrcCode
forall (r :: * -> *). ValueExpression r => MixedCtorCall r
newObjMixedArgs VSType CppSrcCode
t [SValue CppSrcCode]
vs NamedArgs CppSrcCode
ns
  libNewObjMixedArgs :: MixedCall CppSrcCode
libNewObjMixedArgs = MixedCall CppSrcCode
forall (r :: * -> *). RenderSym r => MixedCall r
C.libNewObjMixedArgs

  lambda :: [SVariable CppSrcCode] -> SValue CppSrcCode -> SValue CppSrcCode
lambda = ([CppSrcCode (Variable CppSrcCode)]
 -> CppSrcCode (Value CppSrcCode) -> Doc)
-> [SVariable CppSrcCode] -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
([r (Variable r)] -> r (Value r) -> Doc)
-> [SVariable r] -> SValue r -> SValue r
G.lambda [CppSrcCode (Variable CppSrcCode)]
-> CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *).
RenderSym r =>
[r (Variable r)] -> r (Value r) -> Doc
cppLambda

  notNull :: SValue CppSrcCode -> SValue CppSrcCode
notNull v :: SValue CppSrcCode
v = SValue CppSrcCode
v

instance RenderValue CppSrcCode where
  inputFunc :: SValue CppSrcCode
inputFunc = SrcState ValueState ValData -> SValue CppSrcCode
forall a. VS a -> VS a
addIOStreamImport (SrcState ValueState ValData -> SValue CppSrcCode)
-> SrcState ValueState ValData -> SValue CppSrcCode
forall a b. (a -> b) -> a -> b
$ VSType CppSrcCode -> Doc -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
string (String -> Doc
text String
cin)
  printFunc :: SValue CppSrcCode
printFunc = SrcState ValueState ValData -> SValue CppSrcCode
forall a. VS a -> VS a
addIOStreamImport (SrcState ValueState ValData -> SValue CppSrcCode)
-> SrcState ValueState ValData -> SValue CppSrcCode
forall a b. (a -> b) -> a -> b
$ VSType CppSrcCode -> Doc -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
void (String -> Doc
text String
cout)
  printLnFunc :: SValue CppSrcCode
printLnFunc = SrcState ValueState ValData -> SValue CppSrcCode
forall a. VS a -> VS a
addIOStreamImport (SrcState ValueState ValData -> SValue CppSrcCode)
-> SrcState ValueState ValData -> SValue CppSrcCode
forall a b. (a -> b) -> a -> b
$ VSType CppSrcCode -> Doc -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
void (String -> Doc
text String
cout)
  printFileFunc :: SValue CppSrcCode -> SValue CppSrcCode
printFileFunc = (CppSrcCode TypeData
 -> CppSrcCode ValData -> SrcState ValueState ValData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState ValData
-> SrcState ValueState ValData
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m a -> m b -> m c
on2StateWrapped (\vt :: CppSrcCode TypeData
vt w :: CppSrcCode ValData
w -> CppSrcCode (Type CppSrcCode) -> Doc -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => r (Type r) -> Doc -> SValue r
mkVal CppSrcCode TypeData
CppSrcCode (Type CppSrcCode)
vt (CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value CppSrcCode ValData
CppSrcCode (Value CppSrcCode)
w)) State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
void
  printFileLnFunc :: SValue CppSrcCode -> SValue CppSrcCode
printFileLnFunc = (CppSrcCode TypeData
 -> CppSrcCode ValData -> SrcState ValueState ValData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState ValData
-> SrcState ValueState ValData
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m a -> m b -> m c
on2StateWrapped (\vt :: CppSrcCode TypeData
vt w :: CppSrcCode ValData
w -> CppSrcCode (Type CppSrcCode) -> Doc -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => r (Type r) -> Doc -> SValue r
mkVal CppSrcCode TypeData
CppSrcCode (Type CppSrcCode)
vt (CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value CppSrcCode ValData
CppSrcCode (Value CppSrcCode)
w)) State ValueState (CppSrcCode TypeData)
forall (r :: * -> *). TypeSym r => VSType r
void

  cast :: VSType CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
cast = VSType CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
cppCast

  call :: Maybe String -> Maybe Doc -> MixedCall CppSrcCode
call = String -> Maybe String -> Maybe Doc -> MixedCall CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> Maybe String -> Maybe Doc -> MixedCall r
CP.call' String
cppName

  valFromData :: Maybe Int -> VSType CppSrcCode -> Doc -> SValue CppSrcCode
valFromData p :: Maybe Int
p t' :: VSType CppSrcCode
t' d :: Doc
d = do 
    CppSrcCode TypeData
t <- State ValueState (CppSrcCode TypeData)
VSType CppSrcCode
t'
    CppSrcCode ValData -> SrcState ValueState ValData
forall a s. a -> State s a
toState (CppSrcCode ValData -> SrcState ValueState ValData)
-> CppSrcCode ValData -> SrcState ValueState ValData
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> ValData)
-> CppSrcCode TypeData -> CppSrcCode Doc -> CppSrcCode ValData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (Maybe Int -> TypeData -> Doc -> ValData
vd Maybe Int
p) CppSrcCode TypeData
t (Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)
  
instance ValueElim CppSrcCode where
  valuePrec :: CppSrcCode (Value CppSrcCode) -> Maybe Int
valuePrec = ValData -> Maybe Int
valPrec (ValData -> Maybe Int)
-> (CppSrcCode ValData -> ValData)
-> CppSrcCode ValData
-> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode ValData -> ValData
forall a. CppSrcCode a -> a
unCPPSC
  value :: CppSrcCode (Value CppSrcCode) -> Doc
value = ValData -> Doc
val (ValData -> Doc)
-> (CppSrcCode ValData -> ValData) -> CppSrcCode ValData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode ValData -> ValData
forall a. CppSrcCode a -> a
unCPPSC

instance InternalValueExp CppSrcCode where
  objMethodCallMixedArgs' :: String
-> VSType CppSrcCode
-> SValue CppSrcCode
-> [SValue CppSrcCode]
-> NamedArgs CppSrcCode
-> SValue CppSrcCode
objMethodCallMixedArgs' = String
-> VSType CppSrcCode
-> SValue CppSrcCode
-> [SValue CppSrcCode]
-> NamedArgs CppSrcCode
-> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String
-> VSType r -> SValue r -> [SValue r] -> NamedArgs r -> SValue r
G.objMethodCall

instance FunctionSym CppSrcCode where
  type Function CppSrcCode = FuncData
  func :: String
-> VSType CppSrcCode
-> [SValue CppSrcCode]
-> VSFunction CppSrcCode
func = String
-> VSType CppSrcCode
-> [SValue CppSrcCode]
-> VSFunction CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> [SValue r] -> VSFunction r
G.func
  objAccess :: SValue CppSrcCode -> VSFunction CppSrcCode -> SValue CppSrcCode
objAccess = SValue CppSrcCode -> VSFunction CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> VSFunction r -> SValue r
G.objAccess

instance GetSet CppSrcCode where
  get :: SValue CppSrcCode -> SVariable CppSrcCode -> SValue CppSrcCode
get = SValue CppSrcCode -> SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SVariable r -> SValue r
G.get
  set :: SValue CppSrcCode
-> SVariable CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
set = SValue CppSrcCode
-> SVariable CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SVariable r -> SValue r -> SValue r
G.set

instance List CppSrcCode where
  listSize :: SValue CppSrcCode -> SValue CppSrcCode
listSize v :: SValue CppSrcCode
v = VSType CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderValue r =>
VSType r -> SValue r -> SValue r
cast VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
int (SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => SValue r -> SValue r
C.listSize SValue CppSrcCode
v)
  listAdd :: SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
listAdd = SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SValue r -> SValue r -> SValue r
G.listAdd
  listAppend :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
listAppend = SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SValue r -> SValue r
G.listAppend 
  listAccess :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
listAccess = SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SValue r -> SValue r
G.listAccess
  listSet :: SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
listSet = SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SValue r -> SValue r -> SValue r
G.listSet
  indexOf :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
indexOf l :: SValue CppSrcCode
l v :: SValue CppSrcCode
v = SrcState ValueState ValData -> SValue CppSrcCode
forall a. VS a -> VS a
addAlgorithmImportVS (SrcState ValueState ValData -> SValue CppSrcCode)
-> SrcState ValueState ValData -> SValue CppSrcCode
forall a b. (a -> b) -> a -> b
$ SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
cppIndexFunc SValue CppSrcCode
l SValue CppSrcCode
v SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
#- SValue CppSrcCode -> SValue CppSrcCode
iterBegin SValue CppSrcCode
l
    
instance InternalList CppSrcCode where
  listSlice' :: Maybe (SValue CppSrcCode)
-> Maybe (SValue CppSrcCode)
-> Maybe (SValue CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSBlock CppSrcCode
listSlice' = Maybe (SValue CppSrcCode)
-> Maybe (SValue CppSrcCode)
-> Maybe (SValue CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSBlock CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MSBlock r
M.listSlice

instance InternalGetSet CppSrcCode where
  getFunc :: SVariable CppSrcCode -> VSFunction CppSrcCode
getFunc = SVariable CppSrcCode -> VSFunction CppSrcCode
forall (r :: * -> *). RenderSym r => SVariable r -> VSFunction r
G.getFunc
  setFunc :: VSType CppSrcCode
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> VSFunction CppSrcCode
setFunc = VSType CppSrcCode
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> VSFunction CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSType r -> SVariable r -> SValue r -> VSFunction r
G.setFunc

instance InternalListFunc CppSrcCode where
  listSizeFunc :: VSFunction CppSrcCode
listSizeFunc = VSFunction CppSrcCode
forall (r :: * -> *). RenderSym r => VSFunction r
CP.listSizeFunc
  listAddFunc :: SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> VSFunction CppSrcCode
listAddFunc = SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> VSFunction CppSrcCode
cppListAddFunc
  listAppendFunc :: SValue CppSrcCode -> VSFunction CppSrcCode
listAppendFunc = String -> SValue CppSrcCode -> VSFunction CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> SValue r -> VSFunction r
G.listAppendFunc String
cppListAppend
  listAccessFunc :: VSType CppSrcCode -> SValue CppSrcCode -> VSFunction CppSrcCode
listAccessFunc = String
-> VSType CppSrcCode -> SValue CppSrcCode -> VSFunction CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> SValue r -> VSFunction r
CP.listAccessFunc' String
cppListAccess
  listSetFunc :: SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> VSFunction CppSrcCode
listSetFunc = (Doc -> Doc -> Doc)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> VSFunction CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(Doc -> Doc -> Doc)
-> SValue r -> SValue r -> SValue r -> VSFunction r
CP.listSetFunc Doc -> Doc -> Doc
cppListSetDoc

instance RenderFunction CppSrcCode where
  funcFromData :: Doc -> VSType CppSrcCode -> VSFunction CppSrcCode
funcFromData d :: 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 (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (TypeData -> Doc -> FuncData
`fd` Doc
d))
  
instance FunctionElim CppSrcCode where
  functionType :: CppSrcCode (Function CppSrcCode) -> CppSrcCode (Type CppSrcCode)
functionType = (FuncData -> TypeData)
-> CppSrcCode FuncData -> CppSrcCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue FuncData -> TypeData
fType
  function :: CppSrcCode (Function CppSrcCode) -> 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 where
  multiAssign :: [SVariable CppSrcCode]
-> [SValue CppSrcCode] -> MSStatement CppSrcCode
multiAssign _ _ = String -> MSStatement CppSrcCode
forall a. HasCallStack => String -> a
error (String -> MSStatement CppSrcCode)
-> String -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ String -> String
C.multiAssignError String
cppName

instance InternalIOStmt CppSrcCode where
  printSt :: Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
printSt nl :: Bool
nl _ = Bool
-> SValue CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> SValue r -> SValue r -> MSStatement r
cppPrint Bool
nl

instance InternalControlStmt CppSrcCode where
  multiReturn :: [SValue CppSrcCode] -> MSStatement CppSrcCode
multiReturn _ = String -> MSStatement CppSrcCode
forall a. HasCallStack => String -> a
error (String -> MSStatement CppSrcCode)
-> String -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ String -> String
C.multiReturnError String
cppName

instance RenderStatement CppSrcCode where
  stmt :: MSStatement CppSrcCode -> MSStatement CppSrcCode
stmt = MSStatement CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => MSStatement r -> MSStatement r
G.stmt
  loopStmt :: MSStatement CppSrcCode -> MSStatement CppSrcCode
loopStmt = MSStatement CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => MSStatement r -> MSStatement r
G.loopStmt

  emptyStmt :: MSStatement CppSrcCode
emptyStmt = MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => MSStatement r
G.emptyStmt

  stmtFromData :: Doc -> Terminator -> MSStatement CppSrcCode
stmtFromData d :: Doc
d t :: Terminator
t = CppSrcCode (Doc, Terminator) -> MSStatement CppSrcCode
forall a s. a -> State s a
toState (CppSrcCode (Doc, Terminator) -> MSStatement CppSrcCode)
-> CppSrcCode (Doc, Terminator) -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ (Doc, Terminator) -> CppSrcCode (Doc, Terminator)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, Terminator
t)
  
instance StatementElim CppSrcCode where
  statement :: CppSrcCode (Statement CppSrcCode) -> Doc
statement = (Doc, Terminator) -> Doc
forall a b. (a, b) -> a
fst ((Doc, Terminator) -> Doc)
-> (CppSrcCode (Doc, Terminator) -> (Doc, Terminator))
-> CppSrcCode (Doc, Terminator)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode (Doc, Terminator) -> (Doc, Terminator)
forall a. CppSrcCode a -> a
unCPPSC
  statementTerm :: CppSrcCode (Statement CppSrcCode) -> Terminator
statementTerm = (Doc, Terminator) -> Terminator
forall a b. (a, b) -> b
snd ((Doc, Terminator) -> Terminator)
-> (CppSrcCode (Doc, Terminator) -> (Doc, Terminator))
-> CppSrcCode (Doc, Terminator)
-> Terminator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode (Doc, Terminator) -> (Doc, Terminator)
forall a. CppSrcCode a -> a
unCPPSC

instance StatementSym CppSrcCode where
  type Statement CppSrcCode = (Doc, Terminator)
  valStmt :: SValue CppSrcCode -> MSStatement CppSrcCode
valStmt = Terminator -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Terminator -> SValue r -> MSStatement r
G.valStmt Terminator
Semi
  multi :: [MSStatement CppSrcCode] -> MSStatement CppSrcCode
multi = ([CppSrcCode (Doc, Terminator)] -> CppSrcCode (Doc, Terminator))
-> [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState (Doc, Terminator)
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([(Doc, Terminator)] -> (Doc, Terminator))
-> [CppSrcCode (Doc, Terminator)] -> CppSrcCode (Doc, Terminator)
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList [(Doc, Terminator)] -> (Doc, Terminator)
R.multiStmt)

instance AssignStatement CppSrcCode where
  assign :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
assign = Terminator
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Terminator -> SVariable r -> SValue r -> MSStatement r
G.assign Terminator
Semi
  &-= :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
(&-=) = Terminator
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Terminator -> SVariable r -> SValue r -> MSStatement r
G.subAssign Terminator
Semi
  &+= :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
(&+=) = SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SVariable r -> SValue r -> MSStatement r
G.increment
  &++ :: SVariable CppSrcCode -> MSStatement CppSrcCode
(&++) = SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => SVariable r -> MSStatement r
C.increment1
  &-- :: SVariable CppSrcCode -> MSStatement CppSrcCode
(&--) = SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => SVariable r -> MSStatement r
C.decrement1

instance DeclStatement CppSrcCode where
  varDec :: SVariable CppSrcCode -> MSStatement CppSrcCode
varDec = CppSrcCode (Permanence CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> Doc
-> SVariable CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
r (Permanence r)
-> r (Permanence r) -> Doc -> SVariable r -> MSStatement r
C.varDec CppSrcCode (Permanence CppSrcCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
static CppSrcCode (Permanence CppSrcCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
dynamic Doc
empty
  varDecDef :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
varDecDef = Terminator
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Terminator -> SVariable r -> SValue r -> MSStatement r
C.varDecDef Terminator
Semi 
  listDec :: Integer -> SVariable CppSrcCode -> MSStatement CppSrcCode
listDec n :: Integer
n = (CppSrcCode (Value CppSrcCode) -> Doc)
-> SValue CppSrcCode
-> SVariable CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(r (Value r) -> Doc) -> SValue r -> SVariable r -> MSStatement r
C.listDec CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). RenderSym r => r (Value r) -> Doc
cppListDecDoc (Integer -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
n)
  listDecDef :: SVariable CppSrcCode
-> [SValue CppSrcCode] -> MSStatement CppSrcCode
listDecDef = ([CppSrcCode (Value CppSrcCode)] -> Doc)
-> SVariable CppSrcCode
-> [SValue CppSrcCode]
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
([r (Value r)] -> Doc)
-> SVariable r -> [SValue r] -> MSStatement r
cppListDecDef [CppSrcCode (Value CppSrcCode)] -> Doc
forall (r :: * -> *). RenderSym r => [r (Value r)] -> Doc
cppListDecDefDoc
  arrayDec :: Integer -> SVariable CppSrcCode -> MSStatement CppSrcCode
arrayDec n :: Integer
n vr :: SVariable CppSrcCode
vr = do
    let sz' :: SValue CppSrcCode
sz' = Integer -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt Integer
n :: SValue CppSrcCode
    CppSrcCode ValData
sz <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode ValData))
  MethodState
  ValueState
-> SrcState ValueState ValData
-> StateT MethodState Identity (CppSrcCode ValData)
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState ValData
SValue CppSrcCode
sz'
    CppSrcCode VarData
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode VarData))
  MethodState
  ValueState
-> SrcState ValueState VarData
-> StateT MethodState Identity (CppSrcCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState VarData
SVariable CppSrcCode
vr 
    Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmt (Doc -> SrcState MethodState (Doc, Terminator))
-> Doc -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Type CppSrcCode) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' (CppSrcCode (Variable CppSrcCode) -> CppSrcCode (Type CppSrcCode)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v) Doc -> Doc -> Doc
<+> CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v Doc -> Doc -> Doc
<> 
      Doc -> Doc
brackets (CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value CppSrcCode ValData
CppSrcCode (Value CppSrcCode)
sz)
  arrayDecDef :: SVariable CppSrcCode
-> [SValue CppSrcCode] -> MSStatement CppSrcCode
arrayDecDef vr :: SVariable CppSrcCode
vr vals :: [SValue CppSrcCode]
vals = do
    CppSrcCode (Doc, Terminator)
vdc <- Integer -> SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
Integer -> SVariable r -> MSStatement r
arrayDec (Int -> Integer
forall a. Integral a => a -> Integer
toInteger (Int -> Integer) -> Int -> Integer
forall a b. (a -> b) -> a -> b
$ [SrcState ValueState ValData] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcState ValueState ValData]
[SValue CppSrcCode]
vals) SVariable CppSrcCode
vr
    [CppSrcCode ValData]
vs <- (SrcState ValueState ValData
 -> StateT MethodState Identity (CppSrcCode ValData))
-> [SrcState ValueState ValData]
-> StateT MethodState Identity [CppSrcCode ValData]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode ValData))
  MethodState
  ValueState
-> SrcState ValueState ValData
-> StateT MethodState Identity (CppSrcCode ValData)
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [SrcState ValueState ValData]
[SValue CppSrcCode]
vals
    Doc -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmt (Doc -> SrcState MethodState (Doc, Terminator))
-> Doc -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Statement CppSrcCode) -> Doc
forall (r :: * -> *). StatementElim r => r (Statement r) -> Doc
RC.statement CppSrcCode (Doc, Terminator)
CppSrcCode (Statement CppSrcCode)
vdc Doc -> Doc -> Doc
<+> Doc
equals Doc -> Doc -> Doc
<+> Doc -> Doc
braces ([CppSrcCode (Value CppSrcCode)] -> Doc
forall (r :: * -> *). RenderSym r => [r (Value r)] -> Doc
valueList [CppSrcCode ValData]
[CppSrcCode (Value CppSrcCode)]
vs)
  objDecDef :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
objDecDef = SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
varDecDef
  objDecNew :: SVariable CppSrcCode
-> [SValue CppSrcCode] -> MSStatement CppSrcCode
objDecNew = SVariable CppSrcCode
-> [SValue CppSrcCode] -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SVariable r -> [SValue r] -> MSStatement r
G.objDecNew
  extObjDecNew :: String
-> SVariable CppSrcCode
-> [SValue CppSrcCode]
-> MSStatement CppSrcCode
extObjDecNew = String
-> SVariable CppSrcCode
-> [SValue CppSrcCode]
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> SVariable r -> [SValue r] -> MSStatement r
C.extObjDecNew
  constDecDef :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
constDecDef = SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SVariable r -> SValue r -> MSStatement r
CP.constDecDef
  funcDecDef :: SVariable CppSrcCode
-> [SVariable CppSrcCode]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
funcDecDef = SVariable CppSrcCode
-> [SVariable CppSrcCode]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SVariable r -> [SVariable r] -> MSBody r -> MSStatement r
cppFuncDecDef

instance IOStatement CppSrcCode where
  print :: SValue CppSrcCode -> MSStatement CppSrcCode
print      = Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
False Maybe (SValue CppSrcCode)
forall a. Maybe a
Nothing SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r
printFunc
  printLn :: SValue CppSrcCode -> MSStatement CppSrcCode
printLn    = Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
True  Maybe (SValue CppSrcCode)
forall a. Maybe a
Nothing SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc
  printStr :: String -> MSStatement CppSrcCode
printStr   = Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
False Maybe (SValue CppSrcCode)
forall a. Maybe a
Nothing SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r
printFunc   (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (String -> SrcState ValueState ValData)
-> String
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> SrcState ValueState ValData
forall (r :: * -> *). Literal r => String -> SValue r
litString
  printStrLn :: String -> MSStatement CppSrcCode
printStrLn = Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
True  Maybe (SValue CppSrcCode)
forall a. Maybe a
Nothing SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (String -> SrcState ValueState ValData)
-> String
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> SrcState ValueState ValData
forall (r :: * -> *). Literal r => String -> SValue r
litString

  printFile :: SValue CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
printFile f :: SValue CppSrcCode
f      = Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
False (SrcState ValueState ValData -> Maybe (SrcState ValueState ValData)
forall a. a -> Maybe a
Just SrcState ValueState ValData
SValue CppSrcCode
f) (SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileFunc SValue CppSrcCode
f)
  printFileLn :: SValue CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
printFileLn f :: SValue CppSrcCode
f    = Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
True  (SrcState ValueState ValData -> Maybe (SrcState ValueState ValData)
forall a. a -> Maybe a
Just SrcState ValueState ValData
SValue CppSrcCode
f) (SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileLnFunc SValue CppSrcCode
f)
  printFileStr :: SValue CppSrcCode -> String -> MSStatement CppSrcCode
printFileStr f :: SValue CppSrcCode
f   = Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
False (SrcState ValueState ValData -> Maybe (SrcState ValueState ValData)
forall a. a -> Maybe a
Just SrcState ValueState ValData
SValue CppSrcCode
f) (SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileFunc SValue CppSrcCode
f)   (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (String -> SrcState ValueState ValData)
-> String
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> SrcState ValueState ValData
forall (r :: * -> *). Literal r => String -> SValue r
litString
  printFileStrLn :: SValue CppSrcCode -> String -> MSStatement CppSrcCode
printFileStrLn f :: SValue CppSrcCode
f = Bool
-> Maybe (SValue CppSrcCode)
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
True  (SrcState ValueState ValData -> Maybe (SrcState ValueState ValData)
forall a. a -> Maybe a
Just SrcState ValueState ValData
SValue CppSrcCode
f) (SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r -> SValue r
printFileLnFunc SValue CppSrcCode
f) (SrcState ValueState ValData
 -> SrcState MethodState (Doc, Terminator))
-> (String -> SrcState ValueState ValData)
-> String
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> SrcState ValueState ValData
forall (r :: * -> *). Literal r => String -> SValue r
litString

  getInput :: SVariable CppSrcCode -> MSStatement CppSrcCode
getInput v :: SVariable CppSrcCode
v = SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
cppInput SVariable CppSrcCode
v SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r
inputFunc
  discardInput :: MSStatement CppSrcCode
discardInput = SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode)
-> SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Char -> SValue CppSrcCode -> MSStatement CppSrcCode
cppDiscardInput '\n' 
    SValue CppSrcCode
forall (r :: * -> *). RenderValue r => SValue r
inputFunc
  getFileInput :: SValue CppSrcCode -> SVariable CppSrcCode -> MSStatement CppSrcCode
getFileInput f :: SValue CppSrcCode
f v :: SVariable CppSrcCode
v = SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
cppInput SVariable CppSrcCode
v SValue CppSrcCode
f
  discardFileInput :: SValue CppSrcCode -> MSStatement CppSrcCode
discardFileInput f :: SValue CppSrcCode
f = SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode)
-> SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ 
    Char -> SValue CppSrcCode -> MSStatement CppSrcCode
cppDiscardInput ' ' SValue CppSrcCode
f

  openFileR :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
openFileR = String
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> SVariable r -> SValue r -> MSStatement r
cppOpenFile String
cppR
  openFileW :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
openFileW = String
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> SVariable r -> SValue r -> MSStatement r
cppOpenFile String
cppW
  openFileA :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
openFileA = String
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> SVariable r -> SValue r -> MSStatement r
cppOpenFile String
cppA
  closeFile :: SValue CppSrcCode -> MSStatement CppSrcCode
closeFile = String -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> SValue r -> MSStatement r
G.closeFile String
cppClose

  getFileInputLine :: SValue CppSrcCode -> SVariable CppSrcCode -> MSStatement CppSrcCode
getFileInputLine f :: SValue CppSrcCode
f v :: SVariable CppSrcCode
v = SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
getLineFunc SValue CppSrcCode
f (SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
v)
  discardFileLine :: SValue CppSrcCode -> MSStatement CppSrcCode
discardFileLine f :: SValue CppSrcCode
f = SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode)
-> SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ Char -> SValue CppSrcCode -> MSStatement CppSrcCode
cppDiscardInput '\n' SValue CppSrcCode
f
  getFileInputAll :: SValue CppSrcCode -> SVariable CppSrcCode -> MSStatement CppSrcCode
getFileInputAll f :: SValue CppSrcCode
f v :: SVariable CppSrcCode
v = let l_line :: String
l_line = "nextLine"
                            var_line :: SVariable CppSrcCode
var_line = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
l_line VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
string
                            v_line :: SValue CppSrcCode
v_line = SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
var_line
                        in
    [MSStatement CppSrcCode] -> MSStatement CppSrcCode
forall (r :: * -> *).
StatementSym r =>
[MSStatement r] -> MSStatement r
multi [SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec SVariable CppSrcCode
var_line,
      SValue CppSrcCode -> MSBody CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSBody r -> MSStatement r
while (SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
getLineFunc SValue CppSrcCode
f SValue CppSrcCode
v_line)
        (MSStatement CppSrcCode -> MSBody CppSrcCode
forall (r :: * -> *). BodySym r => MSStatement r -> MSBody r
oneLiner (MSStatement CppSrcCode -> MSBody CppSrcCode)
-> MSStatement CppSrcCode -> MSBody CppSrcCode
forall a b. (a -> b) -> a -> b
$ SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). List r => SValue r -> SValue r -> SValue r
listAppend (SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
v) SValue CppSrcCode
v_line)]

instance StringStatement CppSrcCode where
  stringSplit :: Char
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
stringSplit d :: Char
d vnew :: SVariable CppSrcCode
vnew s :: SValue CppSrcCode
s = let l_ss :: String
l_ss = "ss"
                             var_ss :: SVariable CppSrcCode
var_ss = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
l_ss (String -> VSType CppSrcCode
forall (r :: * -> *). TypeSym r => String -> VSType r
obj String
stringstream)
                             v_ss :: SValue CppSrcCode
v_ss = SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
var_ss
                             l_word :: String
l_word = "word"
                             var_word :: SVariable CppSrcCode
var_word = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
l_word VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
string
                             v_word :: SValue CppSrcCode
v_word = SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
var_word
                         in
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> MethodState -> MethodState
addLangImport String
sstream) StateT MethodState Identity ()
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [MSStatement CppSrcCode] -> MSStatement CppSrcCode
forall (r :: * -> *).
StatementSym r =>
[MSStatement r] -> MSStatement r
multi [
      SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
vnew SValue CppSrcCode -> VSFunction CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
FunctionSym r =>
SValue r -> VSFunction r -> SValue r
$. VSFunction CppSrcCode
clearFunc,
      SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec SVariable CppSrcCode
var_ss,
      SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
strFunc SValue CppSrcCode
v_ss SValue CppSrcCode
s,
      SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec SVariable CppSrcCode
var_word,
      SValue CppSrcCode -> MSBody CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSBody r -> MSStatement r
while (SValue CppSrcCode -> SValue CppSrcCode -> Char -> SValue CppSrcCode
getLine3ArgFunc SValue CppSrcCode
v_ss SValue CppSrcCode
v_word Char
d) 
        (MSStatement CppSrcCode -> MSBody CppSrcCode
forall (r :: * -> *). BodySym r => MSStatement r -> MSBody r
oneLiner (MSStatement CppSrcCode -> MSBody CppSrcCode)
-> MSStatement CppSrcCode -> MSBody CppSrcCode
forall a b. (a -> b) -> a -> b
$ SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). List r => SValue r -> SValue r -> SValue r
listAppend (SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
vnew) SValue CppSrcCode
v_word)
    ]

  stringListVals :: [SVariable CppSrcCode]
-> SValue CppSrcCode -> MSStatement CppSrcCode
stringListVals = [SVariable CppSrcCode]
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
[SVariable r] -> SValue r -> MSStatement r
M.stringListVals
  stringListLists :: [SVariable CppSrcCode]
-> SValue CppSrcCode -> MSStatement CppSrcCode
stringListLists = [SVariable CppSrcCode]
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
[SVariable r] -> SValue r -> MSStatement r
M.stringListLists

instance FuncAppStatement CppSrcCode where
  inOutCall :: InOutCall CppSrcCode
inOutCall = (String
 -> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode)
-> InOutCall CppSrcCode
cppInOutCall String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp
  selfInOutCall :: InOutCall CppSrcCode
selfInOutCall = (String
 -> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode)
-> InOutCall CppSrcCode
cppInOutCall String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => PosCall r
selfFuncApp
  extInOutCall :: String -> InOutCall CppSrcCode
extInOutCall m :: String
m = (String
 -> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode)
-> InOutCall CppSrcCode
cppInOutCall (String
-> String
-> VSType CppSrcCode
-> [SValue CppSrcCode]
-> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => String -> PosCall r
extFuncApp String
m)

instance CommentStatement CppSrcCode where
  comment :: String -> MSStatement CppSrcCode
comment = Doc -> String -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => Doc -> String -> MSStatement r
G.comment Doc
commentStart

instance ControlStatement CppSrcCode where
  break :: MSStatement CppSrcCode
break = Doc -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmt Doc
R.break
  continue :: MSStatement CppSrcCode
continue = Doc -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmt Doc
R.continue

  returnStmt :: SValue CppSrcCode -> MSStatement CppSrcCode
returnStmt = Terminator -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Terminator -> SValue r -> MSStatement r
G.returnStmt Terminator
Semi

  throw :: String -> MSStatement CppSrcCode
throw = (CppSrcCode (Value CppSrcCode) -> Doc)
-> Terminator -> String -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(r (Value r) -> Doc) -> Terminator -> String -> MSStatement r
G.throw CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). RenderSym r => r (Value r) -> Doc
cppThrowDoc Terminator
Semi

  ifCond :: [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode -> MSStatement CppSrcCode
ifCond = (Doc -> Doc)
-> Doc
-> Doc
-> Doc
-> [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(Doc -> Doc)
-> Doc
-> Doc
-> Doc
-> [(SValue r, MSBody r)]
-> MSBody r
-> MSStatement r
G.ifCond Doc -> Doc
parens Doc
bodyStart Doc
elseIfLabel Doc
bodyEnd
  switch :: SValue CppSrcCode
-> [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
switch = (Doc -> Doc)
-> MSStatement CppSrcCode
-> SValue CppSrcCode
-> [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(Doc -> Doc)
-> MSStatement r
-> SValue r
-> [(SValue r, MSBody r)]
-> MSBody r
-> MSStatement r
C.switch Doc -> Doc
parens MSStatement CppSrcCode
forall (r :: * -> *). ControlStatement r => MSStatement r
break

  ifExists :: SValue CppSrcCode
-> MSBody CppSrcCode -> MSBody CppSrcCode -> MSStatement CppSrcCode
ifExists _ ifBody :: MSBody CppSrcCode
ifBody _ = do 
    CppSrcCode Doc
ifb <- SrcState MethodState Doc
MSBody CppSrcCode
ifBody 
    Doc -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmtNoEnd (CppSrcCode (Body CppSrcCode) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body CppSrcCode Doc
CppSrcCode (Body CppSrcCode)
ifb) -- All variables are initialized in C++

  for :: MSStatement CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
for = Doc
-> Doc
-> MSStatement CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Doc
-> Doc
-> MSStatement r
-> SValue r
-> MSStatement r
-> MSBody r
-> MSStatement r
C.for Doc
bodyStart Doc
bodyEnd 
  forRange :: SVariable CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forRange = SVariable CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> SValue CppSrcCode
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
SVariable r
-> SValue r -> SValue r -> SValue r -> MSBody r -> MSStatement r
M.forRange
  forEach :: SVariable CppSrcCode
-> SValue CppSrcCode -> MSBody CppSrcCode -> MSStatement CppSrcCode
forEach i :: SVariable CppSrcCode
i v :: SValue CppSrcCode
v b :: MSBody CppSrcCode
b = do 
    CppSrcCode VarData
e <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode VarData))
  MethodState
  ValueState
-> SrcState ValueState VarData
-> StateT MethodState Identity (CppSrcCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState VarData
SVariable CppSrcCode
i
    let l :: String
l = CppSrcCode (Variable CppSrcCode) -> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
e
        t :: State ValueState (CppSrcCode TypeData)
t = CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall a s. a -> State s a
toState (CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData))
-> CppSrcCode TypeData -> State ValueState (CppSrcCode TypeData)
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Variable CppSrcCode) -> CppSrcCode (Type CppSrcCode)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
e
        iterI :: SVariable CppSrcCode
iterI = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
l (VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
iterator State ValueState (CppSrcCode TypeData)
VSType CppSrcCode
t) 
    MSStatement CppSrcCode
-> SValue CppSrcCode
-> MSStatement CppSrcCode
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
ControlStatement r =>
MSStatement r
-> SValue r -> MSStatement r -> MSBody r -> MSStatement r
for (SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
varDecDef SVariable CppSrcCode
iterI (SValue CppSrcCode -> SValue CppSrcCode
iterBegin SValue CppSrcCode
v)) (SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => SVariable r -> SValue r
setIterVar SVariable CppSrcCode
iterI SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
?!= SValue CppSrcCode -> SValue CppSrcCode
iterEnd SValue CppSrcCode
v) 
      (SVariable CppSrcCode
iterI SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> MSStatement r
&++) MSBody CppSrcCode
b
  while :: SValue CppSrcCode -> MSBody CppSrcCode -> MSStatement CppSrcCode
while = (Doc -> Doc)
-> Doc
-> Doc
-> SValue CppSrcCode
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(Doc -> Doc) -> Doc -> Doc -> SValue r -> MSBody r -> MSStatement r
C.while Doc -> Doc
parens Doc
bodyStart Doc
bodyEnd

  tryCatch :: MSBody CppSrcCode -> MSBody CppSrcCode -> MSStatement CppSrcCode
tryCatch = (CppSrcCode (Body CppSrcCode)
 -> CppSrcCode (Body CppSrcCode) -> Doc)
-> MSBody CppSrcCode -> MSBody CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(r (Body r) -> r (Body r) -> Doc)
-> MSBody r -> MSBody r -> MSStatement r
G.tryCatch CppSrcCode (Body CppSrcCode) -> CppSrcCode (Body CppSrcCode) -> Doc
forall (r :: * -> *).
RenderSym r =>
r (Body r) -> r (Body r) -> Doc
cppTryCatch

instance StatePattern CppSrcCode where 
  checkState :: String
-> [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
checkState l :: String
l = SValue CppSrcCode
-> [(SValue CppSrcCode, MSBody CppSrcCode)]
-> MSBody CppSrcCode
-> MSStatement CppSrcCode
forall (r :: * -> *).
(ControlStatement r, Comparison r) =>
SValue r -> [(SValue r, MSBody r)] -> MSBody r -> MSStatement r
switchAsIf (SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf (SVariable CppSrcCode -> SValue CppSrcCode)
-> SVariable CppSrcCode -> SValue CppSrcCode
forall a b. (a -> b) -> a -> b
$ String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
l VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
string) 

instance ObserverPattern CppSrcCode where
  notifyObservers :: VSFunction CppSrcCode
-> VSType CppSrcCode -> MSStatement CppSrcCode
notifyObservers = VSFunction CppSrcCode
-> VSType CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
RenderSym r =>
VSFunction r -> VSType r -> MSStatement r
M.notifyObservers

instance StrategyPattern CppSrcCode where
  runStrategy :: String
-> [(String, MSBody CppSrcCode)]
-> Maybe (SValue CppSrcCode)
-> Maybe (SVariable CppSrcCode)
-> MSBlock CppSrcCode
runStrategy = String
-> [(String, MSBody CppSrcCode)]
-> Maybe (SValue CppSrcCode)
-> Maybe (SVariable CppSrcCode)
-> MSBlock CppSrcCode
forall (r :: * -> *).
(RenderSym r, Monad r) =>
String
-> [(String, MSBody r)]
-> Maybe (SValue r)
-> Maybe (SVariable r)
-> MS (r Doc)
M.runStrategy

instance ScopeSym CppSrcCode where
  type Scope CppSrcCode = (Doc, ScopeTag)
  private :: CppSrcCode (Scope CppSrcCode)
private = (Doc, ScopeTag) -> CppSrcCode (Doc, ScopeTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.private, ScopeTag
Priv)
  public :: CppSrcCode (Scope CppSrcCode)
public = (Doc, ScopeTag) -> CppSrcCode (Doc, ScopeTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.public, ScopeTag
Pub)

instance RenderScope CppSrcCode where
  scopeFromData :: ScopeTag -> Doc -> CppSrcCode (Scope CppSrcCode)
scopeFromData s :: ScopeTag
s d :: Doc
d = (Doc, ScopeTag) -> CppSrcCode (Doc, ScopeTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, ScopeTag
s)
  
instance ScopeElim CppSrcCode where
  scope :: CppSrcCode (Scope CppSrcCode) -> Doc
scope = (Doc, ScopeTag) -> Doc
forall a b. (a, b) -> a
fst ((Doc, ScopeTag) -> Doc)
-> (CppSrcCode (Doc, ScopeTag) -> (Doc, ScopeTag))
-> CppSrcCode (Doc, ScopeTag)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode (Doc, ScopeTag) -> (Doc, ScopeTag)
forall a. CppSrcCode a -> a
unCPPSC

instance MethodTypeSym CppSrcCode where
  type MethodType CppSrcCode = TypeData
  mType :: VSType CppSrcCode -> MSMthdType CppSrcCode
mType = LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode TypeData))
  MethodState
  ValueState
-> State ValueState (CppSrcCode TypeData)
-> SrcState MethodState TypeData
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
Lens' MethodState ValueState
lensMStoVS
  construct :: String -> MSMthdType CppSrcCode
construct = String -> MSMthdType CppSrcCode
forall (r :: * -> *). RenderSym r => String -> MS (r (Type r))
G.construct

instance ParameterSym CppSrcCode where
  type Parameter CppSrcCode = ParamData
  param :: SVariable CppSrcCode -> MSParameter CppSrcCode
param = (CppSrcCode (Variable CppSrcCode) -> Doc)
-> SVariable CppSrcCode -> MSParameter CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(r (Variable r) -> Doc) -> SVariable r -> MSParameter r
G.param CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). RenderSym r => r (Variable r) -> Doc
R.param
  pointerParam :: SVariable CppSrcCode -> MSParameter CppSrcCode
pointerParam = (CppSrcCode (Variable CppSrcCode) -> Doc)
-> SVariable CppSrcCode -> MSParameter CppSrcCode
forall (r :: * -> *).
RenderSym r =>
(r (Variable r) -> Doc) -> SVariable r -> MSParameter r
G.param CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). RenderSym r => r (Variable r) -> Doc
cppPointerParamDoc

instance RenderParam CppSrcCode where
  paramFromData :: SVariable CppSrcCode -> Doc -> MSParameter CppSrcCode
paramFromData v' :: SVariable CppSrcCode
v' d :: Doc
d = do 
    CppSrcCode VarData
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode VarData))
  MethodState
  ValueState
-> SrcState ValueState VarData
-> StateT MethodState Identity (CppSrcCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState VarData
SVariable CppSrcCode
v' 
    CppSrcCode ParamData -> SrcState MethodState ParamData
forall a s. a -> State s a
toState (CppSrcCode ParamData -> SrcState MethodState ParamData)
-> CppSrcCode ParamData -> SrcState MethodState ParamData
forall a b. (a -> b) -> a -> b
$ (VarData -> Doc -> ParamData)
-> CppSrcCode VarData -> CppSrcCode Doc -> CppSrcCode ParamData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues VarData -> Doc -> ParamData
pd CppSrcCode VarData
v (Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d) 
  
instance ParamElim CppSrcCode where
  parameterName :: CppSrcCode (Parameter CppSrcCode) -> String
parameterName = CppSrcCode VarData -> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName (CppSrcCode VarData -> String)
-> (CppSrcCode ParamData -> CppSrcCode VarData)
-> CppSrcCode ParamData
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> VarData)
-> CppSrcCode ParamData -> CppSrcCode VarData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> VarData
paramVar
  parameterType :: CppSrcCode (Parameter CppSrcCode) -> CppSrcCode (Type CppSrcCode)
parameterType = CppSrcCode VarData -> CppSrcCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType (CppSrcCode VarData -> CppSrcCode TypeData)
-> (CppSrcCode ParamData -> CppSrcCode VarData)
-> CppSrcCode ParamData
-> CppSrcCode TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> VarData)
-> CppSrcCode ParamData -> CppSrcCode VarData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> VarData
paramVar
  parameter :: CppSrcCode (Parameter CppSrcCode) -> 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 where
  type Method CppSrcCode = MethodData
  method :: String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
method = String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String
-> r (Scope r)
-> r (Permanence r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
G.method
  getMethod :: SVariable CppSrcCode -> SMethod CppSrcCode
getMethod = SVariable CppSrcCode -> SMethod CppSrcCode
forall (r :: * -> *). RenderSym r => SVariable r -> SMethod r
G.getMethod
  setMethod :: SVariable CppSrcCode -> SMethod CppSrcCode
setMethod = SVariable CppSrcCode -> SMethod CppSrcCode
forall (r :: * -> *). RenderSym r => SVariable r -> SMethod r
G.setMethod
  constructor :: [MSParameter CppSrcCode]
-> NamedArgs CppSrcCode -> MSBody CppSrcCode -> SMethod CppSrcCode
constructor = [MSParameter CppSrcCode]
-> NamedArgs CppSrcCode -> MSBody CppSrcCode -> SMethod CppSrcCode
cppConstructor

  docMain :: MSBody CppSrcCode -> SMethod CppSrcCode
docMain b :: MSBody CppSrcCode
b = MS (CppSrcCode (BlockComment CppSrcCode))
-> SMethod CppSrcCode -> SMethod CppSrcCode
forall (r :: * -> *).
RenderMethod r =>
MS (r (BlockComment r)) -> SMethod r -> SMethod r
commentedFunc (StateT MethodState Identity [String]
-> MS (CppSrcCode (BlockComment CppSrcCode))
forall (r :: * -> *) a.
BlockCommentSym r =>
State a [String] -> State a (r (BlockComment r))
docComment (StateT MethodState Identity [String]
 -> MS (CppSrcCode (BlockComment CppSrcCode)))
-> StateT MethodState Identity [String]
-> MS (CppSrcCode (BlockComment CppSrcCode))
forall a b. (a -> b) -> a -> b
$ [String] -> StateT MethodState Identity [String]
forall a s. a -> State s a
toState ([String] -> StateT MethodState Identity [String])
-> [String] -> StateT MethodState Identity [String]
forall a b. (a -> b) -> a -> b
$ FuncDocRenderer
functionDox String
mainDesc 
    [(String
argc, String
argcDesc), (String
argv, String
argvDesc)] [String
mainReturnDesc]) (MSBody CppSrcCode -> SMethod CppSrcCode
forall (r :: * -> *). MethodSym r => MSBody r -> SMethod r
mainFunction MSBody CppSrcCode
b)

  function :: String
-> CppSrcCode (Scope CppSrcCode)
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
function = String
-> CppSrcCode (Scope CppSrcCode)
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String
-> r (Scope r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
G.function
  mainFunction :: MSBody CppSrcCode -> SMethod CppSrcCode
mainFunction b :: MSBody CppSrcCode
b = Bool
-> String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> MSMthdType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
RenderMethod r =>
Bool
-> String
-> r (Scope r)
-> r (Permanence r)
-> MSMthdType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
intFunc Bool
True String
mainFunc CppSrcCode (Scope CppSrcCode)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public CppSrcCode (Permanence CppSrcCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
static (VSType CppSrcCode -> MSMthdType CppSrcCode
forall (r :: * -> *). MethodTypeSym r => VSType r -> MSMthdType r
mType VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
int) 
    [SVariable CppSrcCode -> MSParameter CppSrcCode
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
param SVariable CppSrcCode
argcVar, SVariable CppSrcCode -> MSParameter CppSrcCode
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
param SVariable CppSrcCode
argvVar]
    ((CppSrcCode Doc -> CppSrcCode (Doc, Terminator) -> CppSrcCode Doc)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((Doc -> (Doc, Terminator) -> Doc)
-> CppSrcCode Doc -> CppSrcCode (Doc, Terminator) -> CppSrcCode Doc
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Doc -> (Doc, Terminator) -> Doc
appendToBody) SrcState MethodState Doc
MSBody CppSrcCode
b (SValue CppSrcCode -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSStatement r
returnStmt (SValue CppSrcCode -> SrcState MethodState (Doc, Terminator))
-> SValue CppSrcCode -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ Integer -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt 0))
    where argcVar :: SVariable CppSrcCode
argcVar = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var String
argc VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
int
          argvVar :: SVariable CppSrcCode
argvVar = do 
            CppSrcCode (Type CppSrcCode)
t <- CodeType -> String -> Doc -> VSType CppSrcCode
forall (r :: * -> *).
RenderType r =>
CodeType -> String -> Doc -> VSType r
typeFromData (CodeType -> CodeType
List CodeType
String) 
              (String
constDec String -> String -> String
forall a. [a] -> [a] -> [a]
++ " " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
C.charRender) (Doc
constDec' Doc -> Doc -> Doc
<+> String -> Doc
text 
              String
C.charRender)
            String
-> CppSrcCode (Type CppSrcCode) -> Doc -> SVariable CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> r (Type r) -> Doc -> SVariable r
mkVar String
argv CppSrcCode (Type CppSrcCode)
t (Doc
cppDeref Doc -> Doc -> Doc
<> String -> Doc
text String
argv Doc -> Doc -> Doc
<> Doc
array')

  docFunc :: String
-> [String]
-> Maybe String
-> SMethod CppSrcCode
-> SMethod CppSrcCode
docFunc = String
-> [String]
-> Maybe String
-> SMethod CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> [String] -> Maybe String -> SMethod r -> SMethod r
CP.doxFunc

  inOutMethod :: String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> InOutFunc CppSrcCode
inOutMethod n :: String
n s :: CppSrcCode (Scope CppSrcCode)
s p :: CppSrcCode (Permanence CppSrcCode)
p = (VSType CppSrcCode
 -> [MSParameter CppSrcCode]
 -> MSBody CppSrcCode
 -> SMethod CppSrcCode)
-> InOutFunc CppSrcCode
cppsInOut (String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> r (Permanence r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
method String
n CppSrcCode (Scope CppSrcCode)
s CppSrcCode (Permanence CppSrcCode)
p)

  docInOutMethod :: String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> DocInOutFunc CppSrcCode
docInOutMethod n :: String
n s :: CppSrcCode (Scope CppSrcCode)
s p :: CppSrcCode (Permanence CppSrcCode)
p = InOutFunc CppSrcCode -> DocInOutFunc CppSrcCode
forall (r :: * -> *).
RenderSym r =>
([SVariable r]
 -> [SVariable r] -> [SVariable r] -> MSBody r -> SMethod r)
-> String
-> [(String, SVariable r)]
-> [(String, SVariable r)]
-> [(String, SVariable r)]
-> MSBody r
-> SMethod r
CP.docInOutFunc (String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> InOutFunc CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> r (Permanence r) -> InOutFunc r
inOutMethod String
n CppSrcCode (Scope CppSrcCode)
s CppSrcCode (Permanence CppSrcCode)
p)

  inOutFunc :: String -> CppSrcCode (Scope CppSrcCode) -> InOutFunc CppSrcCode
inOutFunc n :: String
n s :: CppSrcCode (Scope CppSrcCode)
s = (VSType CppSrcCode
 -> [MSParameter CppSrcCode]
 -> MSBody CppSrcCode
 -> SMethod CppSrcCode)
-> InOutFunc CppSrcCode
cppsInOut (String
-> CppSrcCode (Scope CppSrcCode)
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
function String
n CppSrcCode (Scope CppSrcCode)
s)

  docInOutFunc :: String -> CppSrcCode (Scope CppSrcCode) -> DocInOutFunc CppSrcCode
docInOutFunc n :: String
n s :: CppSrcCode (Scope CppSrcCode)
s = InOutFunc CppSrcCode -> DocInOutFunc CppSrcCode
forall (r :: * -> *).
RenderSym r =>
([SVariable r]
 -> [SVariable r] -> [SVariable r] -> MSBody r -> SMethod r)
-> String
-> [(String, SVariable r)]
-> [(String, SVariable r)]
-> [(String, SVariable r)]
-> MSBody r
-> SMethod r
CP.docInOutFunc (String -> CppSrcCode (Scope CppSrcCode) -> InOutFunc CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> InOutFunc r
inOutFunc String
n CppSrcCode (Scope CppSrcCode)
s)

instance RenderMethod CppSrcCode where
  intMethod :: Bool
-> String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> MSMthdType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
intMethod m :: Bool
m n :: String
n s :: CppSrcCode (Scope CppSrcCode)
s _ t :: MSMthdType CppSrcCode
t ps :: [MSParameter CppSrcCode]
ps b :: MSBody CppSrcCode
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)
    String
c <- StateT MethodState Identity String
getClassName
    (CppSrcCode (Type CppSrcCode)
 -> [CppSrcCode (Parameter CppSrcCode)]
 -> CppSrcCode (Body CppSrcCode)
 -> Doc)
-> CppSrcCode (Scope CppSrcCode)
-> MSMthdType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
cppsIntFunc ([Doc]
-> String
-> String
-> CppSrcCode (MethodType CppSrcCode)
-> [CppSrcCode (Parameter CppSrcCode)]
-> CppSrcCode (Body CppSrcCode)
-> Doc
cppsMethod [] String
n String
c) CppSrcCode (Scope CppSrcCode)
s MSMthdType CppSrcCode
t [MSParameter CppSrcCode]
ps MSBody CppSrcCode
b
  intFunc :: Bool
-> String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> MSMthdType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
intFunc m :: Bool
m n :: String
n s :: CppSrcCode (Scope CppSrcCode)
s _ t :: MSMthdType CppSrcCode
t ps :: [MSParameter CppSrcCode]
ps b :: MSBody CppSrcCode
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 (Type CppSrcCode)
 -> [CppSrcCode (Parameter CppSrcCode)]
 -> CppSrcCode (Body CppSrcCode)
 -> Doc)
-> CppSrcCode (Scope CppSrcCode)
-> MSMthdType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
cppsIntFunc (String
-> CppSrcCode (Type CppSrcCode)
-> [CppSrcCode (Parameter CppSrcCode)]
-> CppSrcCode (Body CppSrcCode)
-> Doc
cppsFunction String
n) CppSrcCode (Scope CppSrcCode)
s MSMthdType CppSrcCode
t [MSParameter CppSrcCode]
ps MSBody CppSrcCode
b
  commentedFunc :: MS (CppSrcCode (BlockComment CppSrcCode))
-> SMethod CppSrcCode -> SMethod CppSrcCode
commentedFunc = FileType
-> MS (CppSrcCode (BlockComment CppSrcCode))
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
forall (r :: * -> *).
(RenderSym r, Monad r) =>
FileType
-> MS (r (BlockComment r))
-> MS (r MethodData)
-> MS (r MethodData)
cppCommentedFunc FileType
Source
  
  destructor :: [CSStateVar CppSrcCode] -> SMethod CppSrcCode
destructor vs :: [CSStateVar CppSrcCode]
vs = 
    let i :: SVariable CppSrcCode
i = String -> VSType CppSrcCode -> SVariable CppSrcCode
forall (r :: * -> *).
VariableSym r =>
String -> VSType r -> SVariable r
var "i" VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
int
        deleteStatements :: [SrcState MethodState (Doc, Terminator)]
deleteStatements = (SrcState ClassState StateVarData
 -> SrcState MethodState (Doc, Terminator))
-> [SrcState ClassState StateVarData]
-> [SrcState MethodState (Doc, Terminator)]
forall a b. (a -> b) -> [a] -> [b]
map ((CppSrcCode StateVarData -> CppSrcCode (Doc, Terminator))
-> State MethodState (CppSrcCode StateVarData)
-> SrcState MethodState (Doc, Terminator)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((StateVarData -> (Doc, Terminator))
-> CppSrcCode StateVarData -> CppSrcCode (Doc, Terminator)
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue StateVarData -> (Doc, Terminator)
destructSts) (State MethodState (CppSrcCode StateVarData)
 -> SrcState MethodState (Doc, Terminator))
-> (SrcState ClassState StateVarData
    -> State MethodState (CppSrcCode StateVarData))
-> SrcState ClassState StateVarData
-> SrcState MethodState (Doc, Terminator)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 
          LensLike'
  (Zoomed (StateT ClassState Identity) (CppSrcCode StateVarData))
  MethodState
  ClassState
-> SrcState ClassState StateVarData
-> State MethodState (CppSrcCode StateVarData)
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) (CppSrcCode StateVarData))
  MethodState
  ClassState
Lens' MethodState ClassState
lensMStoCS) [SrcState ClassState StateVarData]
[CSStateVar CppSrcCode]
vs
        loopIndexDec :: MSStatement CppSrcCode
loopIndexDec = SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec SVariable CppSrcCode
i
        dbody :: SrcState MethodState Doc
dbody = (CppSrcCode Doc -> CppSrcCode Doc -> CppSrcCode Doc)
-> SrcState MethodState Doc
-> SrcState MethodState Doc
-> SrcState MethodState Doc
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((Doc -> Doc -> Doc)
-> CppSrcCode Doc -> CppSrcCode Doc -> CppSrcCode Doc
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Doc -> Doc -> Doc
emptyIfEmpty)
          (([CppSrcCode (Doc, Terminator)] -> CppSrcCode Doc)
-> [SrcState MethodState (Doc, Terminator)]
-> SrcState MethodState Doc
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([(Doc, Terminator)] -> Doc)
-> [CppSrcCode (Doc, Terminator)] -> CppSrcCode Doc
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList ([Doc] -> Doc
vcat ([Doc] -> Doc)
-> ([(Doc, Terminator)] -> [Doc]) -> [(Doc, Terminator)] -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Doc, Terminator) -> Doc) -> [(Doc, Terminator)] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (Doc, Terminator) -> Doc
forall a b. (a, b) -> a
fst)) [SrcState MethodState (Doc, Terminator)]
deleteStatements) (SrcState MethodState Doc -> SrcState MethodState Doc)
-> SrcState MethodState Doc -> SrcState MethodState Doc
forall a b. (a -> b) -> a -> b
$
          [MSStatement CppSrcCode] -> SrcState MethodState Doc
forall (r :: * -> *). BodySym r => [MSStatement r] -> MSBody r
bodyStatements ([MSStatement CppSrcCode] -> SrcState MethodState Doc)
-> [MSStatement CppSrcCode] -> SrcState MethodState Doc
forall a b. (a -> b) -> a -> b
$ SrcState MethodState (Doc, Terminator)
MSStatement CppSrcCode
loopIndexDec SrcState MethodState (Doc, Terminator)
-> [SrcState MethodState (Doc, Terminator)]
-> [SrcState MethodState (Doc, Terminator)]
forall a. a -> [a] -> [a]
: [SrcState MethodState (Doc, Terminator)]
deleteStatements
    in StateT MethodState Identity String
getClassName StateT MethodState Identity String
-> (String -> SrcState MethodState MethodData)
-> SrcState MethodState MethodData
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\n :: String
n -> String
-> VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
MethodSym r =>
String -> VSType r -> [MSParameter r] -> MSBody r -> SMethod r
pubMethod ('~'Char -> String -> String
forall a. a -> [a] -> [a]
:String
n) VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
void [] SrcState MethodState Doc
MSBody CppSrcCode
dbody)
    
  mthdFromData :: ScopeTag -> Doc -> SMethod CppSrcCode
mthdFromData s :: ScopeTag
s d :: Doc
d = CppSrcCode MethodData -> SMethod CppSrcCode
forall a s. a -> State s a
toState (CppSrcCode MethodData -> SMethod CppSrcCode)
-> CppSrcCode MethodData -> SMethod CppSrcCode
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
$ ScopeTag -> Doc -> MethodData
mthd ScopeTag
s Doc
d
  
instance MethodElim CppSrcCode where
  method :: CppSrcCode (Method CppSrcCode) -> 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 where
  type StateVar CppSrcCode = StateVarData
  stateVar :: CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> SVariable CppSrcCode
-> CSStateVar CppSrcCode
stateVar s :: CppSrcCode (Scope CppSrcCode)
s _ _ = (CppSrcCode (Doc, Terminator) -> CppSrcCode StateVarData)
-> State ClassState (CppSrcCode (Doc, Terminator))
-> SrcState ClassState StateVarData
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData)
-> CppSrcCode ScopeTag
-> CppSrcCode Doc
-> CppSrcCode (Doc, Terminator)
-> CppSrcCode StateVarData
forall (r :: * -> *) a b c d.
Applicative r =>
(a -> b -> c -> d) -> r a -> r b -> r c -> r d
on3CodeValues ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData
svd (((Doc, ScopeTag) -> ScopeTag)
-> CppSrcCode (Doc, ScopeTag) -> CppSrcCode ScopeTag
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd CppSrcCode (Doc, ScopeTag)
CppSrcCode (Scope CppSrcCode)
s) (Doc -> CppSrcCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode 
    Doc
empty)) (State ClassState (CppSrcCode (Doc, Terminator))
 -> CSStateVar CppSrcCode)
-> State ClassState (CppSrcCode (Doc, Terminator))
-> CSStateVar CppSrcCode
forall a b. (a -> b) -> a -> b
$ LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppSrcCode (Doc, Terminator)))
  ClassState
  MethodState
-> SrcState MethodState (Doc, Terminator)
-> State ClassState (CppSrcCode (Doc, Terminator))
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 (Doc, Terminator)))
  ClassState
  MethodState
Lens' ClassState MethodState
lensCStoMS SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  stateVarDef :: CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> CSStateVar CppSrcCode
stateVarDef = Doc
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> CSStateVar CppSrcCode
cppsStateVarDef Doc
empty
  constVar :: CppSrcCode (Scope CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> CSStateVar CppSrcCode
constVar s :: CppSrcCode (Scope CppSrcCode)
s = Doc
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> CSStateVar CppSrcCode
cppsStateVarDef Doc
constDec' CppSrcCode (Scope CppSrcCode)
s CppSrcCode (Permanence CppSrcCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
static
  
instance StateVarElim CppSrcCode where
  stateVar :: CppSrcCode (StateVar CppSrcCode) -> 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 where
  type Class CppSrcCode = Doc
  buildClass :: Maybe String
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
buildClass = Maybe String
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
forall (r :: * -> *).
RenderSym r =>
Maybe String -> [CSStateVar r] -> [SMethod r] -> SClass r
G.buildClass
  extraClass :: String
-> Maybe String
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
extraClass = String
-> Maybe String
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> Maybe String -> [CSStateVar r] -> [SMethod r] -> SClass r
CP.extraClass
  implementingClass :: String
-> [String]
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
implementingClass = String
-> [String]
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String -> [String] -> [CSStateVar r] -> [SMethod r] -> SClass r
G.implementingClass

  docClass :: String -> SClass CppSrcCode -> SClass CppSrcCode
docClass = String -> SClass CppSrcCode -> SClass CppSrcCode
forall (r :: * -> *). RenderSym r => String -> SClass r -> SClass r
CP.doxClass

instance RenderClass CppSrcCode where
  intClass :: String
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode Doc
-> [CSStateVar CppSrcCode]
-> [SMethod CppSrcCode]
-> SClass CppSrcCode
intClass n :: String
n _ _ vs :: [CSStateVar CppSrcCode]
vs fs :: [SMethod CppSrcCode]
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
[CppSrcCode (StateVar CppSrcCode)]
-> [CppSrcCode (Method CppSrcCode)]
-> CppSrcCode (Class CppSrcCode)
cppsClass [SrcState ClassState StateVarData]
[CSStateVar CppSrcCode]
vs ((SrcState MethodState MethodData
 -> State ClassState (CppSrcCode MethodData))
-> [SrcState MethodState MethodData]
-> [State ClassState (CppSrcCode MethodData)]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed (StateT MethodState Identity) (CppSrcCode MethodData))
  ClassState
  MethodState
-> SrcState MethodState MethodData
-> State ClassState (CppSrcCode MethodData)
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
Lens' ClassState MethodState
lensCStoMS) ([SrcState MethodState MethodData]
 -> [State ClassState (CppSrcCode MethodData)])
-> [SrcState MethodState MethodData]
-> [State ClassState (CppSrcCode MethodData)]
forall a b. (a -> b) -> a -> b
$ [SMethod CppSrcCode]
[SrcState MethodState MethodData]
fs [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
-> [SrcState MethodState MethodData]
forall a. [a] -> [a] -> [a]
++ [[CSStateVar CppSrcCode] -> SMethod CppSrcCode
forall (r :: * -> *). RenderMethod r => [CSStateVar r] -> SMethod r
destructor [CSStateVar CppSrcCode]
vs])

  inherit :: Maybe String -> CppSrcCode Doc
inherit n :: Maybe String
n = ((Doc, ScopeTag) -> Doc)
-> CppSrcCode (Doc, ScopeTag) -> CppSrcCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Maybe String -> Doc -> Doc
cppInherit Maybe String
n (Doc -> Doc) -> ((Doc, ScopeTag) -> Doc) -> (Doc, ScopeTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, ScopeTag) -> Doc
forall a b. (a, b) -> a
fst) CppSrcCode (Doc, ScopeTag)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public
  implements :: [String] -> CppSrcCode Doc
implements is :: [String]
is = ((Doc, ScopeTag) -> Doc)
-> CppSrcCode (Doc, ScopeTag) -> CppSrcCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((\p :: Doc
p -> Doc
colon Doc -> Doc -> Doc
<+> [Doc] -> Doc
hcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((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]
is)) 
    (Doc -> Doc) -> ((Doc, ScopeTag) -> Doc) -> (Doc, ScopeTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, ScopeTag) -> Doc
forall a b. (a, b) -> a
fst) CppSrcCode (Doc, ScopeTag)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public

  commentedClass :: CS (CppSrcCode (BlockComment CppSrcCode))
-> SClass CppSrcCode -> SClass CppSrcCode
commentedClass _ cs :: SClass CppSrcCode
cs = SClass CppSrcCode
cs
  
instance ClassElim CppSrcCode where
  class' :: CppSrcCode (Class CppSrcCode) -> Doc
class' = CppSrcCode (Class CppSrcCode) -> Doc
forall a. CppSrcCode a -> a
unCPPSC

instance ModuleSym CppSrcCode where
  type Module CppSrcCode = ModData
  buildModule :: String
-> [String]
-> [SMethod CppSrcCode]
-> [SClass CppSrcCode]
-> FSModule CppSrcCode
buildModule n :: String
n is :: [String]
is ms :: [SMethod CppSrcCode]
ms cs :: [SClass CppSrcCode]
cs = String
-> FS Doc
-> FS Doc
-> FS Doc
-> [SMethod CppSrcCode]
-> [SClass CppSrcCode]
-> FSModule CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String
-> FS Doc
-> FS Doc
-> FS Doc
-> [SMethod r]
-> [SClass r]
-> FSModule r
CP.buildModule String
n (do
    [String]
ds <- FS [String]
getDefines
    [String]
lis <- FS [String]
getLangImports
    [String]
libis <- FS [String]
getLibImports
    [String]
mis <- FS [String]
getModuleImports
    [String]
us <- FS [String]
getUsing
    Bool
mn <- State FileState Bool
getCurrMain
    Doc -> FS Doc
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> FS Doc) -> Doc -> FS Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vibcat [
      if Bool
mn Bool -> Bool -> Bool
&& [SrcState MethodState MethodData] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SMethod CppSrcCode]
[SrcState MethodState MethodData]
ms Int -> Int -> Int
forall a. Num a => a -> a -> a
+ [SrcState ClassState Doc] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [SrcState ClassState Doc]
[SClass CppSrcCode]
cs Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1 then Doc
empty else CppSrcCode (Import CppSrcCode) -> Doc
forall (r :: * -> *). ImportElim r => r (Import r) -> Doc
RC.import' (CppSrcCode (Import CppSrcCode) -> Doc)
-> CppSrcCode (Import CppSrcCode) -> Doc
forall a b. (a -> b) -> a -> b
$ String -> CppSrcCode (Import CppSrcCode)
mi String
n,
      [Doc] -> Doc
vcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((Doc
define Doc -> Doc -> Doc
<+>) (Doc -> Doc) -> (String -> Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc
text) [String]
ds),
      [Doc] -> Doc
vcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode Doc -> Doc
forall (r :: * -> *). ImportElim r => r (Import r) -> Doc
RC.import' (CppSrcCode Doc -> Doc)
-> (String -> CppSrcCode Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> CppSrcCode Doc
String -> CppSrcCode (Import CppSrcCode)
li) [String]
lis),
      [Doc] -> Doc
vcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppSrcCode Doc -> Doc
forall (r :: * -> *). ImportElim r => r (Import r) -> Doc
RC.import' (CppSrcCode Doc -> Doc)
-> (String -> CppSrcCode Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> CppSrcCode Doc
String -> CppSrcCode (Import CppSrcCode)
mi) ([String] -> [String]
forall a. Ord a => [a] -> [a]
sort ([String]
is [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
libis) [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
mis)),
      [Doc] -> Doc
vcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (String -> Maybe String -> Doc
usingNameSpace String
std (Maybe String -> Doc) -> (String -> Maybe String) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Maybe String
forall a. a -> Maybe a
Just) [String]
us)]) 
    (Doc -> FS Doc
forall (m :: * -> *) a. Monad m => a -> m a
return Doc
empty) (Doc -> FS Doc
forall (m :: * -> *) a. Monad m => a -> m a
return Doc
empty) [SMethod CppSrcCode]
ms [SClass CppSrcCode]
cs
    where mi, li :: Label -> CppSrcCode (Import CppSrcCode)
          mi :: String -> CppSrcCode (Import CppSrcCode)
mi = String -> CppSrcCode (Import CppSrcCode)
forall (r :: * -> *). ImportSym r => String -> r (Import r)
modImport
          li :: String -> CppSrcCode (Import CppSrcCode)
li = String -> CppSrcCode (Import CppSrcCode)
forall (r :: * -> *). ImportSym r => String -> r (Import r)
langImport

instance RenderMod CppSrcCode where
  modFromData :: String -> FS Doc -> FSModule CppSrcCode
modFromData n :: String
n = String
-> (Doc -> CppSrcCode (Module CppSrcCode))
-> FS Doc
-> FSModule CppSrcCode
forall (r :: * -> *).
String -> (Doc -> r (Module r)) -> FS Doc -> FSModule r
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 (Module CppSrcCode) -> CppSrcCode (Module CppSrcCode)
updateModuleDoc f :: Doc -> Doc
f = (ModData -> ModData) -> CppSrcCode ModData -> CppSrcCode ModData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((Doc -> Doc) -> ModData -> ModData
updateMod Doc -> Doc
f)
  
instance ModuleElim CppSrcCode where
  module' :: CppSrcCode (Module CppSrcCode) -> 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
  type BlockComment CppSrcCode = Doc
  blockComment :: [String] -> CppSrcCode (BlockComment CppSrcCode)
blockComment lns :: [String]
lns = Doc -> CppSrcCode (BlockComment CppSrcCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode (BlockComment CppSrcCode))
-> Doc -> CppSrcCode (BlockComment CppSrcCode)
forall a b. (a -> b) -> a -> b
$ [String] -> Doc -> Doc -> Doc
R.blockCmt [String]
lns Doc
blockCmtStart Doc
blockCmtEnd
  docComment :: State a [String] -> State a (CppSrcCode (BlockComment CppSrcCode))
docComment = ([String] -> CppSrcCode Doc)
-> State a [String] -> State a (CppSrcCode Doc)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (\lns :: [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 (BlockComment CppSrcCode) -> Doc
blockComment' = CppSrcCode (BlockComment CppSrcCode) -> Doc
forall a. CppSrcCode a -> a
unCPPSC

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

newtype CppHdrCode a = CPPHC {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
/= :: CppHdrCode a -> CppHdrCode a -> Bool
$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
Eq

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

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

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

instance RenderSym CppHdrCode

instance FileSym CppHdrCode where
  type File CppHdrCode = FileData
  fileDoc :: FSModule CppHdrCode -> SFile CppHdrCode
fileDoc m :: FSModule CppHdrCode
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 (Module CppHdrCode)
    -> CppHdrCode (Block CppHdrCode))
-> CppHdrCode (Block CppHdrCode)
-> FSModule CppHdrCode
-> SFile CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String
-> (r (Module r) -> r (Block r))
-> r (Block r)
-> FSModule r
-> SFile r
G.fileDoc String
cppHdrExt CppHdrCode (Module CppHdrCode) -> CppHdrCode (Block CppHdrCode)
forall (r :: * -> *). RenderFile r => r (Module r) -> r (Block r)
top CppHdrCode (Block CppHdrCode)
forall (r :: * -> *). RenderFile r => r (Block r)
bottom FSModule CppHdrCode
m
  
  docMod :: String
-> [String] -> String -> SFile CppHdrCode -> SFile CppHdrCode
docMod = String
-> String
-> [String]
-> String
-> SFile CppHdrCode
-> SFile CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> String -> [String] -> String -> SFile r -> SFile r
CP.doxMod String
cppHdrExt

instance RenderFile CppHdrCode where
  top :: CppHdrCode (Module CppHdrCode) -> CppHdrCode (Block CppHdrCode)
top = (ModData -> Doc) -> CppHdrCode ModData -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ModData -> Doc
cpphtop
  bottom :: CppHdrCode (Block CppHdrCode)
bottom = Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
endif
  
  commentedMod :: SFile CppHdrCode
-> FS (CppHdrCode (BlockComment CppHdrCode)) -> SFile CppHdrCode
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 (\m :: CppHdrCode FileData
m cmt :: CppHdrCode Doc
cmt -> if Doc -> Bool
isEmpty (CppHdrCode (Module CppHdrCode) -> Doc
forall (r :: * -> *). ModuleElim r => r (Module r) -> Doc
RC.module' (CppHdrCode (Module CppHdrCode) -> Doc)
-> CppHdrCode (Module CppHdrCode) -> Doc
forall a b. (a -> b) -> a -> b
$ 
    (FileData -> ModData) -> CppHdrCode FileData -> CppHdrCode ModData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r 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 -> FSModule CppHdrCode -> SFile CppHdrCode
fileFromData = (String
 -> CppHdrCode (Module CppHdrCode) -> CppHdrCode (File CppHdrCode))
-> String -> FSModule CppHdrCode -> SFile CppHdrCode
forall (r :: * -> *).
RenderSym r =>
(String -> r (Module r) -> r (File r))
-> String -> FSModule r -> SFile r
G.fileFromData ((ModData -> FileData) -> CppHdrCode ModData -> CppHdrCode FileData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r 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
  type Import CppHdrCode = Doc
  langImport :: String -> CppHdrCode (Import CppHdrCode)
langImport n :: String
n = Doc -> CppHdrCode (Import CppHdrCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode (Import CppHdrCode))
-> Doc -> CppHdrCode (Import CppHdrCode)
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> Doc -> Doc
angles (String -> Doc
text String
n)
  modImport :: String -> CppHdrCode (Import CppHdrCode)
modImport n :: String
n = Doc -> CppHdrCode (Import CppHdrCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode (Import CppHdrCode))
-> Doc -> CppHdrCode (Import CppHdrCode)
forall a b. (a -> b) -> a -> b
$ Doc
inc Doc -> Doc -> Doc
<+> String -> Doc
doubleQuotedText (String -> String -> String
addExt String
cppHdrExt String
n)

instance ImportElim CppHdrCode where
  import' :: CppHdrCode (Import CppHdrCode) -> Doc
import' = CppHdrCode (Import CppHdrCode) -> Doc
forall a. CppHdrCode a -> a
unCPPHC

instance PermanenceSym CppHdrCode where
  type Permanence CppHdrCode = BindData
  static :: CppHdrCode (Permanence CppHdrCode)
static = BindData -> CppHdrCode (Permanence CppHdrCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (BindData -> CppHdrCode (Permanence CppHdrCode))
-> BindData -> CppHdrCode (Permanence CppHdrCode)
forall a b. (a -> b) -> a -> b
$ Binding -> Doc -> BindData
bd Binding
Static Doc
R.static
  dynamic :: CppHdrCode (Permanence CppHdrCode)
dynamic = BindData -> CppHdrCode (Permanence CppHdrCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (BindData -> CppHdrCode (Permanence CppHdrCode))
-> BindData -> CppHdrCode (Permanence CppHdrCode)
forall a b. (a -> b) -> a -> b
$ Binding -> Doc -> BindData
bd Binding
Dynamic Doc
R.dynamic

instance PermElim CppHdrCode where
  perm :: CppHdrCode (Permanence CppHdrCode) -> Doc
perm = BindData -> Doc
bindDoc (BindData -> Doc)
-> (CppHdrCode BindData -> BindData) -> CppHdrCode BindData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode BindData -> BindData
forall a. CppHdrCode a -> a
unCPPHC
  binding :: CppHdrCode (Permanence CppHdrCode) -> Binding
binding = BindData -> Binding
bind (BindData -> Binding)
-> (CppHdrCode BindData -> BindData)
-> CppHdrCode BindData
-> Binding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode BindData -> BindData
forall a. CppHdrCode a -> a
unCPPHC

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

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

instance RenderBody CppHdrCode where
  multiBody :: [MSBody CppHdrCode] -> MSBody CppHdrCode
multiBody = [MSBody CppHdrCode] -> MSBody CppHdrCode
forall (r :: * -> *).
(RenderSym r, Monad r) =>
[MSBody r] -> MS (r Doc)
G.multiBody 

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

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

instance RenderBlock CppHdrCode where
  multiBlock :: [MSBlock CppHdrCode] -> MSBlock CppHdrCode
multiBlock = [MSBlock CppHdrCode] -> MSBlock CppHdrCode
forall (r :: * -> *).
(RenderSym r, Monad r) =>
[MSBlock r] -> MS (r Doc)
G.multiBlock

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

instance TypeSym CppHdrCode where
  type Type CppHdrCode = TypeData
  bool :: VSType CppHdrCode
bool = VSType CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r
cppBoolType
  int :: VSType CppHdrCode
int = VSType CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r
CP.int
  float :: VSType CppHdrCode
float = VSType CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r
C.float
  double :: VSType CppHdrCode
double = VSType CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r
C.double
  char :: VSType CppHdrCode
char = VSType CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r
C.char
  string :: VSType CppHdrCode
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 :: * -> *). RenderSym r => VSType r
CP.string
  infile :: VSType CppHdrCode
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 :: * -> *). RenderSym r => VSType r
cppInfileType
  outfile :: VSType CppHdrCode
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 :: * -> *). RenderSym r => VSType r
cppOutfileType
  listType :: VSType CppHdrCode -> VSType CppHdrCode
listType t :: VSType CppHdrCode
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 -> VSType CppHdrCode -> VSType CppHdrCode
forall (r :: * -> *). RenderSym r => String -> VSType r -> VSType r
C.listType String
vector VSType CppHdrCode
t
  arrayType :: VSType CppHdrCode -> VSType CppHdrCode
arrayType = VSType CppHdrCode -> VSType CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
cppArrayType
  listInnerType :: VSType CppHdrCode -> VSType CppHdrCode
listInnerType = VSType CppHdrCode -> VSType CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
G.listInnerType
  obj :: String -> VSType CppHdrCode
obj n :: String
n = VS (Map String String)
getClassMap VS (Map String String)
-> (Map String String -> State ValueState (CppHdrCode TypeData))
-> State ValueState (CppHdrCode TypeData)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\cm :: 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 (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 -> VSType CppHdrCode
forall (r :: * -> *). RenderSym r => String -> VSType r
G.obj String
n)
  funcType :: [VSType CppHdrCode] -> VSType CppHdrCode -> VSType CppHdrCode
funcType = [VSType CppHdrCode] -> VSType CppHdrCode -> VSType CppHdrCode
forall (r :: * -> *).
RenderSym r =>
[VSType r] -> VSType r -> VSType r
CP.funcType
  void :: VSType CppHdrCode
void = VSType CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r
C.void

instance TypeElim CppHdrCode where
  getType :: CppHdrCode (Type CppHdrCode) -> CodeType
getType = 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
  getTypeString :: CppHdrCode (Type CppHdrCode) -> String
getTypeString = TypeData -> String
typeString (TypeData -> String)
-> (CppHdrCode TypeData -> TypeData)
-> CppHdrCode TypeData
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode TypeData -> TypeData
forall a. CppHdrCode a -> a
unCPPHC
  
instance RenderType CppHdrCode where
  multiType :: [VSType CppHdrCode] -> VSType CppHdrCode
multiType _ = String -> VSType CppHdrCode
forall a. HasCallStack => String -> a
error (String -> VSType CppHdrCode) -> String -> VSType CppHdrCode
forall a b. (a -> b) -> a -> b
$ String -> String
C.multiTypeError String
cppName
  typeFromData :: CodeType -> String -> Doc -> VSType CppHdrCode
typeFromData t :: CodeType
t s :: String
s d :: Doc
d = CppHdrCode TypeData -> VSType CppHdrCode
forall a s. a -> State s a
toState (CppHdrCode TypeData -> VSType CppHdrCode)
-> CppHdrCode TypeData -> VSType CppHdrCode
forall a b. (a -> b) -> a -> b
$ TypeData -> CppHdrCode TypeData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (TypeData -> CppHdrCode TypeData)
-> TypeData -> CppHdrCode TypeData
forall a b. (a -> b) -> a -> b
$ CodeType -> String -> Doc -> TypeData
td CodeType
t String
s Doc
d

instance InternalTypeElim CppHdrCode where
  type' :: CppHdrCode (Type CppHdrCode) -> Doc
type' = TypeData -> Doc
typeDoc (TypeData -> Doc)
-> (CppHdrCode TypeData -> TypeData) -> CppHdrCode TypeData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode TypeData -> TypeData
forall a. CppHdrCode a -> a
unCPPHC

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

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

instance OpElim CppHdrCode where
  uOp :: CppHdrCode (UnaryOp CppHdrCode) -> 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 (BinaryOp CppHdrCode) -> 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 (UnaryOp CppHdrCode) -> 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 (BinaryOp CppHdrCode) -> 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 VariableSym CppHdrCode where
  type Variable CppHdrCode = VarData
  var :: String -> VSType CppHdrCode -> SVariable CppHdrCode
var = String -> VSType CppHdrCode -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> SVariable r
G.var
  staticVar :: String -> VSType CppHdrCode -> SVariable CppHdrCode
staticVar = String -> VSType CppHdrCode -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> SVariable r
G.staticVar
  const :: String -> VSType CppHdrCode -> SVariable CppHdrCode
const _ _ = String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> Doc -> SVariable r
mkStateVar "" VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  extVar :: String -> String -> VSType CppHdrCode -> SVariable CppHdrCode
extVar _ _ _ = String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> Doc -> SVariable r
mkStateVar "" VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  self :: SVariable CppHdrCode
self = String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> Doc -> SVariable r
mkStateVar "" VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  classVar :: VSType CppHdrCode -> SVariable CppHdrCode -> SVariable CppHdrCode
classVar _ _ = String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> Doc -> SVariable r
mkStateVar "" VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  extClassVar :: VSType CppHdrCode -> SVariable CppHdrCode -> SVariable CppHdrCode
extClassVar _ _ = String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> Doc -> SVariable r
mkStateVar "" VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  objVar :: SVariable CppHdrCode
-> SVariable CppHdrCode -> SVariable CppHdrCode
objVar = SVariable CppHdrCode
-> SVariable CppHdrCode -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
SVariable r -> SVariable r -> SVariable r
G.objVar
  objVarSelf :: SVariable CppHdrCode -> SVariable CppHdrCode
objVarSelf _ = String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> Doc -> SVariable r
mkStateVar "" VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  arrayElem :: Integer -> SVariable CppHdrCode -> SVariable CppHdrCode
arrayElem _ _ = String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> VSType r -> Doc -> SVariable r
mkStateVar "" VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  
instance VariableElim CppHdrCode where
  variableName :: CppHdrCode (Variable CppHdrCode) -> String
variableName = VarData -> String
varName (VarData -> String)
-> (CppHdrCode VarData -> VarData) -> CppHdrCode VarData -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode VarData -> VarData
forall a. CppHdrCode a -> a
unCPPHC
  variableType :: CppHdrCode (Variable CppHdrCode) -> CppHdrCode (Type CppHdrCode)
variableType = (VarData -> TypeData) -> CppHdrCode VarData -> CppHdrCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue VarData -> TypeData
varType

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

instance RenderVariable CppHdrCode where
  varFromData :: Binding
-> String -> VSType CppHdrCode -> Doc -> SVariable CppHdrCode
varFromData b :: Binding
b n :: String
n t' :: VSType CppHdrCode
t' d :: Doc
d = do 
    CppHdrCode TypeData
t <- State ValueState (CppHdrCode TypeData)
VSType CppHdrCode
t' 
    CppHdrCode VarData -> HdrState ValueState VarData
forall a s. a -> State s a
toState (CppHdrCode VarData -> HdrState ValueState VarData)
-> CppHdrCode VarData -> HdrState ValueState VarData
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> VarData)
-> CppHdrCode TypeData -> CppHdrCode Doc -> CppHdrCode VarData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (Binding -> String -> TypeData -> Doc -> VarData
vard Binding
b String
n) CppHdrCode TypeData
t (Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)

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

instance Argument CppHdrCode where
  pointerArg :: SValue CppHdrCode -> SValue CppHdrCode
pointerArg = SValue CppHdrCode -> SValue CppHdrCode
forall a. a -> a
id

instance Literal CppHdrCode where
  litTrue :: SValue CppHdrCode
litTrue = SValue CppHdrCode
forall (r :: * -> *). RenderSym r => SValue r
C.litTrue
  litFalse :: SValue CppHdrCode
litFalse = SValue CppHdrCode
forall (r :: * -> *). RenderSym r => SValue r
C.litFalse
  litChar :: Char -> SValue CppHdrCode
litChar = (Doc -> Doc) -> Char -> SValue CppHdrCode
forall (r :: * -> *).
RenderSym r =>
(Doc -> Doc) -> Char -> SValue r
G.litChar Doc -> Doc
quotes
  litDouble :: Double -> SValue CppHdrCode
litDouble = Double -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => Double -> SValue r
G.litDouble
  litFloat :: Float -> SValue CppHdrCode
litFloat = Float -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => Float -> SValue r
C.litFloat
  litInt :: Integer -> SValue CppHdrCode
litInt = Integer -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => Integer -> SValue r
G.litInt
  litString :: String -> SValue CppHdrCode
litString = String -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => String -> SValue r
G.litString
  litArray :: VSType CppHdrCode -> [SValue CppHdrCode] -> SValue CppHdrCode
litArray = (Doc -> Doc)
-> VSType CppHdrCode -> [SValue CppHdrCode] -> SValue CppHdrCode
forall (r :: * -> *).
RenderSym r =>
(Doc -> Doc) -> VSType r -> [SValue r] -> SValue r
CP.litArray Doc -> Doc
braces
  litList :: VSType CppHdrCode -> [SValue CppHdrCode] -> SValue CppHdrCode
litList _ _ = String -> SValue CppHdrCode
forall a. HasCallStack => String -> a
error (String -> SValue CppHdrCode) -> String -> SValue CppHdrCode
forall a b. (a -> b) -> a -> b
$ "List literals not supported in " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
cppName

instance MathConstant CppHdrCode where
  pi :: SValue CppHdrCode
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) 
    VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
double Doc
cppPi

instance VariableValue CppHdrCode where
  valueOf :: SVariable CppHdrCode -> SValue CppHdrCode
valueOf = SVariable CppHdrCode -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => SVariable r -> SValue r
G.valueOf

instance CommandLineArgs CppHdrCode where
  arg :: Integer -> SValue CppHdrCode
arg n :: Integer
n = SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
forall (r :: * -> *).
RenderSym r =>
SValue r -> SValue r -> SValue r
G.arg (Integer -> SValue CppHdrCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt (Integer -> SValue CppHdrCode) -> Integer -> SValue CppHdrCode
forall a b. (a -> b) -> a -> b
$ Integer
nInteger -> Integer -> Integer
forall a. Num a => a -> a -> a
+1) SValue CppHdrCode
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList
  argsList :: SValue CppHdrCode
argsList = String -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => String -> SValue r
G.argsList String
argv
  argExists :: Integer -> SValue CppHdrCode
argExists _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

instance NumericExpression CppHdrCode where
  #~ :: SValue CppHdrCode -> SValue CppHdrCode
(#~) _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  #/^ :: SValue CppHdrCode -> SValue CppHdrCode
(#/^) _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  #| :: SValue CppHdrCode -> SValue CppHdrCode
(#|) _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  #+ :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(#+) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  #- :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(#-) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  #* :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(#*) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  #/ :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(#/) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  #% :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(#%) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  #^ :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(#^) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

  log :: SValue CppHdrCode -> SValue CppHdrCode
log _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ln :: SValue CppHdrCode -> SValue CppHdrCode
ln _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  exp :: SValue CppHdrCode -> SValue CppHdrCode
exp _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  sin :: SValue CppHdrCode -> SValue CppHdrCode
sin _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  cos :: SValue CppHdrCode -> SValue CppHdrCode
cos _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  tan :: SValue CppHdrCode -> SValue CppHdrCode
tan _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  csc :: SValue CppHdrCode -> SValue CppHdrCode
csc _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  sec :: SValue CppHdrCode -> SValue CppHdrCode
sec _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  cot :: SValue CppHdrCode -> SValue CppHdrCode
cot _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  arcsin :: SValue CppHdrCode -> SValue CppHdrCode
arcsin _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  arccos :: SValue CppHdrCode -> SValue CppHdrCode
arccos _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  arctan :: SValue CppHdrCode -> SValue CppHdrCode
arctan _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  floor :: SValue CppHdrCode -> SValue CppHdrCode
floor _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ceil :: SValue CppHdrCode -> SValue CppHdrCode
ceil _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

instance BooleanExpression CppHdrCode where
  ?! :: SValue CppHdrCode -> SValue CppHdrCode
(?!) _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ?&& :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(?&&) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ?|| :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(?||) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

instance Comparison CppHdrCode where
  ?< :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(?<) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ?<= :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(?<=) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ?> :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(?>) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ?>= :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(?>=) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ?== :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(?==) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  ?!= :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
(?!=) _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
   
instance ValueExpression CppHdrCode where
  inlineIf :: SValue CppHdrCode
-> SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
inlineIf _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

  funcAppMixedArgs :: MixedCall CppHdrCode
funcAppMixedArgs _ _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  selfFuncAppMixedArgs :: MixedCall CppHdrCode
selfFuncAppMixedArgs _ _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  extFuncAppMixedArgs :: String -> MixedCall CppHdrCode
extFuncAppMixedArgs _ _ _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  libFuncAppMixedArgs :: String -> MixedCall CppHdrCode
libFuncAppMixedArgs _ _ _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  newObjMixedArgs :: MixedCtorCall CppHdrCode
newObjMixedArgs _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  extNewObjMixedArgs :: MixedCall CppHdrCode
extNewObjMixedArgs _ _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  libNewObjMixedArgs :: MixedCall CppHdrCode
libNewObjMixedArgs _ _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

  lambda :: [SVariable CppHdrCode] -> SValue CppHdrCode -> SValue CppHdrCode
lambda _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

  notNull :: SValue CppHdrCode -> SValue CppHdrCode
notNull _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

instance RenderValue CppHdrCode where
  inputFunc :: SValue CppHdrCode
inputFunc = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  printFunc :: SValue CppHdrCode
printFunc = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  printLnFunc :: SValue CppHdrCode
printLnFunc = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  printFileFunc :: SValue CppHdrCode -> SValue CppHdrCode
printFileFunc _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  printFileLnFunc :: SValue CppHdrCode -> SValue CppHdrCode
printFileLnFunc _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  
  cast :: VSType CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
cast _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  
  call :: Maybe String -> Maybe Doc -> MixedCall CppHdrCode
call _ _ _ _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

  valFromData :: Maybe Int -> VSType CppHdrCode -> Doc -> SValue CppHdrCode
valFromData p :: Maybe Int
p t' :: VSType CppHdrCode
t' d :: Doc
d = do 
    CppHdrCode TypeData
t <- State ValueState (CppHdrCode TypeData)
VSType CppHdrCode
t' 
    CppHdrCode ValData -> HdrState ValueState ValData
forall a s. a -> State s a
toState (CppHdrCode ValData -> HdrState ValueState ValData)
-> CppHdrCode ValData -> HdrState ValueState ValData
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> ValData)
-> CppHdrCode TypeData -> CppHdrCode Doc -> CppHdrCode ValData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (Maybe Int -> TypeData -> Doc -> ValData
vd Maybe Int
p) CppHdrCode TypeData
t (Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)
  
instance ValueElim CppHdrCode where
  valuePrec :: CppHdrCode (Value CppHdrCode) -> Maybe Int
valuePrec = ValData -> Maybe Int
valPrec (ValData -> Maybe Int)
-> (CppHdrCode ValData -> ValData)
-> CppHdrCode ValData
-> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode ValData -> ValData
forall a. CppHdrCode a -> a
unCPPHC
  value :: CppHdrCode (Value CppHdrCode) -> Doc
value = ValData -> Doc
val (ValData -> Doc)
-> (CppHdrCode ValData -> ValData) -> CppHdrCode ValData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode ValData -> ValData
forall a. CppHdrCode a -> a
unCPPHC
  
instance InternalValueExp CppHdrCode where
  objMethodCallMixedArgs' :: String
-> VSType CppHdrCode
-> SValue CppHdrCode
-> [SValue CppHdrCode]
-> NamedArgs CppHdrCode
-> SValue CppHdrCode
objMethodCallMixedArgs' _ _ _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

instance FunctionSym CppHdrCode where
  type Function CppHdrCode = FuncData
  func :: String
-> VSType CppHdrCode
-> [SValue CppHdrCode]
-> VSFunction CppHdrCode
func _ _ _ = Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
empty VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void
  objAccess :: SValue CppHdrCode -> VSFunction CppHdrCode -> SValue CppHdrCode
objAccess _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

instance GetSet CppHdrCode where
  get :: SValue CppHdrCode -> SVariable CppHdrCode -> SValue CppHdrCode
get _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  set :: SValue CppHdrCode
-> SVariable CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
set _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty

instance List CppHdrCode where
  listSize :: SValue CppHdrCode -> SValue CppHdrCode
listSize _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  listAdd :: SValue CppHdrCode
-> SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
listAdd _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  listAppend :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
listAppend _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  listAccess :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
listAccess _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  listSet :: SValue CppHdrCode
-> SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
listSet _ _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  indexOf :: SValue CppHdrCode -> SValue CppHdrCode -> SValue CppHdrCode
indexOf _ _ = VSType CppHdrCode -> Doc -> SValue CppHdrCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void Doc
empty
  
instance InternalList CppHdrCode where
  listSlice' :: Maybe (SValue CppHdrCode)
-> Maybe (SValue CppHdrCode)
-> Maybe (SValue CppHdrCode)
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> MSBlock CppHdrCode
listSlice' _ _ _ _ _ = CppHdrCode Doc -> MSBlock CppHdrCode
forall a s. a -> State s a
toState (CppHdrCode Doc -> MSBlock CppHdrCode)
-> CppHdrCode Doc -> MSBlock CppHdrCode
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance InternalGetSet CppHdrCode where
  getFunc :: SVariable CppHdrCode -> VSFunction CppHdrCode
getFunc _ = Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
empty VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void
  setFunc :: VSType CppHdrCode
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> VSFunction CppHdrCode
setFunc _ _ _ = Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
empty VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void

instance InternalListFunc CppHdrCode where
  listSizeFunc :: VSFunction CppHdrCode
listSizeFunc = Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
empty VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void
  listAddFunc :: SValue CppHdrCode
-> SValue CppHdrCode -> SValue CppHdrCode -> VSFunction CppHdrCode
listAddFunc _ _ _ = Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
empty VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void
  listAppendFunc :: SValue CppHdrCode -> VSFunction CppHdrCode
listAppendFunc _ = Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
empty VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void
  listAccessFunc :: VSType CppHdrCode -> SValue CppHdrCode -> VSFunction CppHdrCode
listAccessFunc _ _ = Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
empty VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void
  listSetFunc :: SValue CppHdrCode
-> SValue CppHdrCode -> SValue CppHdrCode -> VSFunction CppHdrCode
listSetFunc _ _ _ = Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
forall (r :: * -> *).
RenderFunction r =>
Doc -> VSType r -> VSFunction r
funcFromData Doc
empty VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void
  
instance RenderFunction CppHdrCode where
  funcFromData :: Doc -> VSType CppHdrCode -> VSFunction CppHdrCode
funcFromData d :: 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 (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (TypeData -> Doc -> FuncData
`fd` Doc
d))
  
instance FunctionElim CppHdrCode where
  functionType :: CppHdrCode (Function CppHdrCode) -> CppHdrCode (Type CppHdrCode)
functionType = (FuncData -> TypeData)
-> CppHdrCode FuncData -> CppHdrCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue FuncData -> TypeData
fType
  function :: CppHdrCode (Function CppHdrCode) -> 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 where
  multiAssign :: [SVariable CppHdrCode]
-> [SValue CppHdrCode] -> MSStatement CppHdrCode
multiAssign _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance InternalIOStmt CppHdrCode where
  printSt :: Bool
-> Maybe (SValue CppHdrCode)
-> SValue CppHdrCode
-> SValue CppHdrCode
-> MSStatement CppHdrCode
printSt _ _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  
instance InternalControlStmt CppHdrCode where
  multiReturn :: [SValue CppHdrCode] -> MSStatement CppHdrCode
multiReturn _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance RenderStatement CppHdrCode where
  stmt :: MSStatement CppHdrCode -> MSStatement CppHdrCode
stmt = MSStatement CppHdrCode -> MSStatement CppHdrCode
forall (r :: * -> *). RenderSym r => MSStatement r -> MSStatement r
G.stmt
  loopStmt :: MSStatement CppHdrCode -> MSStatement CppHdrCode
loopStmt _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  emptyStmt :: MSStatement CppHdrCode
emptyStmt = MSStatement CppHdrCode
forall (r :: * -> *). RenderSym r => MSStatement r
G.emptyStmt
  
  stmtFromData :: Doc -> Terminator -> MSStatement CppHdrCode
stmtFromData d :: Doc
d t :: Terminator
t = CppHdrCode (Doc, Terminator) -> MSStatement CppHdrCode
forall a s. a -> State s a
toState (CppHdrCode (Doc, Terminator) -> MSStatement CppHdrCode)
-> CppHdrCode (Doc, Terminator) -> MSStatement CppHdrCode
forall a b. (a -> b) -> a -> b
$ (Doc, Terminator) -> CppHdrCode (Doc, Terminator)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, Terminator
t)
  
instance StatementElim CppHdrCode where
  statement :: CppHdrCode (Statement CppHdrCode) -> Doc
statement = (Doc, Terminator) -> Doc
forall a b. (a, b) -> a
fst ((Doc, Terminator) -> Doc)
-> (CppHdrCode (Doc, Terminator) -> (Doc, Terminator))
-> CppHdrCode (Doc, Terminator)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode (Doc, Terminator) -> (Doc, Terminator)
forall a. CppHdrCode a -> a
unCPPHC
  statementTerm :: CppHdrCode (Statement CppHdrCode) -> Terminator
statementTerm = (Doc, Terminator) -> Terminator
forall a b. (a, b) -> b
snd ((Doc, Terminator) -> Terminator)
-> (CppHdrCode (Doc, Terminator) -> (Doc, Terminator))
-> CppHdrCode (Doc, Terminator)
-> Terminator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode (Doc, Terminator) -> (Doc, Terminator)
forall a. CppHdrCode a -> a
unCPPHC

instance StatementSym CppHdrCode where
  type Statement CppHdrCode = (Doc, Terminator)
  valStmt :: SValue CppHdrCode -> MSStatement CppHdrCode
valStmt _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  multi :: [MSStatement CppHdrCode] -> MSStatement CppHdrCode
multi _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance AssignStatement CppHdrCode where
  assign :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
assign _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  &-= :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
(&-=) _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  &+= :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
(&+=) _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  &++ :: SVariable CppHdrCode -> MSStatement CppHdrCode
(&++) _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  &-- :: SVariable CppHdrCode -> MSStatement CppHdrCode
(&--) _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance DeclStatement CppHdrCode where
  varDec :: SVariable CppHdrCode -> MSStatement CppHdrCode
varDec = CppHdrCode (Permanence CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> Doc
-> SVariable CppHdrCode
-> MSStatement CppHdrCode
forall (r :: * -> *).
RenderSym r =>
r (Permanence r)
-> r (Permanence r) -> Doc -> SVariable r -> MSStatement r
C.varDec CppHdrCode (Permanence CppHdrCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
static CppHdrCode (Permanence CppHdrCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
dynamic Doc
empty
  varDecDef :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
varDecDef = Terminator
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> MSStatement CppHdrCode
forall (r :: * -> *).
RenderSym r =>
Terminator -> SVariable r -> SValue r -> MSStatement r
C.varDecDef Terminator
Semi
  listDec :: Integer -> SVariable CppHdrCode -> MSStatement CppHdrCode
listDec _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  listDecDef :: SVariable CppHdrCode
-> [SValue CppHdrCode] -> MSStatement CppHdrCode
listDecDef _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  arrayDec :: Integer -> SVariable CppHdrCode -> MSStatement CppHdrCode
arrayDec _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  arrayDecDef :: SVariable CppHdrCode
-> [SValue CppHdrCode] -> MSStatement CppHdrCode
arrayDecDef _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  objDecDef :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
objDecDef _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  objDecNew :: SVariable CppHdrCode
-> [SValue CppHdrCode] -> MSStatement CppHdrCode
objDecNew _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  extObjDecNew :: String
-> SVariable CppHdrCode
-> [SValue CppHdrCode]
-> MSStatement CppHdrCode
extObjDecNew _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  constDecDef :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
constDecDef = SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
forall (r :: * -> *).
RenderSym r =>
SVariable r -> SValue r -> MSStatement r
CP.constDecDef
  funcDecDef :: SVariable CppHdrCode
-> [SVariable CppHdrCode]
-> MSBody CppHdrCode
-> MSStatement CppHdrCode
funcDecDef _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance IOStatement CppHdrCode where
  print :: SValue CppHdrCode -> MSStatement CppHdrCode
print _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  printLn :: SValue CppHdrCode -> MSStatement CppHdrCode
printLn _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  printStr :: String -> MSStatement CppHdrCode
printStr _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  printStrLn :: String -> MSStatement CppHdrCode
printStrLn _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  printFile :: SValue CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
printFile _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  printFileLn :: SValue CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
printFileLn _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  printFileStr :: SValue CppHdrCode -> String -> MSStatement CppHdrCode
printFileStr _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  printFileStrLn :: SValue CppHdrCode -> String -> MSStatement CppHdrCode
printFileStrLn _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  getInput :: SVariable CppHdrCode -> MSStatement CppHdrCode
getInput _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  discardInput :: MSStatement CppHdrCode
discardInput = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  getFileInput :: SValue CppHdrCode -> SVariable CppHdrCode -> MSStatement CppHdrCode
getFileInput _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  discardFileInput :: SValue CppHdrCode -> MSStatement CppHdrCode
discardFileInput _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  openFileR :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
openFileR _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  openFileW :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
openFileW _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  openFileA :: SVariable CppHdrCode -> SValue CppHdrCode -> MSStatement CppHdrCode
openFileA _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  closeFile :: SValue CppHdrCode -> MSStatement CppHdrCode
closeFile _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  getFileInputLine :: SValue CppHdrCode -> SVariable CppHdrCode -> MSStatement CppHdrCode
getFileInputLine _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  discardFileLine :: SValue CppHdrCode -> MSStatement CppHdrCode
discardFileLine _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  getFileInputAll :: SValue CppHdrCode -> SVariable CppHdrCode -> MSStatement CppHdrCode
getFileInputAll _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance StringStatement CppHdrCode where
  stringSplit :: Char
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> MSStatement CppHdrCode
stringSplit _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  stringListVals :: [SVariable CppHdrCode]
-> SValue CppHdrCode -> MSStatement CppHdrCode
stringListVals _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  stringListLists :: [SVariable CppHdrCode]
-> SValue CppHdrCode -> MSStatement CppHdrCode
stringListLists _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance FuncAppStatement CppHdrCode where
  inOutCall :: InOutCall CppHdrCode
inOutCall _ _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  selfInOutCall :: InOutCall CppHdrCode
selfInOutCall _ _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  extInOutCall :: String -> InOutCall CppHdrCode
extInOutCall _ _ _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance CommentStatement CppHdrCode where
  comment :: String -> MSStatement CppHdrCode
comment _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance ControlStatement CppHdrCode where
  break :: MSStatement CppHdrCode
break = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  continue :: MSStatement CppHdrCode
continue = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  returnStmt :: SValue CppHdrCode -> MSStatement CppHdrCode
returnStmt _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  throw :: String -> MSStatement CppHdrCode
throw _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  ifCond :: [(SValue CppHdrCode, MSBody CppHdrCode)]
-> MSBody CppHdrCode -> MSStatement CppHdrCode
ifCond _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  switch :: SValue CppHdrCode
-> [(SValue CppHdrCode, MSBody CppHdrCode)]
-> MSBody CppHdrCode
-> MSStatement CppHdrCode
switch _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  ifExists :: SValue CppHdrCode
-> MSBody CppHdrCode -> MSBody CppHdrCode -> MSStatement CppHdrCode
ifExists _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  for :: MSStatement CppHdrCode
-> SValue CppHdrCode
-> MSStatement CppHdrCode
-> MSBody CppHdrCode
-> MSStatement CppHdrCode
for _ _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  forRange :: SVariable CppHdrCode
-> SValue CppHdrCode
-> SValue CppHdrCode
-> SValue CppHdrCode
-> MSBody CppHdrCode
-> MSStatement CppHdrCode
forRange _ _ _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  forEach :: SVariable CppHdrCode
-> SValue CppHdrCode -> MSBody CppHdrCode -> MSStatement CppHdrCode
forEach _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  while :: SValue CppHdrCode -> MSBody CppHdrCode -> MSStatement CppHdrCode
while _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

  tryCatch :: MSBody CppHdrCode -> MSBody CppHdrCode -> MSStatement CppHdrCode
tryCatch _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance StatePattern CppHdrCode where
  checkState :: String
-> [(SValue CppHdrCode, MSBody CppHdrCode)]
-> MSBody CppHdrCode
-> MSStatement CppHdrCode
checkState _ _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance ObserverPattern CppHdrCode where
  notifyObservers :: VSFunction CppHdrCode
-> VSType CppHdrCode -> MSStatement CppHdrCode
notifyObservers _ _ = MSStatement CppHdrCode
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt

instance StrategyPattern CppHdrCode where
  runStrategy :: String
-> [(String, MSBody CppHdrCode)]
-> Maybe (SValue CppHdrCode)
-> Maybe (SVariable CppHdrCode)
-> MSBlock CppHdrCode
runStrategy _ _ _ _ = CppHdrCode Doc -> MSBlock CppHdrCode
forall a s. a -> State s a
toState (CppHdrCode Doc -> MSBlock CppHdrCode)
-> CppHdrCode Doc -> MSBlock CppHdrCode
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty

instance ScopeSym CppHdrCode where
  type Scope CppHdrCode = (Doc, ScopeTag)
  private :: CppHdrCode (Scope CppHdrCode)
private = (Doc, ScopeTag) -> CppHdrCode (Doc, ScopeTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.private, ScopeTag
Priv)
  public :: CppHdrCode (Scope CppHdrCode)
public = (Doc, ScopeTag) -> CppHdrCode (Doc, ScopeTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
R.public, ScopeTag
Pub)

instance RenderScope CppHdrCode where
  scopeFromData :: ScopeTag -> Doc -> CppHdrCode (Scope CppHdrCode)
scopeFromData s :: ScopeTag
s d :: Doc
d = (Doc, ScopeTag) -> CppHdrCode (Doc, ScopeTag)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, ScopeTag
s)
  
instance ScopeElim CppHdrCode where
  scope :: CppHdrCode (Scope CppHdrCode) -> Doc
scope = (Doc, ScopeTag) -> Doc
forall a b. (a, b) -> a
fst ((Doc, ScopeTag) -> Doc)
-> (CppHdrCode (Doc, ScopeTag) -> (Doc, ScopeTag))
-> CppHdrCode (Doc, ScopeTag)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppHdrCode (Doc, ScopeTag) -> (Doc, ScopeTag)
forall a. CppHdrCode a -> a
unCPPHC

instance MethodTypeSym CppHdrCode where
  type MethodType CppHdrCode = TypeData
  mType :: VSType CppHdrCode -> MSMthdType CppHdrCode
mType = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode TypeData))
  MethodState
  ValueState
-> State ValueState (CppHdrCode TypeData)
-> HdrState MethodState TypeData
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
Lens' MethodState ValueState
lensMStoVS
  construct :: String -> MSMthdType CppHdrCode
construct = String -> MSMthdType CppHdrCode
forall (r :: * -> *). RenderSym r => String -> MS (r (Type r))
G.construct

instance ParameterSym CppHdrCode where
  type Parameter CppHdrCode = ParamData
  param :: SVariable CppHdrCode -> MSParameter CppHdrCode
param v' :: SVariable CppHdrCode
v' = do 
    CppHdrCode VarData
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode VarData))
  MethodState
  ValueState
-> HdrState ValueState VarData
-> StateT MethodState Identity (CppHdrCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState VarData
SVariable CppHdrCode
v'
    SVariable CppHdrCode -> Doc -> MSParameter CppHdrCode
forall (r :: * -> *).
RenderParam r =>
SVariable r -> Doc -> MSParameter r
paramFromData SVariable CppHdrCode
v' (CppHdrCode (Variable CppHdrCode) -> Doc
forall (r :: * -> *). RenderSym r => r (Variable r) -> Doc
R.param CppHdrCode VarData
CppHdrCode (Variable CppHdrCode)
v)
  pointerParam :: SVariable CppHdrCode -> MSParameter CppHdrCode
pointerParam v' :: SVariable CppHdrCode
v' = do 
    CppHdrCode VarData
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode VarData))
  MethodState
  ValueState
-> HdrState ValueState VarData
-> StateT MethodState Identity (CppHdrCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState VarData
SVariable CppHdrCode
v' 
    SVariable CppHdrCode -> Doc -> MSParameter CppHdrCode
forall (r :: * -> *).
RenderParam r =>
SVariable r -> Doc -> MSParameter r
paramFromData SVariable CppHdrCode
v' (CppHdrCode (Variable CppHdrCode) -> Doc
forall (r :: * -> *). RenderSym r => r (Variable r) -> Doc
cppPointerParamDoc CppHdrCode VarData
CppHdrCode (Variable CppHdrCode)
v)

instance RenderParam CppHdrCode where
  paramFromData :: SVariable CppHdrCode -> Doc -> MSParameter CppHdrCode
paramFromData v' :: SVariable CppHdrCode
v' d :: Doc
d = do 
    CppHdrCode VarData
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode VarData))
  MethodState
  ValueState
-> HdrState ValueState VarData
-> StateT MethodState Identity (CppHdrCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState VarData
SVariable CppHdrCode
v' 
    CppHdrCode ParamData -> HdrState MethodState ParamData
forall a s. a -> State s a
toState (CppHdrCode ParamData -> HdrState MethodState ParamData)
-> CppHdrCode ParamData -> HdrState MethodState ParamData
forall a b. (a -> b) -> a -> b
$ (VarData -> Doc -> ParamData)
-> CppHdrCode VarData -> CppHdrCode Doc -> CppHdrCode ParamData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues VarData -> Doc -> ParamData
pd CppHdrCode VarData
v (Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d) 
  
instance ParamElim CppHdrCode where
  parameterName :: CppHdrCode (Parameter CppHdrCode) -> String
parameterName = CppHdrCode VarData -> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName (CppHdrCode VarData -> String)
-> (CppHdrCode ParamData -> CppHdrCode VarData)
-> CppHdrCode ParamData
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> VarData)
-> CppHdrCode ParamData -> CppHdrCode VarData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> VarData
paramVar
  parameterType :: CppHdrCode (Parameter CppHdrCode) -> CppHdrCode (Type CppHdrCode)
parameterType = CppHdrCode VarData -> CppHdrCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType (CppHdrCode VarData -> CppHdrCode TypeData)
-> (CppHdrCode ParamData -> CppHdrCode VarData)
-> CppHdrCode ParamData
-> CppHdrCode TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> VarData)
-> CppHdrCode ParamData -> CppHdrCode VarData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> VarData
paramVar
  parameter :: CppHdrCode (Parameter CppHdrCode) -> 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 where
  type Method CppHdrCode = MethodData
  method :: String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
method = String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String
-> r (Scope r)
-> r (Permanence r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
G.method
  getMethod :: SVariable CppHdrCode -> SMethod CppHdrCode
getMethod v :: SVariable CppHdrCode
v = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode VarData))
  MethodState
  ValueState
-> HdrState ValueState VarData
-> StateT MethodState Identity (CppHdrCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState VarData
SVariable CppHdrCode
v StateT MethodState Identity (CppHdrCode VarData)
-> (CppHdrCode VarData -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\v' :: CppHdrCode VarData
v' -> String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> r (Permanence r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
method (String -> String
getterName (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Variable CppHdrCode) -> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName 
    CppHdrCode VarData
CppHdrCode (Variable CppHdrCode)
v') CppHdrCode (Scope CppHdrCode)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public CppHdrCode (Permanence CppHdrCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
dynamic (CppHdrCode TypeData -> VSType CppHdrCode
forall a s. a -> State s a
toState (CppHdrCode TypeData -> VSType CppHdrCode)
-> CppHdrCode TypeData -> VSType CppHdrCode
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Variable CppHdrCode) -> CppHdrCode (Type CppHdrCode)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType CppHdrCode VarData
CppHdrCode (Variable CppHdrCode)
v') [] (CppHdrCode Doc -> MSBody CppHdrCode
forall a s. a -> State s a
toState (CppHdrCode Doc -> MSBody CppHdrCode)
-> CppHdrCode Doc -> MSBody CppHdrCode
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty))
  setMethod :: SVariable CppHdrCode -> SMethod CppHdrCode
setMethod v :: SVariable CppHdrCode
v = LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode VarData))
  MethodState
  ValueState
-> HdrState ValueState VarData
-> StateT MethodState Identity (CppHdrCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS HdrState ValueState VarData
SVariable CppHdrCode
v StateT MethodState Identity (CppHdrCode VarData)
-> (CppHdrCode VarData -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\v' :: CppHdrCode VarData
v' -> String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> r (Permanence r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
method (String -> String
setterName (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Variable CppHdrCode) -> String
forall (r :: * -> *). VariableElim r => r (Variable r) -> String
variableName 
    CppHdrCode VarData
CppHdrCode (Variable CppHdrCode)
v') CppHdrCode (Scope CppHdrCode)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public CppHdrCode (Permanence CppHdrCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
dynamic VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void [SVariable CppHdrCode -> MSParameter CppHdrCode
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
param SVariable CppHdrCode
v] (CppHdrCode Doc -> MSBody CppHdrCode
forall a s. a -> State s a
toState (CppHdrCode Doc -> MSBody CppHdrCode)
-> CppHdrCode Doc -> MSBody CppHdrCode
forall a b. (a -> b) -> a -> b
$ Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty))
  constructor :: [MSParameter CppHdrCode]
-> NamedArgs CppHdrCode -> MSBody CppHdrCode -> SMethod CppHdrCode
constructor ps :: [MSParameter CppHdrCode]
ps is :: NamedArgs CppHdrCode
is b :: MSBody CppHdrCode
b = StateT MethodState Identity String
getClassName StateT MethodState Identity String
-> (String -> HdrState MethodState MethodData)
-> HdrState MethodState MethodData
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\n :: String
n -> String
-> [MSParameter CppHdrCode]
-> NamedArgs CppHdrCode
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String
-> [MSParameter r] -> Initializers r -> MSBody r -> SMethod r
CP.constructor String
n [MSParameter CppHdrCode]
ps NamedArgs CppHdrCode
is MSBody CppHdrCode
b)

  docMain :: MSBody CppHdrCode -> SMethod CppHdrCode
docMain = MSBody CppHdrCode -> SMethod CppHdrCode
forall (r :: * -> *). MethodSym r => MSBody r -> SMethod r
mainFunction

  function :: String
-> CppHdrCode (Scope CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
function = String
-> CppHdrCode (Scope CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String
-> r (Scope r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
G.function
  mainFunction :: MSBody CppHdrCode -> SMethod CppHdrCode
mainFunction _ = (MethodState -> MethodState)
-> CppHdrCode MethodData -> HdrState MethodState MethodData
forall s a. (s -> s) -> a -> State s a
modifyReturn (ScopeTag -> MethodState -> MethodState
setScope ScopeTag
Pub) (CppHdrCode MethodData -> SMethod CppHdrCode)
-> CppHdrCode MethodData -> SMethod CppHdrCode
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
$ ScopeTag -> Doc -> MethodData
mthd ScopeTag
Pub Doc
empty

  docFunc :: String
-> [String]
-> Maybe String
-> SMethod CppHdrCode
-> SMethod CppHdrCode
docFunc = String
-> [String]
-> Maybe String
-> SMethod CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> [String] -> Maybe String -> SMethod r -> SMethod r
CP.doxFunc

  inOutMethod :: String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> InOutFunc CppHdrCode
inOutMethod n :: String
n s :: CppHdrCode (Scope CppHdrCode)
s p :: CppHdrCode (Permanence CppHdrCode)
p = (VSType CppHdrCode
 -> [MSParameter CppHdrCode]
 -> MSBody CppHdrCode
 -> SMethod CppHdrCode)
-> InOutFunc CppHdrCode
cpphInOut (String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> r (Permanence r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
method String
n CppHdrCode (Scope CppHdrCode)
s CppHdrCode (Permanence CppHdrCode)
p)

  docInOutMethod :: String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> DocInOutFunc CppHdrCode
docInOutMethod n :: String
n s :: CppHdrCode (Scope CppHdrCode)
s p :: CppHdrCode (Permanence CppHdrCode)
p = InOutFunc CppHdrCode -> DocInOutFunc CppHdrCode
forall (r :: * -> *).
RenderSym r =>
([SVariable r]
 -> [SVariable r] -> [SVariable r] -> MSBody r -> SMethod r)
-> String
-> [(String, SVariable r)]
-> [(String, SVariable r)]
-> [(String, SVariable r)]
-> MSBody r
-> SMethod r
CP.docInOutFunc (String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> InOutFunc CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> r (Permanence r) -> InOutFunc r
inOutMethod String
n CppHdrCode (Scope CppHdrCode)
s CppHdrCode (Permanence CppHdrCode)
p)

  inOutFunc :: String -> CppHdrCode (Scope CppHdrCode) -> InOutFunc CppHdrCode
inOutFunc n :: String
n s :: CppHdrCode (Scope CppHdrCode)
s = (VSType CppHdrCode
 -> [MSParameter CppHdrCode]
 -> MSBody CppHdrCode
 -> SMethod CppHdrCode)
-> InOutFunc CppHdrCode
cpphInOut (String
-> CppHdrCode (Scope CppHdrCode)
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String
-> r (Scope r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
function String
n CppHdrCode (Scope CppHdrCode)
s)

  docInOutFunc :: String -> CppHdrCode (Scope CppHdrCode) -> DocInOutFunc CppHdrCode
docInOutFunc n :: String
n s :: CppHdrCode (Scope CppHdrCode)
s = InOutFunc CppHdrCode -> DocInOutFunc CppHdrCode
forall (r :: * -> *).
RenderSym r =>
([SVariable r]
 -> [SVariable r] -> [SVariable r] -> MSBody r -> SMethod r)
-> String
-> [(String, SVariable r)]
-> [(String, SVariable r)]
-> [(String, SVariable r)]
-> MSBody r
-> SMethod r
CP.docInOutFunc (String -> CppHdrCode (Scope CppHdrCode) -> InOutFunc CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String -> r (Scope r) -> InOutFunc r
inOutFunc String
n CppHdrCode (Scope CppHdrCode)
s)

instance RenderMethod CppHdrCode where
  intMethod :: Bool
-> String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> MSMthdType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
intMethod _ n :: String
n s :: CppHdrCode (Scope CppHdrCode)
s _ t :: MSMthdType CppHdrCode
t ps :: [MSParameter CppHdrCode]
ps _ = do
    (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ScopeTag -> MethodState -> MethodState
setScope ((Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd ((Doc, ScopeTag) -> ScopeTag) -> (Doc, ScopeTag) -> ScopeTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, ScopeTag) -> (Doc, ScopeTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, ScopeTag)
CppHdrCode (Scope CppHdrCode)
s)) 
    CppHdrCode TypeData
tp <- HdrState MethodState TypeData
MSMthdType CppHdrCode
t
    [CppHdrCode ParamData]
pms <- [HdrState MethodState ParamData]
-> StateT MethodState Identity [CppHdrCode ParamData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [HdrState MethodState ParamData]
[MSParameter CppHdrCode]
ps
    CppHdrCode MethodData -> HdrState MethodState MethodData
forall (m :: * -> *) a. Monad m => a -> m a
return (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
$ ScopeTag -> Doc -> MethodData
mthd ((Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd ((Doc, ScopeTag) -> ScopeTag) -> (Doc, ScopeTag) -> ScopeTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, ScopeTag) -> (Doc, ScopeTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, ScopeTag)
CppHdrCode (Scope CppHdrCode)
s) (Doc -> MethodData) -> Doc -> MethodData
forall a b. (a -> b) -> a -> b
$ String
-> CppHdrCode (Type CppHdrCode)
-> [CppHdrCode (Parameter CppHdrCode)]
-> Doc
forall (r :: * -> *).
RenderSym r =>
String -> r (Type r) -> [r (Parameter r)] -> Doc
cpphMethod String
n CppHdrCode TypeData
CppHdrCode (Type CppHdrCode)
tp [CppHdrCode ParamData]
[CppHdrCode (Parameter CppHdrCode)]
pms
  intFunc :: Bool
-> String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> MSMthdType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
intFunc = Bool
-> String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> MSMthdType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
RenderSym r =>
Bool
-> String
-> r (Scope r)
-> r (Permanence r)
-> MSMthdType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
C.intFunc
  commentedFunc :: MS (CppHdrCode (BlockComment CppHdrCode))
-> SMethod CppHdrCode -> SMethod CppHdrCode
commentedFunc = FileType
-> MS (CppHdrCode (BlockComment CppHdrCode))
-> HdrState MethodState MethodData
-> HdrState MethodState MethodData
forall (r :: * -> *).
(RenderSym r, Monad r) =>
FileType
-> MS (r (BlockComment r))
-> MS (r MethodData)
-> MS (r MethodData)
cppCommentedFunc FileType
Header

  destructor :: [CSStateVar CppHdrCode] -> SMethod CppHdrCode
destructor vars :: [CSStateVar CppHdrCode]
vars = do
    String
n <- StateT MethodState Identity String
getClassName
    CppHdrCode MethodData
m <- String
-> VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
forall (r :: * -> *).
MethodSym r =>
String -> VSType r -> [MSParameter r] -> MSBody r -> SMethod r
pubMethod ('~'Char -> String -> String
forall a. a -> [a] -> [a]
:String
n) VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void [] (CppHdrCode Doc -> HdrState MethodState Doc
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> CppHdrCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty)) :: SMethod CppHdrCode
    [CppHdrCode StateVarData]
vs <- (HdrState ClassState StateVarData
 -> StateT MethodState Identity (CppHdrCode StateVarData))
-> [HdrState ClassState StateVarData]
-> StateT MethodState Identity [CppHdrCode StateVarData]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (LensLike'
  (Zoomed (StateT ClassState Identity) (CppHdrCode StateVarData))
  MethodState
  ClassState
-> HdrState ClassState StateVarData
-> StateT MethodState Identity (CppHdrCode StateVarData)
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) (CppHdrCode StateVarData))
  MethodState
  ClassState
Lens' MethodState ClassState
lensMStoCS) [HdrState ClassState StateVarData]
[CSStateVar CppHdrCode]
vars
    CppHdrCode MethodData -> HdrState MethodState MethodData
forall (m :: * -> *) a. Monad m => a -> m a
return (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
$ ScopeTag -> Doc -> MethodData
mthd ScopeTag
Pub (Doc -> Doc -> Doc
emptyIfEmpty 
      ([Doc] -> Doc
vcat ((CppHdrCode StateVarData -> Doc)
-> [CppHdrCode StateVarData] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode (Doc, Terminator) -> Doc
forall (r :: * -> *). StatementElim r => r (Statement r) -> Doc
RC.statement (CppHdrCode (Doc, Terminator) -> Doc)
-> (CppHdrCode StateVarData -> CppHdrCode (Doc, Terminator))
-> CppHdrCode StateVarData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StateVarData -> (Doc, Terminator))
-> CppHdrCode StateVarData -> CppHdrCode (Doc, Terminator)
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue StateVarData -> (Doc, Terminator)
destructSts) [CppHdrCode StateVarData]
vs)) (CppHdrCode (Method CppHdrCode) -> Doc
forall (r :: * -> *). MethodElim r => r (Method r) -> Doc
RC.method CppHdrCode (Method CppHdrCode)
CppHdrCode MethodData
m))
      
  mthdFromData :: ScopeTag -> Doc -> SMethod CppHdrCode
mthdFromData s :: ScopeTag
s d :: Doc
d = CppHdrCode MethodData -> SMethod CppHdrCode
forall a s. a -> State s a
toState (CppHdrCode MethodData -> SMethod CppHdrCode)
-> CppHdrCode MethodData -> SMethod CppHdrCode
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
$ ScopeTag -> Doc -> MethodData
mthd ScopeTag
s Doc
d
  
instance MethodElim CppHdrCode where
  method :: CppHdrCode (Method CppHdrCode) -> 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 where
  type StateVar CppHdrCode = StateVarData
  stateVar :: CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> SVariable CppHdrCode
-> CSStateVar CppHdrCode
stateVar s :: CppHdrCode (Scope CppHdrCode)
s p :: CppHdrCode (Permanence CppHdrCode)
p v :: SVariable CppHdrCode
v = do
    CppHdrCode (Doc, Terminator)
dec <- LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppHdrCode (Doc, Terminator)))
  ClassState
  MethodState
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
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 (Doc, Terminator)))
  ClassState
  MethodState
Lens' ClassState MethodState
lensCStoMS (HdrState MethodState (Doc, Terminator)
 -> StateT ClassState Identity (CppHdrCode (Doc, Terminator)))
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
forall a b. (a -> b) -> a -> b
$ MSStatement CppHdrCode -> HdrState MethodState (Doc, Terminator)
forall (r :: * -> *).
RenderStatement r =>
MSStatement r -> MSStatement r
stmt (MSStatement CppHdrCode -> HdrState MethodState (Doc, Terminator))
-> MSStatement CppHdrCode -> HdrState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Permanence CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> Doc
-> SVariable CppHdrCode
-> MSStatement CppHdrCode
forall (r :: * -> *).
RenderSym r =>
r (Permanence r)
-> r (Permanence r) -> Doc -> SVariable r -> MSStatement r
C.varDec CppHdrCode (Permanence CppHdrCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
static CppHdrCode (Permanence CppHdrCode)
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
dynamic (String -> Doc
text "&") SVariable CppHdrCode
v
    CppHdrCode (Doc, Terminator)
emptS <- LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppHdrCode (Doc, Terminator)))
  ClassState
  MethodState
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
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 (Doc, Terminator)))
  ClassState
  MethodState
Lens' ClassState MethodState
lensCStoMS HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
    CppHdrCode StateVarData -> HdrState ClassState StateVarData
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode StateVarData -> HdrState ClassState StateVarData)
-> CppHdrCode StateVarData -> HdrState ClassState StateVarData
forall a b. (a -> b) -> a -> b
$ (ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData)
-> CppHdrCode ScopeTag
-> CppHdrCode Doc
-> CppHdrCode (Doc, Terminator)
-> CppHdrCode StateVarData
forall (r :: * -> *) a b c d.
Applicative r =>
(a -> b -> c -> d) -> r a -> r b -> r c -> r d
on3CodeValues ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData
svd (((Doc, ScopeTag) -> ScopeTag)
-> CppHdrCode (Doc, ScopeTag) -> CppHdrCode ScopeTag
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd CppHdrCode (Doc, ScopeTag)
CppHdrCode (Scope CppHdrCode)
s)
      (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 -> Doc -> Doc -> Doc
R.stateVar Doc
empty (CppHdrCode (Permanence CppHdrCode) -> Doc
forall (r :: * -> *). PermElim r => r (Permanence r) -> Doc
RC.perm CppHdrCode (Permanence CppHdrCode)
p) (CppHdrCode (Statement CppHdrCode) -> Doc
forall (r :: * -> *). StatementElim r => r (Statement r) -> Doc
RC.statement CppHdrCode (Doc, Terminator)
CppHdrCode (Statement CppHdrCode)
dec)) CppHdrCode (Doc, Terminator)
emptS
  stateVarDef :: CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Permanence CppHdrCode)
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> CSStateVar CppHdrCode
stateVarDef s :: CppHdrCode (Scope CppHdrCode)
s p :: CppHdrCode (Permanence CppHdrCode)
p vr :: SVariable CppHdrCode
vr vl :: SValue CppHdrCode
vl = (Doc -> CppHdrCode (Doc, Terminator) -> CppHdrCode StateVarData)
-> State ClassState Doc
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
-> HdrState ClassState StateVarData
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues (((Doc, Terminator) -> StateVarData)
-> CppHdrCode (Doc, Terminator) -> CppHdrCode StateVarData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (((Doc, Terminator) -> StateVarData)
 -> CppHdrCode (Doc, Terminator) -> CppHdrCode StateVarData)
-> (Doc -> (Doc, Terminator) -> StateVarData)
-> Doc
-> CppHdrCode (Doc, Terminator)
-> CppHdrCode StateVarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData
svd ((Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd ((Doc, ScopeTag) -> ScopeTag) -> (Doc, ScopeTag) -> ScopeTag
forall a b. (a -> b) -> a -> b
$ CppHdrCode (Doc, ScopeTag) -> (Doc, ScopeTag)
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode (Doc, ScopeTag)
CppHdrCode (Scope CppHdrCode)
s))
    (Doc
-> CppHdrCode (Permanence CppHdrCode)
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> State ClassState Doc
forall (r :: * -> *).
RenderSym r =>
Doc
-> r (Permanence r)
-> SVariable r
-> SValue r
-> State ClassState Doc
cpphStateVarDef Doc
empty CppHdrCode (Permanence CppHdrCode)
p SVariable CppHdrCode
vr SValue CppHdrCode
vl) (LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppHdrCode (Doc, Terminator)))
  ClassState
  MethodState
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
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 (Doc, Terminator)))
  ClassState
  MethodState
Lens' ClassState MethodState
lensCStoMS HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt)
  constVar :: CppHdrCode (Scope CppHdrCode)
-> SVariable CppHdrCode
-> SValue CppHdrCode
-> CSStateVar CppHdrCode
constVar s :: CppHdrCode (Scope CppHdrCode)
s vr :: SVariable CppHdrCode
vr _ = (CppHdrCode VarData
 -> CppHdrCode (Doc, Terminator) -> CppHdrCode StateVarData)
-> State ClassState (CppHdrCode VarData)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
-> HdrState ClassState StateVarData
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData)
-> CppHdrCode ScopeTag
-> CppHdrCode Doc
-> CppHdrCode (Doc, Terminator)
-> CppHdrCode StateVarData
forall (r :: * -> *) a b c d.
Applicative r =>
(a -> b -> c -> d) -> r a -> r b -> r c -> r d
on3CodeValues ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData
svd (((Doc, ScopeTag) -> ScopeTag)
-> CppHdrCode (Doc, ScopeTag) -> CppHdrCode ScopeTag
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd CppHdrCode (Doc, ScopeTag)
CppHdrCode (Scope CppHdrCode)
s) (CppHdrCode Doc
 -> CppHdrCode (Doc, Terminator) -> CppHdrCode StateVarData)
-> (CppHdrCode VarData -> CppHdrCode Doc)
-> CppHdrCode VarData
-> CppHdrCode (Doc, Terminator)
-> CppHdrCode StateVarData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 
    (Doc -> VarData -> Doc)
-> CppHdrCode Doc -> CppHdrCode VarData -> CppHdrCode Doc
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (Doc -> Doc -> Doc -> VarData -> Doc
R.constVar Doc
empty Doc
endStatement) (BindData -> Doc
bindDoc (BindData -> Doc) -> CppHdrCode BindData -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
<$> CppHdrCode BindData
forall (r :: * -> *). PermanenceSym r => r (Permanence r)
static))
    (LensLike'
  (Zoomed (StateT ValueState Identity) (CppHdrCode VarData))
  ClassState
  ValueState
-> HdrState ValueState VarData
-> State ClassState (CppHdrCode VarData)
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 VarData))
  ClassState
  ValueState
Lens' ClassState ValueState
lensCStoVS HdrState ValueState VarData
SVariable CppHdrCode
vr) (LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppHdrCode (Doc, Terminator)))
  ClassState
  MethodState
-> HdrState MethodState (Doc, Terminator)
-> StateT ClassState Identity (CppHdrCode (Doc, Terminator))
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 (Doc, Terminator)))
  ClassState
  MethodState
Lens' ClassState MethodState
lensCStoMS HdrState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt)
  
instance StateVarElim CppHdrCode where
  stateVar :: CppHdrCode (StateVar CppHdrCode) -> 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 where
  type Class CppHdrCode = Doc
  buildClass :: Maybe String
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
buildClass = Maybe String
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
forall (r :: * -> *).
RenderSym r =>
Maybe String -> [CSStateVar r] -> [SMethod r] -> SClass r
G.buildClass
  extraClass :: String
-> Maybe String
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
extraClass = String
-> Maybe String
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> Maybe String -> [CSStateVar r] -> [SMethod r] -> SClass r
CP.extraClass
  implementingClass :: String
-> [String]
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
implementingClass = String
-> [String]
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String -> [String] -> [CSStateVar r] -> [SMethod r] -> SClass r
G.implementingClass

  docClass :: String -> SClass CppHdrCode -> SClass CppHdrCode
docClass = String -> SClass CppHdrCode -> SClass CppHdrCode
forall (r :: * -> *). RenderSym r => String -> SClass r -> SClass r
CP.doxClass

instance RenderClass CppHdrCode where
  intClass :: String
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode Doc
-> [CSStateVar CppHdrCode]
-> [SMethod CppHdrCode]
-> SClass CppHdrCode
intClass n :: String
n _ i :: CppHdrCode Doc
i vs :: [CSStateVar CppHdrCode]
vs mths :: [SMethod CppHdrCode]
mths = do
    (ClassState -> ClassState) -> StateT ClassState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ClassState -> ClassState
setClassName String
n)
    [CppHdrCode StateVarData]
vars <- [HdrState ClassState StateVarData]
-> StateT ClassState Identity [CppHdrCode StateVarData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [HdrState ClassState StateVarData]
[CSStateVar CppHdrCode]
vs
    [CppHdrCode MethodData]
funcs <- [StateT ClassState Identity (CppHdrCode MethodData)]
-> StateT ClassState Identity [CppHdrCode MethodData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [StateT ClassState Identity (CppHdrCode MethodData)]
fs
    CppHdrCode Doc -> HdrState ClassState Doc
forall (m :: * -> *) a. Monad m => a -> m a
return (CppHdrCode Doc -> HdrState ClassState Doc)
-> CppHdrCode Doc -> HdrState ClassState Doc
forall a b. (a -> b) -> a -> b
$ String
-> CppHdrCode Doc
-> [CppHdrCode (StateVar CppHdrCode)]
-> [CppHdrCode (Method CppHdrCode)]
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Class CppHdrCode)
cpphClass String
n CppHdrCode Doc
i [CppHdrCode StateVarData]
[CppHdrCode (StateVar CppHdrCode)]
vars [CppHdrCode (Method CppHdrCode)]
[CppHdrCode MethodData]
funcs CppHdrCode (Scope CppHdrCode)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public CppHdrCode (Scope CppHdrCode)
forall (r :: * -> *). ScopeSym r => r (Scope r)
private
    where fs :: [StateT ClassState Identity (CppHdrCode MethodData)]
fs = (HdrState MethodState MethodData
 -> StateT ClassState Identity (CppHdrCode MethodData))
-> [HdrState MethodState MethodData]
-> [StateT ClassState Identity (CppHdrCode MethodData)]
forall a b. (a -> b) -> [a] -> [b]
map (LensLike'
  (Zoomed (StateT MethodState Identity) (CppHdrCode MethodData))
  ClassState
  MethodState
-> HdrState MethodState MethodData
-> StateT ClassState Identity (CppHdrCode MethodData)
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
Lens' ClassState MethodState
lensCStoMS) ([HdrState MethodState MethodData]
 -> [StateT ClassState Identity (CppHdrCode MethodData)])
-> [HdrState MethodState MethodData]
-> [StateT ClassState Identity (CppHdrCode MethodData)]
forall a b. (a -> b) -> a -> b
$ [SMethod CppHdrCode]
[HdrState MethodState MethodData]
mths [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
-> [HdrState MethodState MethodData]
forall a. [a] -> [a] -> [a]
++ [[CSStateVar CppHdrCode] -> SMethod CppHdrCode
forall (r :: * -> *). RenderMethod r => [CSStateVar r] -> SMethod r
destructor [CSStateVar CppHdrCode]
vs]

  inherit :: Maybe String -> CppHdrCode Doc
inherit n :: Maybe String
n = ((Doc, ScopeTag) -> Doc)
-> CppHdrCode (Doc, ScopeTag) -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Maybe String -> Doc -> Doc
cppInherit Maybe String
n (Doc -> Doc) -> ((Doc, ScopeTag) -> Doc) -> (Doc, ScopeTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, ScopeTag) -> Doc
forall a b. (a, b) -> a
fst) CppHdrCode (Doc, ScopeTag)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public
  implements :: [String] -> CppHdrCode Doc
implements is :: [String]
is = ((Doc, ScopeTag) -> Doc)
-> CppHdrCode (Doc, ScopeTag) -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((\p :: Doc
p -> Doc
colon Doc -> Doc -> Doc
<+> [Doc] -> Doc
hcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((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]
is)) 
    (Doc -> Doc) -> ((Doc, ScopeTag) -> Doc) -> (Doc, ScopeTag) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Doc, ScopeTag) -> Doc
forall a b. (a, b) -> a
fst) CppHdrCode (Doc, ScopeTag)
forall (r :: * -> *). ScopeSym r => r (Scope r)
public

  commentedClass :: CS (CppHdrCode (BlockComment CppHdrCode))
-> SClass CppHdrCode -> SClass CppHdrCode
commentedClass = CS (CppHdrCode (BlockComment CppHdrCode))
-> SClass CppHdrCode -> SClass CppHdrCode
forall (r :: * -> *).
(RenderSym r, Monad r) =>
CS (r (BlockComment r)) -> SClass r -> CS (r Doc)
G.commentedClass
  
instance ClassElim CppHdrCode where
  class' :: CppHdrCode (Class CppHdrCode) -> Doc
class' = CppHdrCode (Class CppHdrCode) -> Doc
forall a. CppHdrCode a -> a
unCPPHC

instance ModuleSym CppHdrCode where
  type Module CppHdrCode = ModData
  buildModule :: String
-> [String]
-> [SMethod CppHdrCode]
-> [SClass CppHdrCode]
-> FSModule CppHdrCode
buildModule n :: String
n is :: [String]
is = String
-> FS Doc
-> FS Doc
-> FS Doc
-> [SMethod CppHdrCode]
-> [SClass CppHdrCode]
-> FSModule CppHdrCode
forall (r :: * -> *).
RenderSym r =>
String
-> FS Doc
-> FS Doc
-> FS Doc
-> [SMethod r]
-> [SClass r]
-> FSModule r
CP.buildModule String
n (do
    [String]
ds <- FS [String]
getHeaderDefines
    [String]
lis <- FS [String]
getHeaderLangImports
    [String]
libis <- FS [String]
getHeaderLibImports
    [String]
mis <- FS [String]
getHeaderModImports
    [String]
us <- FS [String]
getHeaderUsing
    Doc -> FS Doc
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> FS Doc) -> Doc -> FS Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vibcat [
      [Doc] -> Doc
vcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((Doc
define Doc -> Doc -> Doc
<+>) (Doc -> Doc) -> (String -> Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Doc
text) [String]
ds),
      [Doc] -> Doc
vcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode Doc -> Doc
forall (r :: * -> *). ImportElim r => r (Import r) -> Doc
RC.import' (CppHdrCode Doc -> Doc)
-> (String -> CppHdrCode Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> CppHdrCode Doc
String -> CppHdrCode (Import CppHdrCode)
li) [String]
lis),
      [Doc] -> Doc
vcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (CppHdrCode Doc -> Doc
forall (r :: * -> *). ImportElim r => r (Import r) -> Doc
RC.import' (CppHdrCode Doc -> Doc)
-> (String -> CppHdrCode Doc) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> CppHdrCode Doc
String -> CppHdrCode (Import CppHdrCode)
mi) ([String] -> [String]
forall a. Ord a => [a] -> [a]
sort ([String]
is [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
libis) [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
mis)),
      [Doc] -> Doc
vcat ((String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (String -> Maybe String -> Doc
usingNameSpace String
std (Maybe String -> Doc) -> (String -> Maybe String) -> String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Maybe String
forall a. a -> Maybe a
Just) [String]
us)]) 
    (Doc -> FS Doc
forall (m :: * -> *) a. Monad m => a -> m a
return Doc
empty) (Doc -> FS Doc
forall (m :: * -> *) a. Monad m => a -> m a
return Doc
empty)
    where mi, li :: Label -> CppHdrCode (Import CppHdrCode)
          mi :: String -> CppHdrCode (Import CppHdrCode)
mi = String -> CppHdrCode (Import CppHdrCode)
forall (r :: * -> *). ImportSym r => String -> r (Import r)
modImport
          li :: String -> CppHdrCode (Import CppHdrCode)
li = String -> CppHdrCode (Import CppHdrCode)
forall (r :: * -> *). ImportSym r => String -> r (Import r)
langImport

instance RenderMod CppHdrCode where
  modFromData :: String -> FS Doc -> FSModule CppHdrCode
modFromData n :: String
n = String
-> (Doc -> CppHdrCode (Module CppHdrCode))
-> FS Doc
-> FSModule CppHdrCode
forall (r :: * -> *).
String -> (Doc -> r (Module r)) -> FS Doc -> FSModule r
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 (Module CppHdrCode) -> CppHdrCode (Module CppHdrCode)
updateModuleDoc f :: Doc -> Doc
f = (ModData -> ModData) -> CppHdrCode ModData -> CppHdrCode ModData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((Doc -> Doc) -> ModData -> ModData
updateMod Doc -> Doc
f)
  
instance ModuleElim CppHdrCode where
  module' :: CppHdrCode (Module CppHdrCode) -> 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
  type BlockComment CppHdrCode = Doc
  blockComment :: [String] -> CppHdrCode (BlockComment CppHdrCode)
blockComment lns :: [String]
lns = Doc -> CppHdrCode (BlockComment CppHdrCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppHdrCode (BlockComment CppHdrCode))
-> Doc -> CppHdrCode (BlockComment CppHdrCode)
forall a b. (a -> b) -> a -> b
$ [String] -> Doc -> Doc -> Doc
R.blockCmt [String]
lns Doc
blockCmtStart Doc
blockCmtEnd
  docComment :: State a [String] -> State a (CppHdrCode (BlockComment CppHdrCode))
docComment = ([String] -> CppHdrCode Doc)
-> State a [String] -> State a (CppHdrCode Doc)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (\lns :: [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 (BlockComment CppHdrCode) -> Doc
blockComment' = CppHdrCode (BlockComment CppHdrCode) -> Doc
forall a. CppHdrCode a -> a
unCPPHC

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

getParam :: (RenderSym r) => SVariable r -> MSParameter r
getParam :: SVariable r -> MSParameter r
getParam v :: SVariable r
v = LensLike'
  (Zoomed (StateT ValueState Identity) (r (Variable r)))
  MethodState
  ValueState
-> SVariable r -> StateT MethodState Identity (r (Variable r))
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 (Variable r)))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SVariable r
v StateT MethodState Identity (r (Variable r))
-> (r (Variable r) -> MSParameter r) -> MSParameter r
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\v' :: r (Variable r)
v' -> CodeType -> SVariable r -> MSParameter r
forall (r :: * -> *).
ParameterSym r =>
CodeType -> VS (r (Variable r)) -> MS (r (Parameter r))
getParamFunc ((r (Type r) -> CodeType
forall (r :: * -> *). TypeElim r => r (Type r) -> CodeType
getType (r (Type r) -> CodeType)
-> (r (Variable r) -> r (Type r)) -> r (Variable r) -> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 
  r (Variable r) -> r (Type r)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType) r (Variable r)
v') SVariable r
v)
  where getParamFunc :: CodeType -> VS (r (Variable r)) -> MS (r (Parameter r))
getParamFunc (List _) = VS (r (Variable r)) -> MS (r (Parameter r))
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
pointerParam
        getParamFunc (Object _) = VS (r (Variable r)) -> MS (r (Parameter r))
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
pointerParam
        getParamFunc _ = VS (r (Variable r)) -> MS (r (Parameter r))
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
param
 
data MethodData = MthD {MethodData -> ScopeTag
getMthdScp :: ScopeTag, MethodData -> Doc
mthdDoc :: Doc}

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

addAlgorithmImport :: MS a -> MS a 
addAlgorithmImport :: MS a -> MS a
addAlgorithmImport v :: 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 :: VS a -> VS a
addAlgorithmImportVS v :: 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 :: a -> VS a
addFStreamImport = (ValueState -> ValueState) -> a -> VS a
forall s a. (s -> s) -> a -> State s a
modifyReturn (String -> ValueState -> ValueState
addLangImportVS String
fstream)

addIOStreamImport :: VS a -> VS a
addIOStreamImport :: VS a -> VS a
addIOStreamImport v :: 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 :: VS a -> VS a
addMathHImport v :: 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 :: MS a -> MS a
addLimitsImport v :: 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

setIterVar :: RenderSym r=> SVariable r -> SValue r
setIterVar :: SVariable r -> SValue r
setIterVar = SVariable r -> SValue r
forall (r :: * -> *). RenderSym r => SVariable r -> SValue r
G.valueOf

iterator :: RenderSym r => VSType r -> VSType r
iterator :: VSType r -> VSType r
iterator t :: VSType r
t = do 
    (ValueState -> ValueState) -> StateT ValueState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (String -> ValueState -> ValueState
addLangImportVS String
cppIterator)
    VSType r -> VSType r
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
cppIterType (VSType r -> VSType r) -> VSType r -> VSType r
forall a b. (a -> b) -> a -> b
$ VSType r -> VSType r
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
listType VSType r
t

iterBegin :: SValue CppSrcCode -> SValue CppSrcCode
iterBegin :: SValue CppSrcCode -> SValue CppSrcCode
iterBegin v :: SValue CppSrcCode
v = SValue CppSrcCode
v SValue CppSrcCode -> VSFunction CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
FunctionSym r =>
SValue r -> VSFunction r -> SValue r
$. VSType CppSrcCode -> VSFunction CppSrcCode
cppIterBeginFunc (VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
G.listInnerType (VSType CppSrcCode -> VSType CppSrcCode)
-> VSType CppSrcCode -> VSType CppSrcCode
forall a b. (a -> b) -> a -> b
$ (CppSrcCode ValData -> CppSrcCode TypeData)
-> SrcState ValueState ValData
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode ValData -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r (Value r) -> r (Type r)
valueType SrcState ValueState ValData
SValue CppSrcCode
v)

iterEnd :: SValue CppSrcCode -> SValue CppSrcCode
iterEnd :: SValue CppSrcCode -> SValue CppSrcCode
iterEnd v :: SValue CppSrcCode
v = SValue CppSrcCode
v SValue CppSrcCode -> VSFunction CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
FunctionSym r =>
SValue r -> VSFunction r -> SValue r
$. VSType CppSrcCode -> VSFunction CppSrcCode
cppIterEndFunc (VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
G.listInnerType (VSType CppSrcCode -> VSType CppSrcCode)
-> VSType CppSrcCode -> VSType CppSrcCode
forall a b. (a -> b) -> a -> b
$ (CppSrcCode ValData -> CppSrcCode TypeData)
-> SrcState ValueState ValData
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode ValData -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r (Value r) -> r (Type r)
valueType SrcState ValueState ValData
SValue CppSrcCode
v)

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

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

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

nmSpcAccess :: String -> String -> String
nmSpcAccess :: String -> String -> String
nmSpcAccess ns :: String
ns e :: String
e = String
ns String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
nmSpc String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
e 

nmSpcAccess' :: Doc -> Doc -> Doc
nmSpcAccess' :: Doc -> Doc -> Doc
nmSpcAccess' ns :: Doc
ns e :: 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 = "Controls the flow of the program" 
argcDesc :: String
argcDesc = "Number of command-line arguments"
argvDesc :: String
argvDesc = "List of command-line arguments"
mainReturnDesc :: String
mainReturnDesc = "exit code"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

getLineFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
getLineFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
getLineFunc f :: SValue CppSrcCode
f v :: SValue CppSrcCode
v = String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp String
cppGetLine VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
string [SValue CppSrcCode
f, SValue CppSrcCode
v]

getLine3ArgFunc :: SValue CppSrcCode -> SValue CppSrcCode -> Char -> 
  SValue CppSrcCode
getLine3ArgFunc :: SValue CppSrcCode -> SValue CppSrcCode -> Char -> SValue CppSrcCode
getLine3ArgFunc s :: SValue CppSrcCode
s v :: SValue CppSrcCode
v d :: Char
d = String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp String
cppGetLine VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
string [SValue CppSrcCode
s, SValue CppSrcCode
v, Char -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Char -> SValue r
litChar Char
d]

clearFunc :: VSFunction CppSrcCode
clearFunc :: VSFunction CppSrcCode
clearFunc = String
-> VSType CppSrcCode
-> [SValue CppSrcCode]
-> VSFunction CppSrcCode
forall (r :: * -> *).
FunctionSym r =>
String -> VSType r -> [SValue r] -> VSFunction r
func String
cppClear VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
void []

strFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
strFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
strFunc v :: SValue CppSrcCode
v s :: SValue CppSrcCode
s = VSType CppSrcCode
-> SValue CppSrcCode
-> String
-> [SValue CppSrcCode]
-> SValue CppSrcCode
forall (r :: * -> *).
InternalValueExp r =>
VSType r -> SValue r -> String -> [SValue r] -> SValue r
objMethodCall VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
string SValue CppSrcCode
v String
cppStr [SValue CppSrcCode
s]

cppIndexFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
cppIndexFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
cppIndexFunc l :: SValue CppSrcCode
l v :: SValue CppSrcCode
v = String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp String
cppIndex VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
int [SValue CppSrcCode -> SValue CppSrcCode
iterBegin SValue CppSrcCode
l, SValue CppSrcCode -> SValue CppSrcCode
iterEnd SValue CppSrcCode
l, SValue CppSrcCode
v]

cppListAddFunc :: SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode 
  -> VSFunction CppSrcCode
cppListAddFunc :: SValue CppSrcCode
-> SValue CppSrcCode -> SValue CppSrcCode -> VSFunction CppSrcCode
cppListAddFunc l :: SValue CppSrcCode
l i :: SValue CppSrcCode
i v :: SValue CppSrcCode
v = String
-> VSType CppSrcCode
-> [SValue CppSrcCode]
-> VSFunction CppSrcCode
forall (r :: * -> *).
FunctionSym r =>
String -> VSType r -> [SValue r] -> VSFunction r
func String
cppListAdd ((CppSrcCode ValData -> CppSrcCode TypeData)
-> SrcState ValueState ValData
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode ValData -> CppSrcCode TypeData
forall (r :: * -> *). ValueSym r => r (Value r) -> r (Type r)
valueType SrcState ValueState ValData
SValue CppSrcCode
l) 
    [SValue CppSrcCode -> SValue CppSrcCode
iterBegin SValue CppSrcCode
l SValue CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
#+ SValue CppSrcCode
i, SValue CppSrcCode
v]

cppIterBeginFunc :: VSType CppSrcCode -> VSFunction CppSrcCode
cppIterBeginFunc :: VSType CppSrcCode -> VSFunction CppSrcCode
cppIterBeginFunc t :: VSType CppSrcCode
t = String
-> VSType CppSrcCode
-> [SValue CppSrcCode]
-> VSFunction CppSrcCode
forall (r :: * -> *).
FunctionSym r =>
String -> VSType r -> [SValue r] -> VSFunction r
func String
cppIterBegin (VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
iterator VSType CppSrcCode
t) []

cppIterEndFunc :: VSType CppSrcCode -> VSFunction CppSrcCode
cppIterEndFunc :: VSType CppSrcCode -> VSFunction CppSrcCode
cppIterEndFunc t :: VSType CppSrcCode
t = String
-> VSType CppSrcCode
-> [SValue CppSrcCode]
-> VSFunction CppSrcCode
forall (r :: * -> *).
FunctionSym r =>
String -> VSType r -> [SValue r] -> VSFunction r
func String
cppIterEnd (VSType CppSrcCode -> VSType CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> VSType r
iterator VSType CppSrcCode
t) []

cppListDecDef :: (RenderSym r) => ([r (Value r)] -> Doc) -> SVariable r -> 
  [SValue r] -> MSStatement r
cppListDecDef :: ([r (Value r)] -> Doc)
-> SVariable r -> [SValue r] -> MSStatement r
cppListDecDef f :: [r (Value r)] -> Doc
f v :: SVariable r
v vls :: [SValue r]
vls = do 
  r (Statement r)
vdc <- SVariable r -> MSStatement r
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec SVariable r
v
  [r (Value r)]
vs <- LensLike'
  (Zoomed (StateT ValueState Identity) [r (Value r)])
  MethodState
  ValueState
-> StateT ValueState Identity [r (Value r)]
-> StateT MethodState Identity [r (Value r)]
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 (Value r)])
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (StateT ValueState Identity [r (Value r)]
 -> StateT MethodState Identity [r (Value r)])
-> StateT ValueState Identity [r (Value r)]
-> StateT MethodState Identity [r (Value r)]
forall a b. (a -> b) -> a -> b
$ [SValue r] -> StateT ValueState Identity [r (Value r)]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [SValue r]
vls
  Doc -> MSStatement r
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmt (r (Statement r) -> Doc
forall (r :: * -> *). StatementElim r => r (Statement r) -> Doc
RC.statement r (Statement r)
vdc Doc -> Doc -> Doc
<> [r (Value r)] -> Doc
f [r (Value r)]
vs)

cpphtop :: ModData -> Doc
cpphtop :: ModData -> Doc
cpphtop m :: 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 n :: String
n (Just m :: 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 n :: String
n 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 n :: Maybe String
n pub :: 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 :: (RenderSym r) => VSType r
cppBoolType :: VSType r
cppBoolType = CodeType -> String -> Doc -> VSType r
forall (r :: * -> *).
RenderType r =>
CodeType -> String -> Doc -> VSType r
typeFromData CodeType
Boolean String
cppBool (String -> Doc
text String
cppBool)

cppInfileType :: (RenderSym r) => VSType r
cppInfileType :: VSType r
cppInfileType = do 
  r (Type r)
t <- CodeType -> String -> Doc -> VSType r
forall (r :: * -> *).
RenderType r =>
CodeType -> String -> Doc -> VSType r
typeFromData CodeType
InFile String
cppInfile (String -> Doc
text String
cppInfile)
  r (Type r) -> VSType r
forall a. a -> VS a
addFStreamImport r (Type r)
t

cppOutfileType :: (RenderSym r) => VSType r
cppOutfileType :: VSType r
cppOutfileType = do 
  r (Type r)
t <- CodeType -> String -> Doc -> VSType r
forall (r :: * -> *).
RenderType r =>
CodeType -> String -> Doc -> VSType r
typeFromData CodeType
OutFile String
cppOutfile (String -> Doc
text String
cppOutfile)
  r (Type r) -> VSType r
forall a. a -> VS a
addFStreamImport r (Type r)
t

cppArrayType :: (RenderSym r) => VSType r -> VSType r
cppArrayType :: VSType r -> VSType r
cppArrayType t' :: VSType r
t' = do 
  r (Type r)
t <- VSType r
t' 
  CodeType -> String -> Doc -> VSType r
forall (r :: * -> *).
RenderType r =>
CodeType -> String -> Doc -> VSType r
typeFromData (CodeType -> CodeType
Array (r (Type r) -> CodeType
forall (r :: * -> *). TypeElim r => r (Type r) -> CodeType
getType r (Type r)
t)) (r (Type r) -> String
forall (r :: * -> *). TypeElim r => r (Type r) -> String
getTypeString r (Type r)
t) (r (Type r) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' r (Type r)
t)

cppIterType :: (RenderSym r) => VSType r -> VSType r
cppIterType :: VSType r -> VSType r
cppIterType t' :: VSType r
t' = do 
  r (Type r)
t <- VSType r
t' 
  CodeType -> String -> Doc -> VSType r
forall (r :: * -> *).
RenderType r =>
CodeType -> String -> Doc -> VSType r
typeFromData (r (Type r) -> CodeType
forall (r :: * -> *). TypeElim r => r (Type r) -> CodeType
getType r (Type r)
t) 
    (r (Type r) -> String
forall (r :: * -> *). TypeElim r => r (Type r) -> String
getTypeString r (Type r)
t String -> String -> String
`nmSpcAccess` String
cppIterator) (Doc -> Doc
stdAccess' (r (Type r) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' r (Type r)
t) 
    Doc -> Doc -> Doc
`nmSpcAccess'` String -> Doc
text String
cppIterator)

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

cppLambda :: (RenderSym r) => [r (Variable r)] -> r (Value r) -> Doc
cppLambda :: [r (Variable r)] -> r (Value r) -> Doc
cppLambda ps :: [r (Variable r)]
ps ex :: r (Value r)
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
(<+>) 
  ((r (Variable r) -> Doc) -> [r (Variable r)] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (r (Type r) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' (r (Type r) -> Doc)
-> (r (Variable r) -> r (Type r)) -> r (Variable r) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. r (Variable r) -> r (Type r)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType) [r (Variable r)]
ps) ((r (Variable r) -> Doc) -> [r (Variable r)] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map r (Variable r) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable [r (Variable r)]
ps)) Doc -> Doc -> Doc
<+> Doc
cppLambdaSep Doc -> Doc -> Doc
<+> 
  Doc
bodyStart Doc -> Doc -> Doc
<> Doc
returnLabel Doc -> Doc -> Doc
<+> r (Value r) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value r (Value r)
ex Doc -> Doc -> Doc
<> Doc
endStatement Doc -> Doc -> Doc
<> Doc
bodyEnd

stodFunc :: SValue CppSrcCode -> SValue CppSrcCode
stodFunc :: SValue CppSrcCode -> SValue CppSrcCode
stodFunc v :: SValue CppSrcCode
v = String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp String
stod VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
double [SValue CppSrcCode
v]

stofFunc :: SValue CppSrcCode -> SValue CppSrcCode
stofFunc :: SValue CppSrcCode -> SValue CppSrcCode
stofFunc v :: SValue CppSrcCode
v = String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp String
stof VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
float [SValue CppSrcCode
v]

ignoreFunc :: Char -> SValue CppSrcCode -> SValue CppSrcCode
ignoreFunc :: Char -> SValue CppSrcCode -> SValue CppSrcCode
ignoreFunc sep :: Char
sep inFn :: SValue CppSrcCode
inFn = VSType CppSrcCode
-> SValue CppSrcCode
-> String
-> [SValue CppSrcCode]
-> SValue CppSrcCode
forall (r :: * -> *).
InternalValueExp r =>
VSType r -> SValue r -> String -> [SValue r] -> SValue r
objMethodCall VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
void SValue CppSrcCode
inFn String
cppIgnore [SValue CppSrcCode
maxFunc, Char -> SValue CppSrcCode
forall (r :: * -> *). Literal r => Char -> SValue r
litChar Char
sep]

maxFunc :: SValue CppSrcCode
maxFunc :: SValue CppSrcCode
maxFunc = String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp ((String
numLimits String -> String -> String
`containing` String
streamsize) String -> String -> String
`nmSpcAccess` String
max) VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
int []

cppCast :: VSType CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
cppCast :: VSType CppSrcCode -> SValue CppSrcCode -> SValue CppSrcCode
cppCast = StateT ValueState Identity (SrcState ValueState ValData)
-> SrcState ValueState ValData
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (StateT ValueState Identity (SrcState ValueState ValData)
 -> SrcState ValueState ValData)
-> (State ValueState (CppSrcCode TypeData)
    -> SrcState ValueState ValData
    -> StateT ValueState Identity (SrcState ValueState ValData))
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState ValData
-> SrcState ValueState ValData
forall c d a b. (c -> d) -> (a -> b -> c) -> a -> b -> d
.: (CppSrcCode TypeData
 -> CppSrcCode ValData -> SrcState ValueState ValData)
-> State ValueState (CppSrcCode TypeData)
-> SrcState ValueState ValData
-> StateT ValueState Identity (SrcState ValueState ValData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues (\t :: CppSrcCode TypeData
t v :: CppSrcCode ValData
v -> CodeType
-> CodeType
-> CppSrcCode TypeData
-> CppSrcCode ValData
-> SrcState ValueState ValData
cppCast' (CppSrcCode (Type CppSrcCode) -> CodeType
forall (r :: * -> *). TypeElim r => r (Type r) -> CodeType
getType CppSrcCode TypeData
CppSrcCode (Type CppSrcCode)
t) (CppSrcCode (Type CppSrcCode) -> CodeType
forall (r :: * -> *). TypeElim r => r (Type r) -> CodeType
getType (CppSrcCode (Type CppSrcCode) -> CodeType)
-> CppSrcCode (Type CppSrcCode) -> CodeType
forall a b. (a -> b) -> a -> b
$ 
  CppSrcCode (Value CppSrcCode) -> CppSrcCode (Type CppSrcCode)
forall (r :: * -> *). ValueSym r => r (Value r) -> r (Type r)
valueType CppSrcCode ValData
CppSrcCode (Value CppSrcCode)
v) CppSrcCode TypeData
t CppSrcCode ValData
v)
  where cppCast' :: CodeType
-> CodeType
-> CppSrcCode TypeData
-> CppSrcCode ValData
-> SrcState ValueState ValData
cppCast' Double String _ v :: CppSrcCode ValData
v = SValue CppSrcCode -> SValue CppSrcCode
stodFunc (CppSrcCode ValData -> SrcState ValueState ValData
forall a s. a -> State s a
toState CppSrcCode ValData
v)
        cppCast' Float String _ v :: CppSrcCode ValData
v = SValue CppSrcCode -> SValue CppSrcCode
stofFunc (CppSrcCode ValData -> SrcState ValueState ValData
forall a s. a -> State s a
toState CppSrcCode ValData
v)
        cppCast' _ _ t :: CppSrcCode TypeData
t v :: CppSrcCode ValData
v = VSType CppSrcCode -> Doc -> SValue CppSrcCode
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
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 (Type CppSrcCode) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' 
          CppSrcCode TypeData
CppSrcCode (Type CppSrcCode)
t)) (CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value CppSrcCode ValData
CppSrcCode (Value CppSrcCode)
v))

cppListSetDoc :: Doc -> Doc -> Doc
cppListSetDoc :: Doc -> Doc -> Doc
cppListSetDoc i :: Doc
i v :: Doc
v = Doc
dot Doc -> Doc -> Doc
<> String -> Doc
text String
cppListAccess Doc -> Doc -> Doc
<> Doc -> Doc
parens Doc
i Doc -> Doc -> Doc
<+> Doc
equals Doc -> Doc -> Doc
<+> Doc
v

cppListDecDoc :: (RenderSym r) => r (Value r) -> Doc
cppListDecDoc :: r (Value r) -> Doc
cppListDecDoc n :: r (Value r)
n = Doc -> Doc
parens (r (Value r) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value r (Value r)
n)

cppListDecDefDoc :: (RenderSym r) => [r (Value r)] -> Doc
cppListDecDefDoc :: [r (Value r)] -> Doc
cppListDecDefDoc vs :: [r (Value r)]
vs = Doc -> Doc
braces ([r (Value r)] -> Doc
forall (r :: * -> *). RenderSym r => [r (Value r)] -> Doc
valueList [r (Value r)]
vs)

cppFuncDecDef :: (RenderSym r) => SVariable r -> [SVariable r] -> MSBody r -> 
  MSStatement r
cppFuncDecDef :: SVariable r -> [SVariable r] -> MSBody r -> MSStatement r
cppFuncDecDef v :: SVariable r
v ps :: [SVariable r]
ps bod :: MSBody r
bod = do
  r (Variable r)
vr <- LensLike'
  (Zoomed (StateT ValueState Identity) (r (Variable r)))
  MethodState
  ValueState
-> SVariable r -> StateT MethodState Identity (r (Variable r))
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 (Variable r)))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SVariable r
v
  [r (Variable r)]
pms <- (SVariable r -> StateT MethodState Identity (r (Variable r)))
-> [SVariable r] -> StateT MethodState Identity [r (Variable r)]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (r (Variable r)))
  MethodState
  ValueState
-> SVariable r -> StateT MethodState Identity (r (Variable r))
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 (Variable r)))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS) [SVariable r]
ps
  r (Body r)
b <- MSBody r
bod
  Doc -> MSStatement r
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmt (Doc -> MSStatement r) -> Doc -> MSStatement r
forall a b. (a -> b) -> a -> b
$ r (Type r) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' (r (Variable r) -> r (Type r)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType r (Variable r)
vr) Doc -> Doc -> Doc
<+> r (Variable r) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable r (Variable r)
vr Doc -> Doc -> Doc
<+> Doc
equals Doc -> Doc -> Doc
<+>
    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
(<+>) ((r (Variable r) -> Doc) -> [r (Variable r)] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (r (Type r) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' (r (Type r) -> Doc)
-> (r (Variable r) -> r (Type r)) -> r (Variable r) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. 
    r (Variable r) -> r (Type r)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType) [r (Variable r)]
pms) ((r (Variable r) -> Doc) -> [r (Variable r)] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map r (Variable r) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable [r (Variable r)]
pms)) Doc -> Doc -> Doc
<+> Doc
cppLambdaSep Doc -> Doc -> Doc
<+> Doc
bodyStart Doc -> Doc -> Doc
$$ 
    Doc -> Doc
indent (r (Body r) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body r (Body r)
b) Doc -> Doc -> Doc
$$ Doc
bodyEnd

cppPrint :: (RenderSym r) => Bool -> SValue r -> SValue r -> MSStatement r
cppPrint :: Bool -> SValue r -> SValue r -> MSStatement r
cppPrint newLn :: Bool
newLn pf :: SValue r
pf vl :: SValue r
vl = do
  Doc
e <- LensLike'
  (Zoomed (StateT ValueState Identity) Doc) MethodState ValueState
-> StateT ValueState Identity Doc
-> StateT MethodState Identity Doc
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
Lens' MethodState ValueState
lensMStoVS StateT ValueState Identity Doc
end
  r (Value r)
printFn <- LensLike'
  (Zoomed (StateT ValueState Identity) (r (Value r)))
  MethodState
  ValueState
-> SValue r -> StateT MethodState Identity (r (Value r))
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 (Value r)))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SValue r
pf
  r (Value r)
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (r (Value r)))
  MethodState
  ValueState
-> SValue r -> StateT MethodState Identity (r (Value r))
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 (Value r)))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SValue r
vl
  Doc -> MSStatement r
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmt (Doc -> MSStatement r) -> Doc -> MSStatement r
forall a b. (a -> b) -> a -> b
$ r (Value r) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value r (Value r)
printFn Doc -> Doc -> Doc
<+> Doc
streamL Doc -> Doc -> Doc
<+> r (Value r) -> Doc -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc -> Doc
pars r (Value r)
v (r (Value r) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value r (Value r)
v) Doc -> Doc -> Doc
<+> Doc
e
  where pars :: r (Value r) -> Doc -> Doc
pars v :: r (Value r)
v = if Bool -> (Int -> Bool) -> Maybe Int -> Bool
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Bool
False (Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< 9) (r (Value r) -> Maybe Int
forall (r :: * -> *). ValueElim r => r (Value r) -> Maybe Int
valuePrec r (Value r)
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 (m :: * -> *) a. Monad m => a -> m a
return (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 (m :: * -> *) a. Monad m => a -> m a
return Doc
empty

cppThrowDoc :: (RenderSym r) => r (Value r) -> Doc
cppThrowDoc :: r (Value r) -> Doc
cppThrowDoc errMsg :: r (Value r)
errMsg = Doc
throwLabel Doc -> Doc -> Doc
<> Doc -> Doc
parens (r (Value r) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value r (Value r)
errMsg)

cppTryCatch :: (RenderSym r) => r (Body r) -> r (Body r) -> Doc
cppTryCatch :: r (Body r) -> r (Body r) -> Doc
cppTryCatch tb :: r (Body r)
tb cb :: r (Body r)
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 (Body r) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body r (Body r)
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 (Body r) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body r (Body r)
cb,
  Doc
rbrace]

cppDiscardInput :: Char -> SValue CppSrcCode -> MSStatement CppSrcCode
cppDiscardInput :: Char -> SValue CppSrcCode -> MSStatement CppSrcCode
cppDiscardInput sep :: Char
sep inFn :: SValue CppSrcCode
inFn = SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ Char -> SValue CppSrcCode -> SValue CppSrcCode
ignoreFunc Char
sep SValue CppSrcCode
inFn

cppInput :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
cppInput :: SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
cppInput vr :: SVariable CppSrcCode
vr i :: SValue CppSrcCode
i = SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode
forall a. MS a -> MS a
addAlgorithmImport (SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode)
-> SrcState MethodState (Doc, Terminator) -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a. MS a -> MS a
addLimitsImport (SrcState MethodState (Doc, Terminator)
 -> SrcState MethodState (Doc, Terminator))
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ do
  CppSrcCode VarData
v <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode VarData))
  MethodState
  ValueState
-> SrcState ValueState VarData
-> StateT MethodState Identity (CppSrcCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState VarData
SVariable CppSrcCode
vr
  CppSrcCode ValData
inFn <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode ValData))
  MethodState
  ValueState
-> SrcState ValueState ValData
-> StateT MethodState Identity (CppSrcCode ValData)
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS SrcState ValueState ValData
SValue CppSrcCode
i
  [MSStatement CppSrcCode] -> MSStatement CppSrcCode
forall (r :: * -> *).
StatementSym r =>
[MSStatement r] -> MSStatement r
multi [Doc -> MSStatement CppSrcCode
forall (r :: * -> *). RenderSym r => Doc -> MSStatement r
mkStmt (CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value CppSrcCode ValData
CppSrcCode (Value CppSrcCode)
inFn Doc -> Doc -> Doc
<+> Doc
streamR Doc -> Doc -> Doc
<+> CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
v), 
    SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ Char -> SValue CppSrcCode -> SValue CppSrcCode
ignoreFunc '\n' SValue CppSrcCode
i]

cppOpenFile :: (RenderSym r) => Label -> SVariable r -> SValue r -> MSStatement r
cppOpenFile :: String -> SVariable r -> SValue r -> MSStatement r
cppOpenFile mode :: String
mode f :: SVariable r
f n :: SValue r
n = SValue r -> MSStatement r
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue r -> MSStatement r) -> SValue r -> MSStatement r
forall a b. (a -> b) -> a -> b
$ VSType r -> SValue r -> String -> [SValue r] -> SValue r
forall (r :: * -> *).
InternalValueExp r =>
VSType r -> SValue r -> String -> [SValue r] -> SValue r
objMethodCall VSType r
forall (r :: * -> *). TypeSym r => VSType r
void (SVariable r -> SValue r
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable r
f) String
cppOpen [SValue r
n, 
  VSType r -> Doc -> SValue r
forall (r :: * -> *). RenderSym r => VSType r -> Doc -> SValue r
mkStateVal VSType r
forall (r :: * -> *). TypeSym r => VSType r
void (Doc -> SValue r) -> Doc -> SValue r
forall a b. (a -> b) -> a -> b
$ String -> Doc
text String
mode]

cppPointerParamDoc :: (RenderSym r) => r (Variable r) -> Doc
cppPointerParamDoc :: r (Variable r) -> Doc
cppPointerParamDoc v :: r (Variable r)
v = r (Type r) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' (r (Variable r) -> r (Type r)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType r (Variable r)
v) Doc -> Doc -> Doc
<+> Doc
cppPtr Doc -> Doc -> Doc
<> r (Variable r) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable r (Variable r)
v

cppsMethod :: [Doc] -> Label -> Label -> CppSrcCode (MethodType CppSrcCode) 
  -> [CppSrcCode (Parameter CppSrcCode)] -> CppSrcCode (Body CppSrcCode) -> Doc
cppsMethod :: [Doc]
-> String
-> String
-> CppSrcCode (MethodType CppSrcCode)
-> [CppSrcCode (Parameter CppSrcCode)]
-> CppSrcCode (Body CppSrcCode)
-> Doc
cppsMethod is :: [Doc]
is n :: String
n c :: String
c t :: CppSrcCode (MethodType CppSrcCode)
t ps :: [CppSrcCode (Parameter CppSrcCode)]
ps b :: CppSrcCode (Body CppSrcCode)
b = Doc -> Doc -> Doc
emptyIfEmpty (CppSrcCode (Body CppSrcCode) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body CppSrcCode (Body CppSrcCode)
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 (Parameter CppSrcCode)] -> Doc
forall (r :: * -> *). RenderSym r => [r (Parameter r)] -> Doc
parameterList 
    [CppSrcCode (Parameter CppSrcCode)]
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 (Body CppSrcCode) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body CppSrcCode (Body CppSrcCode)
b),
  Doc
bodyEnd]
  where ttype :: Doc
ttype | String -> Bool
isDtor String
n = Doc
empty
              | Bool
otherwise = CppSrcCode (Type CppSrcCode) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' CppSrcCode (Type CppSrcCode)
CppSrcCode (MethodType CppSrcCode)
t
        initList :: Doc
initList = Doc -> [Doc] -> Doc
hicat Doc
listSep' [Doc]
is

cppConstructor :: [MSParameter CppSrcCode] -> NamedArgs CppSrcCode -> 
  MSBody CppSrcCode -> SMethod CppSrcCode
cppConstructor :: [MSParameter CppSrcCode]
-> NamedArgs CppSrcCode -> MSBody CppSrcCode -> SMethod CppSrcCode
cppConstructor ps :: [MSParameter CppSrcCode]
ps is :: NamedArgs CppSrcCode
is b :: MSBody CppSrcCode
b = StateT MethodState Identity String
getClassName StateT MethodState Identity String
-> (String -> SrcState MethodState MethodData)
-> SrcState MethodState MethodData
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (\n :: 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
$ (\tp :: CppSrcCode TypeData
tp pms :: [CppSrcCode ParamData]
pms ivars :: [CppSrcCode VarData]
ivars ivals :: [CppSrcCode ValData]
ivals 
  bod :: CppSrcCode Doc
bod -> if [(SrcState ValueState VarData, SrcState ValueState ValData)]
-> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [(SrcState ValueState VarData, SrcState ValueState ValData)]
NamedArgs CppSrcCode
is then String
-> [MSParameter CppSrcCode]
-> NamedArgs CppSrcCode
-> MSBody CppSrcCode
-> SMethod CppSrcCode
forall (r :: * -> *).
RenderSym r =>
String
-> [MSParameter r] -> Initializers r -> MSBody r -> SMethod r
CP.constructor String
n [MSParameter CppSrcCode]
ps NamedArgs CppSrcCode
is MSBody CppSrcCode
b else (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ScopeTag -> MethodState -> MethodState
setScope ScopeTag
Pub) StateT MethodState Identity ()
-> SrcState MethodState MethodData
-> SrcState MethodState MethodData
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
$ ScopeTag -> Doc -> MethodData
mthd ScopeTag
Pub ([Doc]
-> String
-> String
-> CppSrcCode (MethodType CppSrcCode)
-> [CppSrcCode (Parameter CppSrcCode)]
-> CppSrcCode (Body CppSrcCode)
-> Doc
cppsMethod ((CppSrcCode VarData -> CppSrcCode ValData -> Doc)
-> [CppSrcCode VarData] -> [CppSrcCode ValData] -> [Doc]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\ivar :: CppSrcCode VarData
ivar ival :: CppSrcCode ValData
ival -> CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable 
  CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
ivar Doc -> Doc -> Doc
<> Doc -> Doc
parens (CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value CppSrcCode ValData
CppSrcCode (Value CppSrcCode)
ival)) [CppSrcCode VarData]
ivars [CppSrcCode ValData]
ivals) String
n String
n CppSrcCode TypeData
CppSrcCode (MethodType CppSrcCode)
tp [CppSrcCode ParamData]
[CppSrcCode (Parameter CppSrcCode)]
pms CppSrcCode Doc
CppSrcCode (Body CppSrcCode)
bod))) (CppSrcCode TypeData
 -> [CppSrcCode ParamData]
 -> [CppSrcCode VarData]
 -> [CppSrcCode ValData]
 -> CppSrcCode Doc
 -> SrcState MethodState MethodData)
-> SrcState MethodState TypeData
-> StateT
     MethodState
     Identity
     ([CppSrcCode ParamData]
      -> [CppSrcCode VarData]
      -> [CppSrcCode ValData]
      -> CppSrcCode Doc
      -> SrcState MethodState MethodData)
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
<$> String -> MSMthdType CppSrcCode
forall (r :: * -> *). MethodTypeSym r => String -> MSMthdType r
construct 
  String
n StateT
  MethodState
  Identity
  ([CppSrcCode ParamData]
   -> [CppSrcCode VarData]
   -> [CppSrcCode ValData]
   -> CppSrcCode Doc
   -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode ParamData]
-> StateT
     MethodState
     Identity
     ([CppSrcCode VarData]
      -> [CppSrcCode ValData]
      -> CppSrcCode Doc
      -> SrcState MethodState MethodData)
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)
sequence [SrcState MethodState ParamData]
[MSParameter CppSrcCode]
ps StateT
  MethodState
  Identity
  ([CppSrcCode VarData]
   -> [CppSrcCode ValData]
   -> CppSrcCode Doc
   -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode VarData]
-> StateT
     MethodState
     Identity
     ([CppSrcCode ValData]
      -> CppSrcCode Doc -> SrcState MethodState MethodData)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((SrcState ValueState VarData, SrcState ValueState ValData)
 -> StateT MethodState Identity (CppSrcCode VarData))
-> [(SrcState ValueState VarData, SrcState ValueState ValData)]
-> StateT MethodState Identity [CppSrcCode VarData]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode VarData))
  MethodState
  ValueState
-> SrcState ValueState VarData
-> StateT MethodState Identity (CppSrcCode VarData)
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 VarData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (SrcState ValueState VarData
 -> StateT MethodState Identity (CppSrcCode VarData))
-> ((SrcState ValueState VarData, SrcState ValueState ValData)
    -> SrcState ValueState VarData)
-> (SrcState ValueState VarData, SrcState ValueState ValData)
-> StateT MethodState Identity (CppSrcCode VarData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SrcState ValueState VarData, SrcState ValueState ValData)
-> SrcState ValueState VarData
forall a b. (a, b) -> a
fst) [(SrcState ValueState VarData, SrcState ValueState ValData)]
NamedArgs CppSrcCode
is StateT
  MethodState
  Identity
  ([CppSrcCode ValData]
   -> CppSrcCode Doc -> SrcState MethodState MethodData)
-> StateT MethodState Identity [CppSrcCode ValData]
-> StateT
     MethodState
     Identity
     (CppSrcCode Doc -> SrcState MethodState MethodData)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((SrcState ValueState VarData, SrcState ValueState ValData)
 -> StateT MethodState Identity (CppSrcCode ValData))
-> [(SrcState ValueState VarData, SrcState ValueState ValData)]
-> StateT MethodState Identity [CppSrcCode ValData]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode ValData))
  MethodState
  ValueState
-> SrcState ValueState ValData
-> StateT MethodState Identity (CppSrcCode ValData)
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 ValData))
  MethodState
  ValueState
Lens' MethodState ValueState
lensMStoVS (SrcState ValueState ValData
 -> StateT MethodState Identity (CppSrcCode ValData))
-> ((SrcState ValueState VarData, SrcState ValueState ValData)
    -> SrcState ValueState ValData)
-> (SrcState ValueState VarData, SrcState ValueState ValData)
-> StateT MethodState Identity (CppSrcCode ValData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SrcState ValueState VarData, SrcState ValueState ValData)
-> SrcState ValueState ValData
forall a b. (a, b) -> b
snd) [(SrcState ValueState VarData, SrcState ValueState ValData)]
NamedArgs CppSrcCode
is StateT
  MethodState
  Identity
  (CppSrcCode Doc -> SrcState MethodState MethodData)
-> SrcState MethodState Doc
-> StateT MethodState Identity (SrcState MethodState MethodData)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> SrcState MethodState Doc
MSBody CppSrcCode
b)

cppsFunction :: Label -> CppSrcCode (Type CppSrcCode) -> 
  [CppSrcCode (Parameter CppSrcCode)] -> CppSrcCode (Body CppSrcCode) -> Doc
cppsFunction :: String
-> CppSrcCode (Type CppSrcCode)
-> [CppSrcCode (Parameter CppSrcCode)]
-> CppSrcCode (Body CppSrcCode)
-> Doc
cppsFunction n :: String
n t :: CppSrcCode (Type CppSrcCode)
t ps :: [CppSrcCode (Parameter CppSrcCode)]
ps b :: CppSrcCode (Body CppSrcCode)
b = [Doc] -> Doc
vcat [
  CppSrcCode (Type CppSrcCode) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' CppSrcCode (Type CppSrcCode)
t Doc -> Doc -> Doc
<+> String -> Doc
text String
n Doc -> Doc -> Doc
<> Doc -> Doc
parens ([CppSrcCode (Parameter CppSrcCode)] -> Doc
forall (r :: * -> *). RenderSym r => [r (Parameter r)] -> Doc
parameterList [CppSrcCode (Parameter CppSrcCode)]
ps) Doc -> Doc -> Doc
<+> Doc
bodyStart,
  Doc -> Doc
indent (CppSrcCode (Body CppSrcCode) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body CppSrcCode (Body CppSrcCode)
b),
  Doc
bodyEnd]
  
cppsIntFunc :: (CppSrcCode (Type CppSrcCode) -> 
  [CppSrcCode (Parameter CppSrcCode)] -> CppSrcCode (Body CppSrcCode) -> Doc) 
  -> CppSrcCode (Scope CppSrcCode) -> MSMthdType CppSrcCode -> 
  [MSParameter CppSrcCode] -> MSBody CppSrcCode -> SMethod CppSrcCode
cppsIntFunc :: (CppSrcCode (Type CppSrcCode)
 -> [CppSrcCode (Parameter CppSrcCode)]
 -> CppSrcCode (Body CppSrcCode)
 -> Doc)
-> CppSrcCode (Scope CppSrcCode)
-> MSMthdType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
cppsIntFunc f :: CppSrcCode (Type CppSrcCode)
-> [CppSrcCode (Parameter CppSrcCode)]
-> CppSrcCode (Body CppSrcCode)
-> Doc
f s :: CppSrcCode (Scope CppSrcCode)
s t :: MSMthdType CppSrcCode
t ps :: [MSParameter CppSrcCode]
ps b :: MSBody CppSrcCode
b = do
  (MethodState -> MethodState) -> StateT MethodState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ScopeTag -> MethodState -> MethodState
setScope ((Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd ((Doc, ScopeTag) -> ScopeTag) -> (Doc, ScopeTag) -> ScopeTag
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Doc, ScopeTag) -> (Doc, ScopeTag)
forall a. CppSrcCode a -> a
unCPPSC CppSrcCode (Doc, ScopeTag)
CppSrcCode (Scope CppSrcCode)
s))
  CppSrcCode TypeData
tp <- SrcState MethodState TypeData
MSMthdType CppSrcCode
t
  [CppSrcCode ParamData]
pms <- [SrcState MethodState ParamData]
-> StateT MethodState Identity [CppSrcCode ParamData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence [SrcState MethodState ParamData]
[MSParameter CppSrcCode]
ps
  MethodData -> CppSrcCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> CppSrcCode MethodData)
-> (CppSrcCode Doc -> MethodData)
-> CppSrcCode Doc
-> CppSrcCode MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ScopeTag -> Doc -> MethodData
mthd ((Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd ((Doc, ScopeTag) -> ScopeTag) -> (Doc, ScopeTag) -> ScopeTag
forall a b. (a -> b) -> a -> b
$ CppSrcCode (Doc, ScopeTag) -> (Doc, ScopeTag)
forall a. CppSrcCode a -> a
unCPPSC CppSrcCode (Doc, ScopeTag)
CppSrcCode (Scope CppSrcCode)
s) (Doc -> MethodData)
-> (CppSrcCode Doc -> Doc) -> CppSrcCode Doc -> MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CppSrcCode (Type CppSrcCode)
-> [CppSrcCode (Parameter CppSrcCode)]
-> CppSrcCode (Body CppSrcCode)
-> Doc
f CppSrcCode TypeData
CppSrcCode (Type CppSrcCode)
tp [CppSrcCode ParamData]
[CppSrcCode (Parameter CppSrcCode)]
pms (CppSrcCode Doc -> CppSrcCode MethodData)
-> SrcState MethodState Doc -> SrcState MethodState MethodData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
<$> SrcState MethodState Doc
MSBody CppSrcCode
b

cpphMethod :: (RenderSym r) => Label -> r (Type r) -> [r (Parameter r)] -> Doc
cpphMethod :: String -> r (Type r) -> [r (Parameter r)] -> Doc
cpphMethod n :: String
n t :: r (Type r)
t ps :: [r (Parameter r)]
ps = (if String -> Bool
isDtor String
n then Doc
empty else r (Type r) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' r (Type r)
t) Doc -> Doc -> Doc
<+> String -> Doc
text String
n 
  Doc -> Doc -> Doc
<> Doc -> Doc
parens ([r (Parameter r)] -> Doc
forall (r :: * -> *). RenderSym r => [r (Parameter r)] -> Doc
parameterList [r (Parameter r)]
ps) Doc -> Doc -> Doc
<> Doc
endStatement

cppCommentedFunc :: (RenderSym r, Monad r) => FileType -> 
  MS (r (BlockComment r)) -> MS (r MethodData) -> MS (r MethodData)
cppCommentedFunc :: FileType
-> MS (r (BlockComment r))
-> MS (r MethodData)
-> MS (r MethodData)
cppCommentedFunc ft :: FileType
ft cmt :: MS (r (BlockComment r))
cmt fn :: MS (r MethodData)
fn = do
  r MethodData
f <- MS (r MethodData)
fn
  Bool
mn <- MS Bool
getCurrMainFunc
  ScopeTag
scp <- MS ScopeTag
getScope
  r (BlockComment r)
cmnt <- MS (r (BlockComment r))
cmt
  let cf :: MS (r MethodData)
cf = r MethodData -> MS (r MethodData)
forall (m :: * -> *) a. Monad m => a -> m a
return ((MethodData -> MethodData) -> r MethodData -> r MethodData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (ScopeTag -> Doc -> MethodData
mthd ScopeTag
scp (Doc -> MethodData)
-> (MethodData -> Doc) -> MethodData -> MethodData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> Doc -> Doc
R.commentedItem 
        (r (BlockComment r) -> Doc
forall (r :: * -> *).
BlockCommentElim r =>
r (BlockComment r) -> Doc
RC.blockComment' r (BlockComment r)
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 -> MS (r MethodData)
ret Source = if Bool
mn then MS (r MethodData)
cf else r MethodData -> MS (r MethodData)
forall (m :: * -> *) a. Monad m => a -> m a
return r MethodData
f
      ret Header = if Bool
mn then r MethodData -> MS (r MethodData)
forall (m :: * -> *) a. Monad m => a -> m a
return r MethodData
f else MS (r MethodData)
cf
      ret Combined = String -> MS (r MethodData)
forall a. HasCallStack => String -> a
error "Combined passed to cppCommentedFunc"
  FileType -> MS (r MethodData)
ret FileType
ft

cppsStateVarDef :: Doc -> CppSrcCode (Scope CppSrcCode) -> 
  CppSrcCode (Permanence CppSrcCode) -> SVariable CppSrcCode -> 
  SValue CppSrcCode -> CSStateVar CppSrcCode
cppsStateVarDef :: Doc
-> CppSrcCode (Scope CppSrcCode)
-> CppSrcCode (Permanence CppSrcCode)
-> SVariable CppSrcCode
-> SValue CppSrcCode
-> CSStateVar CppSrcCode
cppsStateVarDef cns :: Doc
cns s :: CppSrcCode (Scope CppSrcCode)
s p :: CppSrcCode (Permanence CppSrcCode)
p vr' :: SVariable CppSrcCode
vr' vl' :: SValue CppSrcCode
vl' = do
  CppSrcCode VarData
vr <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode VarData))
  ClassState
  ValueState
-> SrcState ValueState VarData
-> StateT ClassState Identity (CppSrcCode VarData)
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 VarData))
  ClassState
  ValueState
Lens' ClassState ValueState
lensCStoVS SrcState ValueState VarData
SVariable CppSrcCode
vr'
  CppSrcCode ValData
vl <- LensLike'
  (Zoomed (StateT ValueState Identity) (CppSrcCode ValData))
  ClassState
  ValueState
-> SrcState ValueState ValData
-> StateT ClassState Identity (CppSrcCode ValData)
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 ValData))
  ClassState
  ValueState
Lens' ClassState ValueState
lensCStoVS SrcState ValueState ValData
SValue CppSrcCode
vl'
  String
n <- LensLike'
  (Zoomed (StateT MethodState Identity) String)
  ClassState
  MethodState
-> StateT MethodState Identity String
-> StateT ClassState Identity String
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)
  ClassState
  MethodState
Lens' ClassState MethodState
lensCStoMS StateT MethodState Identity String
getClassName
  CppSrcCode (Doc, Terminator)
emptS <- LensLike'
  (Zoomed
     (StateT MethodState Identity) (CppSrcCode (Doc, Terminator)))
  ClassState
  MethodState
-> SrcState MethodState (Doc, Terminator)
-> State ClassState (CppSrcCode (Doc, Terminator))
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 (Doc, Terminator)))
  ClassState
  MethodState
Lens' ClassState MethodState
lensCStoMS SrcState MethodState (Doc, Terminator)
forall (r :: * -> *). RenderStatement r => MSStatement r
emptyStmt
  CppSrcCode StateVarData -> SrcState ClassState StateVarData
forall (m :: * -> *) a. Monad m => a -> m a
return (CppSrcCode StateVarData -> SrcState ClassState StateVarData)
-> CppSrcCode StateVarData -> SrcState ClassState StateVarData
forall a b. (a -> b) -> a -> b
$ (ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData)
-> CppSrcCode ScopeTag
-> CppSrcCode Doc
-> CppSrcCode (Doc, Terminator)
-> CppSrcCode StateVarData
forall (r :: * -> *) a b c d.
Applicative r =>
(a -> b -> c -> d) -> r a -> r b -> r c -> r d
on3CodeValues ScopeTag -> Doc -> (Doc, Terminator) -> StateVarData
svd (((Doc, ScopeTag) -> ScopeTag)
-> CppSrcCode (Doc, ScopeTag) -> CppSrcCode ScopeTag
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Doc, ScopeTag) -> ScopeTag
forall a b. (a, b) -> b
snd CppSrcCode (Doc, ScopeTag)
CppSrcCode (Scope CppSrcCode)
s) 
    (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
$ Binding -> Doc -> Doc -> Doc
forall a. Binding -> a -> a -> a
onBinding (CppSrcCode (Permanence CppSrcCode) -> Binding
forall (r :: * -> *). PermElim r => r (Permanence r) -> Binding
binding CppSrcCode (Permanence CppSrcCode)
p) (Doc
cns Doc -> Doc -> Doc
<+> CppSrcCode (Type CppSrcCode) -> Doc
forall (r :: * -> *). InternalTypeElim r => r (Type r) -> Doc
RC.type' (CppSrcCode (Variable CppSrcCode) -> CppSrcCode (Type CppSrcCode)
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
vr) Doc -> Doc -> Doc
<+> 
      String -> Doc
text String
n Doc -> Doc -> Doc
`nmSpcAccess'` CppSrcCode (Variable CppSrcCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable CppSrcCode VarData
CppSrcCode (Variable CppSrcCode)
vr Doc -> Doc -> Doc
<+> Doc
equals Doc -> Doc -> Doc
<+> CppSrcCode (Value CppSrcCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value CppSrcCode ValData
CppSrcCode (Value CppSrcCode)
vl Doc -> Doc -> Doc
<> 
      Doc
endStatement) Doc
empty) 
    CppSrcCode (Doc, Terminator)
emptS

cpphStateVarDef :: (RenderSym r) => Doc -> r (Permanence r) -> SVariable r -> 
  SValue r -> CS Doc
cpphStateVarDef :: Doc
-> r (Permanence r)
-> SVariable r
-> SValue r
-> State ClassState Doc
cpphStateVarDef s :: Doc
s p :: r (Permanence r)
p vr :: SVariable r
vr vl :: SValue r
vl = (r (Statement r) -> Doc)
-> State ClassState (r (Statement r)) -> State ClassState Doc
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (Doc -> Doc -> Doc -> Doc
R.stateVar Doc
s (r (Permanence r) -> Doc
forall (r :: * -> *). PermElim r => r (Permanence r) -> Doc
RC.perm r (Permanence r)
p) (Doc -> Doc) -> (r (Statement r) -> Doc) -> r (Statement r) -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
.  
  r (Statement r) -> Doc
forall (r :: * -> *). StatementElim r => r (Statement r) -> Doc
RC.statement) (LensLike'
  (Zoomed (StateT MethodState Identity) (r (Statement r)))
  ClassState
  MethodState
-> StateT MethodState Identity (r (Statement r))
-> State ClassState (r (Statement r))
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) (r (Statement r)))
  ClassState
  MethodState
Lens' ClassState MethodState
lensCStoMS (StateT MethodState Identity (r (Statement r))
 -> State ClassState (r (Statement r)))
-> StateT MethodState Identity (r (Statement r))
-> State ClassState (r (Statement r))
forall a b. (a -> b) -> a -> b
$ StateT MethodState Identity (r (Statement r))
-> StateT MethodState Identity (r (Statement r))
forall (r :: * -> *).
RenderStatement r =>
MSStatement r -> MSStatement r
stmt (StateT MethodState Identity (r (Statement r))
 -> StateT MethodState Identity (r (Statement r)))
-> StateT MethodState Identity (r (Statement r))
-> StateT MethodState Identity (r (Statement r))
forall a b. (a -> b) -> a -> b
$ Binding
-> StateT MethodState Identity (r (Statement r))
-> StateT MethodState Identity (r (Statement r))
-> StateT MethodState Identity (r (Statement r))
forall a. Binding -> a -> a -> a
onBinding (r (Permanence r) -> Binding
forall (r :: * -> *). PermElim r => r (Permanence r) -> Binding
binding r (Permanence r)
p) (SVariable r -> StateT MethodState Identity (r (Statement r))
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec 
  SVariable r
vr) (SVariable r
-> SValue r -> StateT MethodState Identity (r (Statement r))
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> SValue r -> MSStatement r
varDecDef SVariable r
vr SValue r
vl)) 

cpphVarsFuncsList :: ScopeTag -> [CppHdrCode (StateVar CppHdrCode)] -> 
  [CppHdrCode (Method CppHdrCode)] -> Doc
cpphVarsFuncsList :: ScopeTag
-> [CppHdrCode (StateVar CppHdrCode)]
-> [CppHdrCode (Method CppHdrCode)]
-> Doc
cpphVarsFuncsList st :: ScopeTag
st vs :: [CppHdrCode (StateVar CppHdrCode)]
vs fs :: [CppHdrCode (Method CppHdrCode)]
fs = 
  let scopedVs :: [Doc]
scopedVs = [CppHdrCode (StateVar CppHdrCode) -> Doc
forall (r :: * -> *). StateVarElim r => r (StateVar r) -> Doc
RC.stateVar CppHdrCode StateVarData
CppHdrCode (StateVar CppHdrCode)
v | CppHdrCode StateVarData
v <- [CppHdrCode StateVarData]
[CppHdrCode (StateVar CppHdrCode)]
vs, StateVarData -> ScopeTag
getStVarScp (CppHdrCode StateVarData -> StateVarData
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode StateVarData
v) ScopeTag -> ScopeTag -> Bool
forall a. Eq a => a -> a -> Bool
== ScopeTag
st]
      scopedFs :: [Doc]
scopedFs = [CppHdrCode (Method CppHdrCode) -> Doc
forall (r :: * -> *). MethodElim r => r (Method r) -> Doc
RC.method CppHdrCode (Method CppHdrCode)
CppHdrCode MethodData
f | CppHdrCode MethodData
f <- [CppHdrCode (Method CppHdrCode)]
[CppHdrCode MethodData]
fs, MethodData -> ScopeTag
getMthdScp (CppHdrCode MethodData -> MethodData
forall a. CppHdrCode a -> a
unCPPHC CppHdrCode MethodData
f) ScopeTag -> ScopeTag -> Bool
forall a. Eq a => a -> a -> Bool
== ScopeTag
st]
  in [Doc] -> Doc
vcat ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ [Doc]
scopedVs [Doc] -> [Doc] -> [Doc]
forall a. [a] -> [a] -> [a]
++ (if [Doc] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Doc]
scopedVs then Doc
empty else Doc
blank) Doc -> [Doc] -> [Doc]
forall a. a -> [a] -> [a]
: [Doc]
scopedFs

cppsClass :: [CppSrcCode (StateVar CppSrcCode)] -> 
  [CppSrcCode (Method CppSrcCode)] -> CppSrcCode (Class CppSrcCode)
cppsClass :: [CppSrcCode (StateVar CppSrcCode)]
-> [CppSrcCode (Method CppSrcCode)]
-> CppSrcCode (Class CppSrcCode)
cppsClass vs :: [CppSrcCode (StateVar CppSrcCode)]
vs fs :: [CppSrcCode (Method CppSrcCode)]
fs = Doc -> CppSrcCode (Class CppSrcCode)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> CppSrcCode (Class CppSrcCode))
-> Doc -> CppSrcCode (Class CppSrcCode)
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)
-> [CppSrcCode StateVarData] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode StateVarData -> Doc
forall (r :: * -> *). StateVarElim r => r (StateVar r) -> Doc
RC.stateVar [CppSrcCode StateVarData]
[CppSrcCode (StateVar CppSrcCode)]
vs
        funcs :: [Doc]
funcs = (CppSrcCode MethodData -> Doc) -> [CppSrcCode MethodData] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map CppSrcCode MethodData -> Doc
forall (r :: * -> *). MethodElim r => r (Method r) -> Doc
RC.method [CppSrcCode (Method CppSrcCode)]
[CppSrcCode MethodData]
fs

cpphClass :: Label -> CppHdrCode ParentSpec -> 
  [CppHdrCode (StateVar CppHdrCode)] -> [CppHdrCode (Method CppHdrCode)] -> 
  CppHdrCode (Scope CppHdrCode) -> CppHdrCode (Scope CppHdrCode) -> 
  CppHdrCode (Class CppHdrCode)
cpphClass :: String
-> CppHdrCode Doc
-> [CppHdrCode (StateVar CppHdrCode)]
-> [CppHdrCode (Method CppHdrCode)]
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Scope CppHdrCode)
-> CppHdrCode (Class CppHdrCode)
cpphClass n :: String
n ps :: CppHdrCode Doc
ps vars :: [CppHdrCode (StateVar CppHdrCode)]
vars funcs :: [CppHdrCode (Method CppHdrCode)]
funcs pub :: CppHdrCode (Scope CppHdrCode)
pub priv :: CppHdrCode (Scope CppHdrCode)
priv = let 
  pubs :: Doc
pubs  = ScopeTag
-> [CppHdrCode (StateVar CppHdrCode)]
-> [CppHdrCode (Method CppHdrCode)]
-> Doc
cpphVarsFuncsList ScopeTag
Pub [CppHdrCode (StateVar CppHdrCode)]
vars [CppHdrCode (Method CppHdrCode)]
funcs
  privs :: Doc
privs = ScopeTag
-> [CppHdrCode (StateVar CppHdrCode)]
-> [CppHdrCode (Method CppHdrCode)]
-> Doc
cpphVarsFuncsList ScopeTag
Priv [CppHdrCode (StateVar CppHdrCode)]
vars [CppHdrCode (Method CppHdrCode)]
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 (Scope CppHdrCode) -> Doc
forall (r :: * -> *). ScopeElim r => r (Scope r) -> Doc
RC.scope CppHdrCode (Scope CppHdrCode)
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 (Scope CppHdrCode) -> Doc
forall (r :: * -> *). ScopeElim r => r (Scope r) -> Doc
RC.scope CppHdrCode (Scope CppHdrCode)
priv Doc -> Doc -> Doc
<> Doc
colon), Doc -> Doc
ifEmptyPrivs (Doc -> Doc
indent Doc
privs)]
  in (Doc -> Doc) -> CppHdrCode Doc -> CppHdrCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (\p :: 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 -> VSType CppSrcCode -> [SValue CppSrcCode] -> 
  SValue CppSrcCode) -> Label -> [SValue CppSrcCode] -> [SVariable CppSrcCode] 
  -> [SVariable CppSrcCode] -> MSStatement CppSrcCode
cppInOutCall :: (String
 -> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode)
-> InOutCall CppSrcCode
cppInOutCall f :: String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
f n :: String
n ins :: [SValue CppSrcCode]
ins [out :: SVariable CppSrcCode
out] [] = SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
assign SVariable CppSrcCode
out (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
f String
n ((CppSrcCode VarData -> CppSrcCode TypeData)
-> SrcState ValueState VarData
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode VarData -> CppSrcCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType SrcState ValueState VarData
SVariable CppSrcCode
out)
  [SValue CppSrcCode]
ins
cppInOutCall f :: String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
f n :: String
n ins :: [SValue CppSrcCode]
ins [] [out :: SVariable CppSrcCode
out] = SVariable CppSrcCode -> SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
assign SVariable CppSrcCode
out (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
f String
n ((CppSrcCode VarData -> CppSrcCode TypeData)
-> SrcState ValueState VarData
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode VarData -> CppSrcCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType SrcState ValueState VarData
SVariable CppSrcCode
out)
  (SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
out SrcState ValueState ValData
-> [SrcState ValueState ValData] -> [SrcState ValueState ValData]
forall a. a -> [a] -> [a]
: [SrcState ValueState ValData]
[SValue CppSrcCode]
ins)
cppInOutCall f :: String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
f n :: String
n ins :: [SValue CppSrcCode]
ins outs :: [SVariable CppSrcCode]
outs both :: [SVariable CppSrcCode]
both = SValue CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue CppSrcCode -> MSStatement CppSrcCode)
-> SValue CppSrcCode -> MSStatement CppSrcCode
forall a b. (a -> b) -> a -> b
$ String
-> VSType CppSrcCode -> [SValue CppSrcCode] -> SValue CppSrcCode
f String
n VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
void ((SrcState ValueState VarData -> SrcState ValueState ValData)
-> [SrcState ValueState VarData] -> [SrcState ValueState ValData]
forall a b. (a -> b) -> [a] -> [b]
map SrcState ValueState VarData -> SrcState ValueState ValData
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf [SrcState ValueState VarData]
[SVariable CppSrcCode]
both [SrcState ValueState ValData]
-> [SrcState ValueState ValData] -> [SrcState ValueState ValData]
forall a. [a] -> [a] -> [a]
++ [SrcState ValueState ValData]
[SValue CppSrcCode]
ins 
  [SrcState ValueState ValData]
-> [SrcState ValueState ValData] -> [SrcState ValueState ValData]
forall a. [a] -> [a] -> [a]
++ (SrcState ValueState VarData -> SrcState ValueState ValData)
-> [SrcState ValueState VarData] -> [SrcState ValueState ValData]
forall a b. (a -> b) -> [a] -> [b]
map SrcState ValueState VarData -> SrcState ValueState ValData
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf [SrcState ValueState VarData]
[SVariable CppSrcCode]
outs)

cppsInOut :: (VSType CppSrcCode -> [MSParameter CppSrcCode] -> MSBody CppSrcCode -> 
    SMethod CppSrcCode) -> 
  [SVariable CppSrcCode] -> [SVariable CppSrcCode] -> [SVariable CppSrcCode] -> 
  MSBody CppSrcCode -> SMethod CppSrcCode
cppsInOut :: (VSType CppSrcCode
 -> [MSParameter CppSrcCode]
 -> MSBody CppSrcCode
 -> SMethod CppSrcCode)
-> InOutFunc CppSrcCode
cppsInOut f :: VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
f ins :: [SVariable CppSrcCode]
ins [v :: SVariable CppSrcCode
v] [] b :: MSBody CppSrcCode
b = VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
f ((CppSrcCode VarData -> CppSrcCode TypeData)
-> SrcState ValueState VarData
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode VarData -> CppSrcCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType SrcState ValueState VarData
SVariable CppSrcCode
v) 
  ([SVariable CppSrcCode]
-> [SVariable CppSrcCode]
-> [SVariable CppSrcCode]
-> [MSParameter CppSrcCode]
forall (r :: * -> *).
RenderSym r =>
[SVariable r] -> [SVariable r] -> [SVariable r] -> [MSParameter r]
cppInOutParams [SVariable CppSrcCode]
ins [SVariable CppSrcCode
v] []) ((CppSrcCode (Doc, Terminator)
 -> CppSrcCode Doc
 -> CppSrcCode (Doc, Terminator)
 -> CppSrcCode Doc)
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
-> 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 (((Doc, Terminator) -> Doc -> (Doc, Terminator) -> Doc)
-> CppSrcCode (Doc, Terminator)
-> CppSrcCode Doc
-> CppSrcCode (Doc, Terminator)
-> CppSrcCode Doc
forall (r :: * -> *) a b c d.
Applicative r =>
(a -> b -> c -> d) -> r a -> r b -> r c -> r d
on3CodeValues (Doc, Terminator) -> Doc -> (Doc, Terminator) -> Doc
surroundBody) 
  (SVariable CppSrcCode -> MSStatement CppSrcCode
forall (r :: * -> *).
DeclStatement r =>
SVariable r -> MSStatement r
varDec SVariable CppSrcCode
v) SrcState MethodState Doc
MSBody CppSrcCode
b (SValue CppSrcCode -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSStatement r
returnStmt (SValue CppSrcCode -> SrcState MethodState (Doc, Terminator))
-> SValue CppSrcCode -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
v))
cppsInOut f :: VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
f ins :: [SVariable CppSrcCode]
ins [] [v :: SVariable CppSrcCode
v] b :: MSBody CppSrcCode
b = VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
f ((CppSrcCode VarData -> CppSrcCode TypeData)
-> SrcState ValueState VarData
-> State ValueState (CppSrcCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppSrcCode VarData -> CppSrcCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType SrcState ValueState VarData
SVariable CppSrcCode
v) 
  ([SVariable CppSrcCode]
-> [SVariable CppSrcCode]
-> [SVariable CppSrcCode]
-> [MSParameter CppSrcCode]
forall (r :: * -> *).
RenderSym r =>
[SVariable r] -> [SVariable r] -> [SVariable r] -> [MSParameter r]
cppInOutParams [SVariable CppSrcCode]
ins [] [SVariable CppSrcCode
v]) ((CppSrcCode Doc -> CppSrcCode (Doc, Terminator) -> CppSrcCode Doc)
-> SrcState MethodState Doc
-> SrcState MethodState (Doc, Terminator)
-> SrcState MethodState Doc
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((Doc -> (Doc, Terminator) -> Doc)
-> CppSrcCode Doc -> CppSrcCode (Doc, Terminator) -> CppSrcCode Doc
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues Doc -> (Doc, Terminator) -> Doc
appendToBody) SrcState MethodState Doc
MSBody CppSrcCode
b 
  (SValue CppSrcCode -> SrcState MethodState (Doc, Terminator)
forall (r :: * -> *).
ControlStatement r =>
SValue r -> MSStatement r
returnStmt (SValue CppSrcCode -> SrcState MethodState (Doc, Terminator))
-> SValue CppSrcCode -> SrcState MethodState (Doc, Terminator)
forall a b. (a -> b) -> a -> b
$ SVariable CppSrcCode -> SValue CppSrcCode
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable CppSrcCode
v))
cppsInOut f :: VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
f ins :: [SVariable CppSrcCode]
ins outs :: [SVariable CppSrcCode]
outs both :: [SVariable CppSrcCode]
both b :: MSBody CppSrcCode
b = VSType CppSrcCode
-> [MSParameter CppSrcCode]
-> MSBody CppSrcCode
-> SMethod CppSrcCode
f VSType CppSrcCode
forall (r :: * -> *). TypeSym r => VSType r
void ([SVariable CppSrcCode]
-> [SVariable CppSrcCode]
-> [SVariable CppSrcCode]
-> [MSParameter CppSrcCode]
forall (r :: * -> *).
RenderSym r =>
[SVariable r] -> [SVariable r] -> [SVariable r] -> [MSParameter r]
cppInOutParams [SVariable CppSrcCode]
ins [SVariable CppSrcCode]
outs [SVariable CppSrcCode]
both) MSBody CppSrcCode
b

cpphInOut :: (VSType CppHdrCode -> [MSParameter CppHdrCode] -> MSBody CppHdrCode -> 
    SMethod CppHdrCode) -> 
  [SVariable CppHdrCode] -> [SVariable CppHdrCode] -> [SVariable CppHdrCode] -> 
  MSBody CppHdrCode -> SMethod CppHdrCode
cpphInOut :: (VSType CppHdrCode
 -> [MSParameter CppHdrCode]
 -> MSBody CppHdrCode
 -> SMethod CppHdrCode)
-> InOutFunc CppHdrCode
cpphInOut f :: VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
f ins :: [SVariable CppHdrCode]
ins [v :: SVariable CppHdrCode
v] [] b :: MSBody CppHdrCode
b = VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
f ((CppHdrCode VarData -> CppHdrCode TypeData)
-> HdrState ValueState VarData
-> State ValueState (CppHdrCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppHdrCode VarData -> CppHdrCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType HdrState ValueState VarData
SVariable CppHdrCode
v) 
  ([SVariable CppHdrCode]
-> [SVariable CppHdrCode]
-> [SVariable CppHdrCode]
-> [MSParameter CppHdrCode]
forall (r :: * -> *).
RenderSym r =>
[SVariable r] -> [SVariable r] -> [SVariable r] -> [MSParameter r]
cppInOutParams [SVariable CppHdrCode]
ins [SVariable CppHdrCode
v] []) MSBody CppHdrCode
b
cpphInOut f :: VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
f ins :: [SVariable CppHdrCode]
ins [] [v :: SVariable CppHdrCode
v] b :: MSBody CppHdrCode
b = VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
f ((CppHdrCode VarData -> CppHdrCode TypeData)
-> HdrState ValueState VarData
-> State ValueState (CppHdrCode TypeData)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue CppHdrCode VarData -> CppHdrCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r (Type r)
variableType HdrState ValueState VarData
SVariable CppHdrCode
v) 
  ([SVariable CppHdrCode]
-> [SVariable CppHdrCode]
-> [SVariable CppHdrCode]
-> [MSParameter CppHdrCode]
forall (r :: * -> *).
RenderSym r =>
[SVariable r] -> [SVariable r] -> [SVariable r] -> [MSParameter r]
cppInOutParams [SVariable CppHdrCode]
ins [] [SVariable CppHdrCode
v]) MSBody CppHdrCode
b
cpphInOut f :: VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
f ins :: [SVariable CppHdrCode]
ins outs :: [SVariable CppHdrCode]
outs both :: [SVariable CppHdrCode]
both b :: MSBody CppHdrCode
b = VSType CppHdrCode
-> [MSParameter CppHdrCode]
-> MSBody CppHdrCode
-> SMethod CppHdrCode
f VSType CppHdrCode
forall (r :: * -> *). TypeSym r => VSType r
void ([SVariable CppHdrCode]
-> [SVariable CppHdrCode]
-> [SVariable CppHdrCode]
-> [MSParameter CppHdrCode]
forall (r :: * -> *).
RenderSym r =>
[SVariable r] -> [SVariable r] -> [SVariable r] -> [MSParameter r]
cppInOutParams [SVariable CppHdrCode]
ins [SVariable CppHdrCode]
outs [SVariable CppHdrCode]
both) MSBody CppHdrCode
b

cppInOutParams :: (RenderSym r) => [SVariable r] -> [SVariable r] -> 
  [SVariable r] -> [MSParameter r]
cppInOutParams :: [SVariable r] -> [SVariable r] -> [SVariable r] -> [MSParameter r]
cppInOutParams ins :: [SVariable r]
ins [_] [] = (SVariable r -> MSParameter r) -> [SVariable r] -> [MSParameter r]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MSParameter r
forall (r :: * -> *). RenderSym r => SVariable r -> MSParameter r
getParam [SVariable r]
ins
cppInOutParams ins :: [SVariable r]
ins [] [v :: SVariable r
v] = (SVariable r -> MSParameter r) -> [SVariable r] -> [MSParameter r]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MSParameter r
forall (r :: * -> *). RenderSym r => SVariable r -> MSParameter r
getParam ([SVariable r] -> [MSParameter r])
-> [SVariable r] -> [MSParameter r]
forall a b. (a -> b) -> a -> b
$ SVariable r
v SVariable r -> [SVariable r] -> [SVariable r]
forall a. a -> [a] -> [a]
: [SVariable r]
ins
cppInOutParams ins :: [SVariable r]
ins outs :: [SVariable r]
outs both :: [SVariable r]
both = (SVariable r -> MSParameter r) -> [SVariable r] -> [MSParameter r]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MSParameter r
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
pointerParam [SVariable r]
both [MSParameter r] -> [MSParameter r] -> [MSParameter r]
forall a. [a] -> [a] -> [a]
++ (SVariable r -> MSParameter r) -> [SVariable r] -> [MSParameter r]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MSParameter r
forall (r :: * -> *). RenderSym r => SVariable r -> MSParameter r
getParam [SVariable r]
ins [MSParameter r] -> [MSParameter r] -> [MSParameter r]
forall a. [a] -> [a] -> [a]
++ 
  (SVariable r -> MSParameter r) -> [SVariable r] -> [MSParameter r]
forall a b. (a -> b) -> [a] -> [b]
map SVariable r -> MSParameter r
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
pointerParam [SVariable r]
outs