{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Drasil.GProc.LanguageRenderer.MatlabRenderer (
MatlabCode(..), mlName, mlVersion
) where
import Drasil.Shared.InterfaceCommon (Label, VSType, SValue, SVariable,
MSStatement, getCodeType,
UnRepr(..), SharedProg, BodySym(..),
BlockSym(..), TypeSym(..), VariableSym(..), VariableElim(..), ValueSym(..),
Argument(..), Literal(..), MathConstant(..), VariableValue(..),
CommandLineArgs(..), NumericExpression(..), BooleanExpression(..),
Comparison(..), ValueExpression(..), IndexTranslator(..),
Reference(..), Array(..), List(..), Set(..), InternalList(..),
StatementSym(..), AssignStatement(..), DeclStatement(..), IOStatement(..),
StringStatement(..), FunctionSym(..), FuncAppStatement(..),
CommentStatement(..), ControlStatement(..), VisibilitySym(..), ScopeSym(..),
ParameterSym(..), BinderSym(..), BinderElim(..), MethodSym(..), funcApp,
(&=))
import Drasil.GProc.InterfaceProc (ProcProg, ProgramSym(..),
FileSym(..), ModuleSym(..))
import Drasil.Shared.RendererClassesCommon (CommonRenderSym, ImportSym(..),
RenderBody(..), BodyElim, RenderBlock(..), BlockElim, RenderType(..),
UnaryOpSym(..), BinaryOpSym(..), OpElim(uOpPrec, bOpPrec), RenderVariable(..),
InternalVarElim(variableBind), RenderValue(..), ValueElim(..),
InternalListFunc(..), RenderFunction(..), FunctionElim(functionType),
InternalAssignStmt(..), InternalIOStmt(..), InternalControlStmt(..),
RenderStatement(..), StatementElim(statementTerm), RenderVisibility(..),
VisibilityElim, MethodTypeSym(..), RenderParam(..),
ParamElim(parameterName, parameterType), RenderMethod(..), MethodElim,
BlockCommentSym(..), BlockCommentElim, ScopeElim(..), InternalBinderElim(..))
import qualified Drasil.Shared.RendererClassesCommon as RC (body, block, uOp,
bOp, variable, value, function, statement, visibility, parameter, method,
blockComment')
import Drasil.GProc.RendererClassesProc (ProcRenderSym, RenderFile(..),
RenderMod(..), ModuleElim, ProcRenderMethod(..))
import qualified Drasil.GProc.LanguageRenderer.AbstractProc as A (fileDoc,
docMod, fileFromData, buildModule, modFromData, function)
import qualified Drasil.Shared.LanguageRenderer as R (commentedMod,
commentedItem, parameterList, body, addComments, multiStmt, sqrt,
abs, log10, log, exp, sin, cos, tan, asin, acos, atan, floor, ceil,
elseIfLabel)
import qualified Drasil.GProc.RendererClassesProc as RC (module')
import qualified Drasil.Shared.LanguageRenderer.LanguagePolymorphic as G (
comment, param, docFunc, var, multiBody, block, multiBlock, stmt, loopStmt,
negateOp, plusOp, minusOp, multOp, divideOp, equalOp, greaterOp,
greaterEqualOp, lessOp, lessEqualOp, csc, sec, cot, valueOf, litDouble,
litInt, litString, valStmt, emptyStmt, assign, funcAppMixedArgs, call, print,
ifCond)
import qualified Drasil.Shared.LanguageRenderer.CommonPseudoOO as CP (mainBody,
functionDoc, docInOutFunc', inOutCall, multiAssign)
import qualified Drasil.Shared.LanguageRenderer.CLike as C (andOp, orOp,
litTrue, litFalse)
import qualified Drasil.Shared.LanguageRenderer.Common as CS (varDecDef,
extFuncAppMixedArgs)
import Drasil.Shared.AST (Terminator(..), FileType(Combined), FileData, fileD,
FuncData, ModData, md, updateMod, MethodData, mthd, updateMthd, ParamData,
paramVar, paramDoc, pd, ProgData, TypeData, cType, ValData, vd, val, valPrec,
valInt, valType, opDoc, opPrec, VarData, varName,
varType, varBind, varDoc, vard, progD, mthdDoc, modDoc)
import Drasil.Shared.CodeType (CodeType(..))
import Drasil.Shared.LanguageRenderer.Constructors (typeFromData, unOpPrec,
powerPrec, unExpr, unExpr', binExpr, mkStateVal, mkVal,
compEqualPrec, typeUnExpr, typeBinExpr)
import Drasil.Shared.LanguageRenderer (listSep')
import Drasil.Shared.LanguageRenderer.LanguagePolymorphic (OptionalSpace(..))
import Drasil.Shared.Helpers (toCode, toState, onCodeValue, onStateValue,
onCodeList, onStateList, on2CodeValues, on2StateValues, emptyIfEmpty)
import Drasil.Shared.State (FS, lensGStoFS, lensMStoVS, revFiles,
setFileType, getMainDoc)
import Control.Lens.Zoom (zoom)
import Control.Monad.State (modify)
import Drasil.FileHandling.Legacy (indent)
import Prelude hiding (break,print,sin,cos,tan,floor,(<>))
import Text.PrettyPrint.HughesPJ (Doc, empty, text, (<>), (<+>), vcat, hcat,
parens, brackets, braces, equals, punctuate)
newtype MatlabCode a = MLC {forall a. MatlabCode a -> a
unMLC :: a} deriving (forall a b. (a -> b) -> MatlabCode a -> MatlabCode b)
-> (forall a b. a -> MatlabCode b -> MatlabCode a)
-> Functor MatlabCode
forall a b. a -> MatlabCode b -> MatlabCode a
forall a b. (a -> b) -> MatlabCode a -> MatlabCode b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall a b. (a -> b) -> MatlabCode a -> MatlabCode b
fmap :: forall a b. (a -> b) -> MatlabCode a -> MatlabCode b
$c<$ :: forall a b. a -> MatlabCode b -> MatlabCode a
<$ :: forall a b. a -> MatlabCode b -> MatlabCode a
Functor
instance Applicative MatlabCode where
pure :: forall a. a -> MatlabCode a
pure = a -> MatlabCode a
forall a. a -> MatlabCode a
MLC
(MLC a -> b
f) <*> :: forall a b. MatlabCode (a -> b) -> MatlabCode a -> MatlabCode b
<*> (MLC a
x) = b -> MatlabCode b
forall a. a -> MatlabCode a
MLC (a -> b
f a
x)
instance Monad MatlabCode where
MLC a
x >>= :: forall a b. MatlabCode a -> (a -> MatlabCode b) -> MatlabCode b
>>= a -> MatlabCode b
f = a -> MatlabCode b
f a
x
instance SharedProg MatlabCode
instance ProcProg MatlabCode
instance ProgramSym MatlabCode where
type Program MatlabCode = ProgData
prog :: Label -> Label -> [SFile MatlabCode] -> GSProgram MatlabCode
prog Label
n Label
st [SFile MatlabCode]
files = do
[MatlabCode FileData]
fs <- (StateT FileState Identity (MatlabCode FileData)
-> StateT GOOLState Identity (MatlabCode FileData))
-> [StateT FileState Identity (MatlabCode FileData)]
-> StateT GOOLState Identity [MatlabCode FileData]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
(Zoomed (StateT FileState Identity) (MatlabCode FileData))
GOOLState
FileState
-> StateT FileState Identity (MatlabCode FileData)
-> StateT GOOLState Identity (MatlabCode FileData)
forall c.
LensLike'
(Zoomed (StateT FileState Identity) c) GOOLState FileState
-> StateT FileState Identity c -> StateT GOOLState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
(Zoomed (StateT FileState Identity) (MatlabCode FileData))
GOOLState
FileState
(FileState -> Focusing Identity (MatlabCode FileData) FileState)
-> GOOLState -> Focusing Identity (MatlabCode FileData) GOOLState
Lens' GOOLState FileState
lensGStoFS) [StateT FileState Identity (MatlabCode FileData)]
[SFile MatlabCode]
files
(GOOLState -> GOOLState) -> StateT GOOLState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify GOOLState -> GOOLState
revFiles
MatlabCode ProgData
-> StateT GOOLState Identity (MatlabCode ProgData)
forall a. a -> StateT GOOLState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MatlabCode ProgData
-> StateT GOOLState Identity (MatlabCode ProgData))
-> MatlabCode ProgData
-> StateT GOOLState Identity (MatlabCode ProgData)
forall a b. (a -> b) -> a -> b
$ ([FileData] -> ProgData)
-> [MatlabCode FileData] -> MatlabCode ProgData
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList (Label -> Label -> [FileData] -> ProgData
progD Label
n Label
st) [MatlabCode FileData]
fs
instance CommonRenderSym MatlabCode
instance ProcRenderSym MatlabCode
instance UnRepr MatlabCode inner where
unRepr :: MatlabCode inner -> inner
unRepr = MatlabCode inner -> inner
forall a. MatlabCode a -> a
unMLC
instance FileSym MatlabCode where
type File MatlabCode = FileData
fileDoc :: FSModule MatlabCode -> SFile MatlabCode
fileDoc FSModule MatlabCode
m = do
(FileState -> FileState) -> StateT FileState Identity ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (FileType -> FileState -> FileState
setFileType FileType
Combined)
Label -> FSModule MatlabCode -> SFile MatlabCode
forall (r :: * -> *).
ProcRenderSym r =>
Label -> FSModule r -> SFile r
A.fileDoc Label
mlExt FSModule MatlabCode
m
docMod :: Label
-> Label
-> [Label]
-> Label
-> SFile MatlabCode
-> SFile MatlabCode
docMod = Label
-> Label
-> Label
-> [Label]
-> Label
-> SFile MatlabCode
-> SFile MatlabCode
forall (r :: * -> *).
ProcRenderSym r =>
Label -> Label -> Label -> [Label] -> Label -> SFile r -> SFile r
A.docMod Label
mlExt
instance RenderFile MatlabCode where
top :: MatlabCode (Module MatlabCode) -> MatlabCode (Block MatlabCode)
top MatlabCode (Module MatlabCode)
_ = Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty
bottom :: MatlabCode (Block MatlabCode)
bottom = Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty
commentedMod :: SFile MatlabCode -> FS (MatlabCode Doc) -> SFile MatlabCode
commentedMod = (MatlabCode FileData -> MatlabCode Doc -> MatlabCode FileData)
-> StateT FileState Identity (MatlabCode FileData)
-> FS (MatlabCode Doc)
-> StateT FileState Identity (MatlabCode FileData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((FileData -> Doc -> FileData)
-> MatlabCode FileData -> MatlabCode Doc -> MatlabCode FileData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues FileData -> Doc -> FileData
R.commentedMod)
fileFromData :: Label -> FSModule MatlabCode -> SFile MatlabCode
fileFromData = (Label
-> MatlabCode (Module MatlabCode) -> MatlabCode (File MatlabCode))
-> Label -> FSModule MatlabCode -> SFile MatlabCode
forall (r :: * -> *).
ProcRenderSym r =>
(Label -> r (Module r) -> r (File r))
-> Label -> FSModule r -> SFile r
A.fileFromData ((ModData -> FileData) -> MatlabCode ModData -> MatlabCode FileData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((ModData -> FileData)
-> MatlabCode ModData -> MatlabCode FileData)
-> (Label -> ModData -> FileData)
-> Label
-> MatlabCode ModData
-> MatlabCode FileData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Label -> ModData -> FileData
fileD)
instance ImportSym MatlabCode where
langImport :: Label -> MatlabCode Doc
langImport = Label -> MatlabCode Doc
forall a. HasCallStack => a
undefined
modImport :: Label -> MatlabCode Doc
modImport = Label -> MatlabCode Doc
forall a. HasCallStack => a
undefined
instance BodySym MatlabCode where
type Body MatlabCode = Doc
body :: [MSBlock MatlabCode] -> MSBody MatlabCode
body = ([MatlabCode Doc] -> MatlabCode Doc)
-> [State MethodState (MatlabCode Doc)]
-> State MethodState (MatlabCode Doc)
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([Doc] -> Doc) -> [MatlabCode Doc] -> MatlabCode Doc
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList [Doc] -> Doc
R.body)
addComments :: Label -> MSBody MatlabCode -> MSBody MatlabCode
addComments Label
s = (MatlabCode Doc -> MatlabCode Doc)
-> State MethodState (MatlabCode Doc)
-> State MethodState (MatlabCode Doc)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((Doc -> Doc) -> MatlabCode Doc -> MatlabCode Doc
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue (Label -> Doc -> Doc -> Doc
R.addComments Label
s Doc
mlCmtStart))
instance RenderBody MatlabCode where
multiBody :: [MSBody MatlabCode] -> MSBody MatlabCode
multiBody = [MSBody MatlabCode] -> State MethodState (MatlabCode Doc)
[MSBody MatlabCode] -> MSBody MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, Monad r) =>
[MSBody r] -> MS (r Doc)
G.multiBody
instance BodyElim MatlabCode where
body :: MatlabCode (Body MatlabCode) -> Doc
body = MatlabCode Doc -> Doc
MatlabCode (Body MatlabCode) -> Doc
forall a. MatlabCode a -> a
unMLC
instance BlockSym MatlabCode where
type Block MatlabCode = Doc
block :: [MSStatement MatlabCode] -> MSBlock MatlabCode
block = [MSStatement MatlabCode] -> State MethodState (MatlabCode Doc)
[MSStatement MatlabCode] -> MSBlock MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, Monad r) =>
[MSStatement r] -> MS (r Doc)
G.block
instance RenderBlock MatlabCode where
multiBlock :: [MSBlock MatlabCode] -> MSBlock MatlabCode
multiBlock = [MSBlock MatlabCode] -> State MethodState (MatlabCode Doc)
[MSBlock MatlabCode] -> MSBlock MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, Monad r) =>
[MSBlock r] -> MS (r Doc)
G.multiBlock
instance BlockElim MatlabCode where
block :: MatlabCode (Block MatlabCode) -> Doc
block = MatlabCode Doc -> Doc
MatlabCode (Block MatlabCode) -> Doc
forall a. MatlabCode a -> a
unMLC
instance TypeSym MatlabCode where
bool :: VSType MatlabCode
bool = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
Boolean Label
"logical"
int :: VSType MatlabCode
int = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
Integer Label
"int"
float :: VSType MatlabCode
float = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
Float Label
"double"
double :: VSType MatlabCode
double = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
Double Label
"double"
char :: VSType MatlabCode
char = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
Char Label
"char"
string :: VSType MatlabCode
string = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
String Label
"string"
infile :: VSType MatlabCode
infile = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
InFile Label
"file"
outfile :: VSType MatlabCode
outfile = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
OutFile Label
"file"
referenceType :: VSType MatlabCode -> VSType MatlabCode
referenceType = VSType MatlabCode -> VSType MatlabCode
forall a. a -> a
id
listType :: VSType MatlabCode -> VSType MatlabCode
listType = VSType MatlabCode -> VSType MatlabCode
forall a. HasCallStack => a
undefined
setType :: VSType MatlabCode -> VSType MatlabCode
setType = VSType MatlabCode -> VSType MatlabCode
forall a. HasCallStack => a
undefined
arrayType :: VSType MatlabCode -> VSType MatlabCode
arrayType = VSType MatlabCode -> VSType MatlabCode
forall a. HasCallStack => a
undefined
innerType :: VSType MatlabCode -> VSType MatlabCode
innerType = VSType MatlabCode -> VSType MatlabCode
forall a. HasCallStack => a
undefined
funcType :: [VSType MatlabCode] -> VSType MatlabCode -> VSType MatlabCode
funcType = [VSType MatlabCode] -> VSType MatlabCode -> VSType MatlabCode
forall a. HasCallStack => a
undefined
void :: VSType MatlabCode
void = CodeType -> Label -> VSType MatlabCode
mlTy CodeType
Void Label
"void"
instance RenderType MatlabCode where
multiType :: [VSType MatlabCode] -> VSType MatlabCode
multiType = [VSType MatlabCode] -> VSType MatlabCode
forall a. HasCallStack => a
undefined
instance UnaryOpSym MatlabCode where
notOp :: VSUnOp MatlabCode
notOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
"~"
negateOp :: VSUnOp MatlabCode
negateOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.negateOp
sqrtOp :: VSUnOp MatlabCode
sqrtOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.sqrt
absOp :: VSUnOp MatlabCode
absOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.abs
logOp :: VSUnOp MatlabCode
logOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.log10
lnOp :: VSUnOp MatlabCode
lnOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.log
expOp :: VSUnOp MatlabCode
expOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.exp
sinOp :: VSUnOp MatlabCode
sinOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.sin
cosOp :: VSUnOp MatlabCode
cosOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.cos
tanOp :: VSUnOp MatlabCode
tanOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.tan
asinOp :: VSUnOp MatlabCode
asinOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.asin
acosOp :: VSUnOp MatlabCode
acosOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.acos
atanOp :: VSUnOp MatlabCode
atanOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.atan
floorOp :: VSUnOp MatlabCode
floorOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.floor
ceilOp :: VSUnOp MatlabCode
ceilOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
unOpPrec Label
R.ceil
instance BinaryOpSym MatlabCode where
equalOp :: VSUnOp MatlabCode
equalOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.equalOp
notEqualOp :: VSUnOp MatlabCode
notEqualOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
compEqualPrec Label
"~="
greaterOp :: VSUnOp MatlabCode
greaterOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.greaterOp
greaterEqualOp :: VSUnOp MatlabCode
greaterEqualOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.greaterEqualOp
lessOp :: VSUnOp MatlabCode
lessOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.lessOp
lessEqualOp :: VSUnOp MatlabCode
lessEqualOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.lessEqualOp
plusOp :: VSUnOp MatlabCode
plusOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.plusOp
minusOp :: VSUnOp MatlabCode
minusOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.minusOp
multOp :: VSUnOp MatlabCode
multOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.multOp
divideOp :: VSUnOp MatlabCode
divideOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
G.divideOp
powerOp :: VSUnOp MatlabCode
powerOp = Label -> VSUnOp MatlabCode
forall (r :: * -> *). Monad r => Label -> VSOp r
powerPrec Label
"^"
moduloOp :: VSUnOp MatlabCode
moduloOp = VSUnOp MatlabCode
forall a. HasCallStack => a
undefined
andOp :: VSUnOp MatlabCode
andOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
C.andOp
orOp :: VSUnOp MatlabCode
orOp = VSUnOp MatlabCode
forall (r :: * -> *). Monad r => VSOp r
C.orOp
instance OpElim MatlabCode where
uOp :: MatlabCode OpData -> Doc
uOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (MatlabCode OpData -> OpData) -> MatlabCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode OpData -> OpData
forall a. MatlabCode a -> a
unMLC
bOp :: MatlabCode OpData -> Doc
bOp = OpData -> Doc
opDoc (OpData -> Doc)
-> (MatlabCode OpData -> OpData) -> MatlabCode OpData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode OpData -> OpData
forall a. MatlabCode a -> a
unMLC
uOpPrec :: MatlabCode OpData -> Int
uOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (MatlabCode OpData -> OpData) -> MatlabCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode OpData -> OpData
forall a. MatlabCode a -> a
unMLC
bOpPrec :: MatlabCode OpData -> Int
bOpPrec = OpData -> Int
opPrec (OpData -> Int)
-> (MatlabCode OpData -> OpData) -> MatlabCode OpData -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode OpData -> OpData
forall a. MatlabCode a -> a
unMLC
instance ScopeSym MatlabCode where
global :: MatlabCode ScopeData
global = MatlabCode ScopeData
forall a. HasCallStack => a
undefined
mainFn :: MatlabCode ScopeData
mainFn = MatlabCode ScopeData
forall a. HasCallStack => a
undefined
local :: MatlabCode ScopeData
local = MatlabCode ScopeData
forall a. HasCallStack => a
undefined
instance ScopeElim MatlabCode where
scopeData :: MatlabCode ScopeData -> ScopeData
scopeData = MatlabCode ScopeData -> ScopeData
forall a. MatlabCode a -> a
unMLC
instance VariableSym MatlabCode where
type Variable MatlabCode = VarData
var :: Label -> VSType MatlabCode -> SVariable MatlabCode
var = Label -> VSType MatlabCode -> SVariable MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
Label -> VSType r -> SVariable r
G.var
constant :: Label -> VSType MatlabCode -> SVariable MatlabCode
constant = Label -> VSType MatlabCode -> SVariable MatlabCode
forall (r :: * -> *).
VariableSym r =>
Label -> VSType r -> SVariable r
var
extVar :: Label -> Label -> VSType MatlabCode -> SVariable MatlabCode
extVar = Label -> Label -> VSType MatlabCode -> VS (MatlabCode VarData)
Label -> Label -> VSType MatlabCode -> SVariable MatlabCode
forall a. HasCallStack => a
undefined
instance VariableElim MatlabCode where
variableName :: MatlabCode (Variable MatlabCode) -> Label
variableName = VarData -> Label
varName (VarData -> Label)
-> (MatlabCode VarData -> VarData) -> MatlabCode VarData -> Label
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode VarData -> VarData
forall a. MatlabCode a -> a
unMLC
variableType :: MatlabCode (Variable MatlabCode) -> MatlabCode TypeData
variableType = (VarData -> TypeData) -> MatlabCode VarData -> MatlabCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue VarData -> TypeData
varType
instance InternalVarElim MatlabCode where
variableBind :: MatlabCode (Variable MatlabCode) -> AttachmentTag
variableBind = VarData -> AttachmentTag
varBind (VarData -> AttachmentTag)
-> (MatlabCode VarData -> VarData)
-> MatlabCode VarData
-> AttachmentTag
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode VarData -> VarData
forall a. MatlabCode a -> a
unMLC
variable :: MatlabCode (Variable MatlabCode) -> Doc
variable = VarData -> Doc
varDoc (VarData -> Doc)
-> (MatlabCode VarData -> VarData) -> MatlabCode VarData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode VarData -> VarData
forall a. MatlabCode a -> a
unMLC
instance RenderVariable MatlabCode where
varFromData :: AttachmentTag
-> Label -> VSType MatlabCode -> Doc -> SVariable MatlabCode
varFromData AttachmentTag
b Label
n VSType MatlabCode
t' Doc
d = do
MatlabCode TypeData
t <- VSType MatlabCode
t'
MatlabCode VarData -> VS (MatlabCode VarData)
forall a s. a -> State s a
toState (MatlabCode VarData -> VS (MatlabCode VarData))
-> MatlabCode VarData -> VS (MatlabCode VarData)
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> VarData)
-> MatlabCode TypeData -> MatlabCode Doc -> MatlabCode VarData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (AttachmentTag -> Label -> TypeData -> Doc -> VarData
vard AttachmentTag
b Label
n) MatlabCode TypeData
t (Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)
instance ValueSym MatlabCode where
type Value MatlabCode = ValData
valueType :: MatlabCode (Value MatlabCode) -> MatlabCode TypeData
valueType MatlabCode (Value MatlabCode)
v = ValData -> TypeData
valType (ValData -> TypeData) -> MatlabCode ValData -> MatlabCode TypeData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
<$> MatlabCode ValData
MatlabCode (Value MatlabCode)
v
instance Argument MatlabCode where
pointerArg :: SValue MatlabCode -> SValue MatlabCode
pointerArg = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
instance Literal MatlabCode where
litTrue :: SValue MatlabCode
litTrue = SValue MatlabCode
forall (r :: * -> *). CommonRenderSym r => SValue r
C.litTrue
litFalse :: SValue MatlabCode
litFalse = SValue MatlabCode
forall (r :: * -> *). CommonRenderSym r => SValue r
C.litFalse
litChar :: Char -> SValue MatlabCode
litChar = Char -> VS (MatlabCode ValData)
Char -> SValue MatlabCode
forall a. HasCallStack => a
undefined
litDouble :: Double -> SValue MatlabCode
litDouble = Double -> SValue MatlabCode
forall (r :: * -> *). CommonRenderSym r => Double -> SValue r
G.litDouble
litFloat :: Float -> SValue MatlabCode
litFloat = Float -> VS (MatlabCode ValData)
Float -> SValue MatlabCode
forall a. HasCallStack => a
undefined
litInt :: Integer -> SValue MatlabCode
litInt = Integer -> SValue MatlabCode
forall (r :: * -> *). CommonRenderSym r => Integer -> SValue r
G.litInt
litString :: Label -> SValue MatlabCode
litString = Label -> SValue MatlabCode
forall (r :: * -> *). CommonRenderSym r => Label -> SValue r
G.litString
litArray :: VSType MatlabCode -> [SValue MatlabCode] -> SValue MatlabCode
litArray = VSType MatlabCode
-> [VS (MatlabCode ValData)] -> VS (MatlabCode ValData)
VSType MatlabCode -> [SValue MatlabCode] -> SValue MatlabCode
forall a. HasCallStack => a
undefined
litList :: VSType MatlabCode -> [SValue MatlabCode] -> SValue MatlabCode
litList = VSType MatlabCode
-> [VS (MatlabCode ValData)] -> VS (MatlabCode ValData)
VSType MatlabCode -> [SValue MatlabCode] -> SValue MatlabCode
forall a. HasCallStack => a
undefined
litSet :: VSType MatlabCode -> [SValue MatlabCode] -> SValue MatlabCode
litSet = VSType MatlabCode
-> [VS (MatlabCode ValData)] -> VS (MatlabCode ValData)
VSType MatlabCode -> [SValue MatlabCode] -> SValue MatlabCode
forall a. HasCallStack => a
undefined
instance MathConstant MatlabCode where
pi :: SValue MatlabCode
pi = VSType MatlabCode -> Doc -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSType r -> Doc -> SValue r
mkStateVal VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
double (Label -> Doc
text Label
"pi")
instance VariableValue MatlabCode where
valueOf :: SVariable MatlabCode -> SValue MatlabCode
valueOf = SVariable MatlabCode -> SValue MatlabCode
forall (r :: * -> *). CommonRenderSym r => SVariable r -> SValue r
G.valueOf
instance CommandLineArgs MatlabCode where
arg :: Integer -> SValue MatlabCode
arg Integer
n = SValue MatlabCode -> SValue MatlabCode
mlArg (Integer -> SValue MatlabCode
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt (Integer
n Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
1))
argsList :: SValue MatlabCode
argsList = VSType MatlabCode -> Doc -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSType r -> Doc -> SValue r
mkStateVal (VSType MatlabCode -> VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
arrayType VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
string) (Label -> Doc
text Label
"varargin")
argExists :: Integer -> SValue MatlabCode
argExists = Integer -> VS (MatlabCode ValData)
Integer -> SValue MatlabCode
forall a. HasCallStack => a
undefined
instance NumericExpression MatlabCode where
#~ :: SValue MatlabCode -> SValue MatlabCode
(#~) = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr' VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
negateOp
#/^ :: SValue MatlabCode -> SValue MatlabCode
(#/^) = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sqrtOp
#| :: SValue MatlabCode -> SValue MatlabCode
(#|) = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
absOp
#+ :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(#+) = VSUnOp MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
plusOp
#- :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(#-) = VSUnOp MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
minusOp
#* :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(#*) = VSUnOp MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
multOp
#/ :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(#/) = VSUnOp MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
divideOp
#% :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(#%) = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
#^ :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(#^) = VSUnOp MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
VSBinOp r -> SValue r -> SValue r -> SValue r
binExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
powerOp
log :: SValue MatlabCode -> SValue MatlabCode
log = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
logOp
ln :: SValue MatlabCode -> SValue MatlabCode
ln = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
lnOp
exp :: SValue MatlabCode -> SValue MatlabCode
exp = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
expOp
sin :: SValue MatlabCode -> SValue MatlabCode
sin = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
sinOp
cos :: SValue MatlabCode -> SValue MatlabCode
cos = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
cosOp
tan :: SValue MatlabCode -> SValue MatlabCode
tan = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
tanOp
csc :: SValue MatlabCode -> SValue MatlabCode
csc = SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
SValue r -> SValue r
G.csc
sec :: SValue MatlabCode -> SValue MatlabCode
sec = SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
SValue r -> SValue r
G.sec
cot :: SValue MatlabCode -> SValue MatlabCode
cot = SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
SValue r -> SValue r
G.cot
arcsin :: SValue MatlabCode -> SValue MatlabCode
arcsin = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
asinOp
arccos :: SValue MatlabCode -> SValue MatlabCode
arccos = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
acosOp
arctan :: SValue MatlabCode -> SValue MatlabCode
arctan = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
atanOp
floor :: SValue MatlabCode -> SValue MatlabCode
floor = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
floorOp
ceil :: SValue MatlabCode -> SValue MatlabCode
ceil = VSUnOp MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> SValue r -> SValue r
unExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
ceilOp
instance BooleanExpression MatlabCode where
?! :: SValue MatlabCode -> SValue MatlabCode
(?!) = VSUnOp MatlabCode
-> VSType MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSUnOp r -> VSType r -> SValue r -> SValue r
typeUnExpr VSUnOp MatlabCode
forall (r :: * -> *). UnaryOpSym r => VSUnOp r
notOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
?&& :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(?&&) = VSUnOp MatlabCode
-> VSType MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
andOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
?|| :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(?||) = VSUnOp MatlabCode
-> VSType MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
orOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
instance Comparison MatlabCode where
?< :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(?<) = VSUnOp MatlabCode
-> VSType MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
?<= :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(?<=) = VSUnOp MatlabCode
-> VSType MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
lessEqualOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
?> :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(?>) = VSUnOp MatlabCode
-> VSType MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
?>= :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(?>=) = VSUnOp MatlabCode
-> VSType MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
greaterEqualOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
?== :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(?==) = VSUnOp MatlabCode
-> VSType MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
equalOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
?!= :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
(?!=) = VSUnOp MatlabCode
-> VSType MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSBinOp r -> VSType r -> SValue r -> SValue r -> SValue r
typeBinExpr VSUnOp MatlabCode
forall (r :: * -> *). BinaryOpSym r => VSBinOp r
notEqualOp VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
bool
instance ValueExpression MatlabCode where
inlineIf :: SValue MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
inlineIf = VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
SValue MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
funcAppMixedArgs :: MixedCall MatlabCode
funcAppMixedArgs = MixedCall MatlabCode
forall (r :: * -> *). CommonRenderSym r => MixedCall r
G.funcAppMixedArgs
extFuncAppMixedArgs :: Label -> MixedCall MatlabCode
extFuncAppMixedArgs = Label -> MixedCall MatlabCode
forall (r :: * -> *). CommonRenderSym r => Label -> MixedCall r
CS.extFuncAppMixedArgs
libFuncAppMixedArgs :: Label -> MixedCall MatlabCode
libFuncAppMixedArgs = Label -> MixedCall MatlabCode
forall (r :: * -> *). CommonRenderSym r => Label -> MixedCall r
CS.extFuncAppMixedArgs
lambda :: [VSBinder MatlabCode] -> SValue MatlabCode -> SValue MatlabCode
lambda = [VSBinder MatlabCode]
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
[VSBinder MatlabCode] -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
notNull :: SValue MatlabCode -> SValue MatlabCode
notNull = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
instance RenderValue MatlabCode where
inputFunc :: SValue MatlabCode
inputFunc = VS (MatlabCode ValData)
SValue MatlabCode
forall a. HasCallStack => a
undefined
printFunc :: SValue MatlabCode
printFunc = SValue MatlabCode
mlPrintFunc
printLnFunc :: SValue MatlabCode
printLnFunc = SValue MatlabCode
mlPrintFunc
printFileFunc :: SValue MatlabCode -> SValue MatlabCode
printFileFunc SValue MatlabCode
_ = SValue MatlabCode
mlPrintFunc
printFileLnFunc :: SValue MatlabCode -> SValue MatlabCode
printFileLnFunc SValue MatlabCode
_ = SValue MatlabCode
mlPrintFunc
cast :: VSType MatlabCode -> SValue MatlabCode -> SValue MatlabCode
cast = VSType MatlabCode
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
VSType MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
call :: Maybe Label -> Maybe Doc -> MixedCall MatlabCode
call = Doc -> Maybe Label -> Maybe Doc -> MixedCall MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
Doc -> Maybe Label -> Maybe Doc -> MixedCall r
G.call Doc
equals
valFromData :: Maybe Int
-> Maybe Integer -> VSType MatlabCode -> Doc -> SValue MatlabCode
valFromData Maybe Int
p Maybe Integer
i VSType MatlabCode
t' Doc
d = do
MatlabCode TypeData
t <- VSType MatlabCode
t'
MatlabCode ValData -> VS (MatlabCode ValData)
forall a s. a -> State s a
toState (MatlabCode ValData -> VS (MatlabCode ValData))
-> MatlabCode ValData -> VS (MatlabCode ValData)
forall a b. (a -> b) -> a -> b
$ (TypeData -> Doc -> ValData)
-> MatlabCode TypeData -> MatlabCode Doc -> MatlabCode ValData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues (Maybe Int -> Maybe Integer -> TypeData -> Doc -> ValData
vd Maybe Int
p Maybe Integer
i) MatlabCode TypeData
t (Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)
instance ValueElim MatlabCode where
valuePrec :: MatlabCode (Value MatlabCode) -> Maybe Int
valuePrec = ValData -> Maybe Int
valPrec (ValData -> Maybe Int)
-> (MatlabCode ValData -> ValData)
-> MatlabCode ValData
-> Maybe Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode ValData -> ValData
forall a. MatlabCode a -> a
unMLC
valueInt :: MatlabCode (Value MatlabCode) -> Maybe Integer
valueInt = ValData -> Maybe Integer
valInt (ValData -> Maybe Integer)
-> (MatlabCode ValData -> ValData)
-> MatlabCode ValData
-> Maybe Integer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode ValData -> ValData
forall a. MatlabCode a -> a
unMLC
value :: MatlabCode (Value MatlabCode) -> Doc
value = ValData -> Doc
val (ValData -> Doc)
-> (MatlabCode ValData -> ValData) -> MatlabCode ValData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode ValData -> ValData
forall a. MatlabCode a -> a
unMLC
instance IndexTranslator MatlabCode where
intToIndex :: SValue MatlabCode -> SValue MatlabCode
intToIndex = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
indexToInt :: SValue MatlabCode -> SValue MatlabCode
indexToInt = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
instance Reference MatlabCode where
makeRef :: SValue MatlabCode -> SValue MatlabCode
makeRef = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. a -> a
id
maybeDeref :: SValue MatlabCode -> SValue MatlabCode
maybeDeref = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. a -> a
id
instance Array MatlabCode where
arrayElem :: SValue MatlabCode -> SValue MatlabCode -> SVariable MatlabCode
arrayElem = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> VS (MatlabCode VarData)
SValue MatlabCode -> SValue MatlabCode -> SVariable MatlabCode
forall a. HasCallStack => a
undefined
arrayLength :: SValue MatlabCode -> SValue MatlabCode
arrayLength = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
arrayCopy :: SValue MatlabCode -> SValue MatlabCode
arrayCopy = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
instance List MatlabCode where
listSize :: SValue MatlabCode -> SValue MatlabCode
listSize = VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
listAdd :: SValue MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
listAdd = VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
-> MS (MatlabCode (Doc, Terminator))
SValue MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
listAppend :: SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
listAppend = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> MS (MatlabCode (Doc, Terminator))
SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
listAccess :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
listAccess = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
listSet :: SValue MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
listSet = VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
-> MS (MatlabCode (Doc, Terminator))
SValue MatlabCode
-> SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
indexOf :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
indexOf = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
instance Set MatlabCode where
contains :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
contains = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
setAdd :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
setAdd = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
setRemove :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
setRemove = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
setUnion :: SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
setUnion = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> VS (MatlabCode ValData)
SValue MatlabCode -> SValue MatlabCode -> SValue MatlabCode
forall a. HasCallStack => a
undefined
instance InternalList MatlabCode where
listSlice' :: Maybe (SValue MatlabCode)
-> Maybe (SValue MatlabCode)
-> Maybe (SValue MatlabCode)
-> SVariable MatlabCode
-> SValue MatlabCode
-> MSBlock MatlabCode
listSlice' = Maybe (VS (MatlabCode ValData))
-> Maybe (VS (MatlabCode ValData))
-> Maybe (VS (MatlabCode ValData))
-> VS (MatlabCode VarData)
-> VS (MatlabCode ValData)
-> State MethodState (MatlabCode Doc)
Maybe (SValue MatlabCode)
-> Maybe (SValue MatlabCode)
-> Maybe (SValue MatlabCode)
-> SVariable MatlabCode
-> SValue MatlabCode
-> MSBlock MatlabCode
forall a. HasCallStack => a
undefined
instance InternalListFunc MatlabCode where
listAccessFunc :: VSType MatlabCode -> SValue MatlabCode -> VSFunction MatlabCode
listAccessFunc = VSType MatlabCode
-> VS (MatlabCode ValData) -> VS (MatlabCode FuncData)
VSType MatlabCode -> SValue MatlabCode -> VSFunction MatlabCode
forall a. HasCallStack => a
undefined
instance BinderSym MatlabCode where
binder :: Label -> VSType MatlabCode -> VSBinder MatlabCode
binder = Label -> VSType MatlabCode -> VSBinder MatlabCode
forall a. HasCallStack => a
undefined
instance BinderElim MatlabCode where
binderName :: MatlabCode BinderD -> Label
binderName = MatlabCode BinderD -> Label
forall a. HasCallStack => a
undefined
binderType :: MatlabCode BinderD -> MatlabCode TypeData
binderType = MatlabCode BinderD -> MatlabCode TypeData
forall a. HasCallStack => a
undefined
instance InternalBinderElim MatlabCode where
binderElim :: MatlabCode BinderD -> Doc
binderElim = MatlabCode BinderD -> Doc
forall a. HasCallStack => a
undefined
instance RenderFunction MatlabCode where
funcFromData :: Doc -> VSType MatlabCode -> VSFunction MatlabCode
funcFromData = Doc -> VSType MatlabCode -> VS (MatlabCode FuncData)
Doc -> VSType MatlabCode -> VSFunction MatlabCode
forall a. HasCallStack => a
undefined
instance FunctionElim MatlabCode where
functionType :: MatlabCode (Function MatlabCode) -> MatlabCode TypeData
functionType = MatlabCode FuncData -> MatlabCode TypeData
MatlabCode (Function MatlabCode) -> MatlabCode TypeData
forall a. HasCallStack => a
undefined
function :: MatlabCode (Function MatlabCode) -> Doc
function = MatlabCode FuncData -> Doc
MatlabCode (Function MatlabCode) -> Doc
forall a. HasCallStack => a
undefined
instance InternalAssignStmt MatlabCode where
multiAssign :: [SVariable MatlabCode]
-> [SValue MatlabCode] -> MSStatement MatlabCode
multiAssign = (Doc -> Doc)
-> [SVariable MatlabCode]
-> [SValue MatlabCode]
-> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
(Doc -> Doc) -> [SVariable r] -> [SValue r] -> MSStatement r
CP.multiAssign Doc -> Doc
brackets
instance InternalIOStmt MatlabCode where
printSt :: Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
printSt = Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
mlPrint
instance InternalControlStmt MatlabCode where
multiReturn :: [SValue MatlabCode] -> MSStatement MatlabCode
multiReturn = [VS (MatlabCode ValData)] -> MS (MatlabCode (Doc, Terminator))
[SValue MatlabCode] -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
instance RenderStatement MatlabCode where
stmt :: MSStatement MatlabCode -> MSStatement MatlabCode
stmt = MSStatement MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
MSStatement r -> MSStatement r
G.stmt
loopStmt :: MSStatement MatlabCode -> MSStatement MatlabCode
loopStmt = MSStatement MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
MSStatement r -> MSStatement r
G.loopStmt
stmtFromData :: Doc -> Terminator -> MSStatement MatlabCode
stmtFromData Doc
d Terminator
t = MatlabCode (Statement MatlabCode) -> MSStatement MatlabCode
forall a s. a -> State s a
toState (MatlabCode (Statement MatlabCode) -> MSStatement MatlabCode)
-> MatlabCode (Statement MatlabCode) -> MSStatement MatlabCode
forall a b. (a -> b) -> a -> b
$ (Doc, Terminator) -> MatlabCode (Doc, Terminator)
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc
d, Terminator
t)
instance StatementElim MatlabCode where
statement :: MatlabCode (Statement MatlabCode) -> Doc
statement = (Doc, Terminator) -> Doc
forall a b. (a, b) -> a
fst ((Doc, Terminator) -> Doc)
-> (MatlabCode (Doc, Terminator) -> (Doc, Terminator))
-> MatlabCode (Doc, Terminator)
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode (Doc, Terminator) -> (Doc, Terminator)
forall a. MatlabCode a -> a
unMLC
statementTerm :: MatlabCode (Statement MatlabCode) -> Terminator
statementTerm = (Doc, Terminator) -> Terminator
forall a b. (a, b) -> b
snd ((Doc, Terminator) -> Terminator)
-> (MatlabCode (Doc, Terminator) -> (Doc, Terminator))
-> MatlabCode (Doc, Terminator)
-> Terminator
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode (Doc, Terminator) -> (Doc, Terminator)
forall a. MatlabCode a -> a
unMLC
instance StatementSym MatlabCode where
type Statement MatlabCode = (Doc, Terminator)
valStmt :: SValue MatlabCode -> MSStatement MatlabCode
valStmt = Terminator -> SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
Terminator -> SValue r -> MSStatement r
G.valStmt Terminator
Semi
emptyStmt :: MSStatement MatlabCode
emptyStmt = MSStatement MatlabCode
forall (r :: * -> *). CommonRenderSym r => MSStatement r
G.emptyStmt
multi :: [MSStatement MatlabCode] -> MSStatement MatlabCode
multi = ([MatlabCode (Doc, Terminator)] -> MatlabCode (Doc, Terminator))
-> [MS (MatlabCode (Doc, Terminator))]
-> MS (MatlabCode (Doc, Terminator))
forall a b s. ([a] -> b) -> [State s a] -> State s b
onStateList (([(Doc, Terminator)] -> (Doc, Terminator))
-> [MatlabCode (Doc, Terminator)] -> MatlabCode (Doc, Terminator)
forall (m :: * -> *) a b. Monad m => ([a] -> b) -> [m a] -> m b
onCodeList [(Doc, Terminator)] -> (Doc, Terminator)
R.multiStmt)
instance AssignStatement MatlabCode where
assign :: SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
assign = Terminator
-> SVariable MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
Terminator -> SVariable r -> SValue r -> MSStatement r
G.assign Terminator
Semi
&-= :: SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
(&-=) = VS (MatlabCode VarData)
-> VS (MatlabCode ValData) -> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
&+= :: SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
(&+=) = VS (MatlabCode VarData)
-> VS (MatlabCode ValData) -> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
&++ :: SVariable MatlabCode -> MSStatement MatlabCode
(&++) = VS (MatlabCode VarData) -> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
&-- :: SVariable MatlabCode -> MSStatement MatlabCode
(&--) = VS (MatlabCode VarData) -> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
instance DeclStatement MatlabCode where
varDec :: SVariable MatlabCode
-> MatlabCode ScopeData -> MSStatement MatlabCode
varDec SVariable MatlabCode
v MatlabCode ScopeData
scp = SVariable MatlabCode
-> MatlabCode ScopeData
-> Maybe (SValue MatlabCode)
-> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
SVariable r -> r ScopeData -> Maybe (SValue r) -> MSStatement r
CS.varDecDef SVariable MatlabCode
v MatlabCode ScopeData
scp Maybe (VS (MatlabCode ValData))
Maybe (SValue MatlabCode)
forall a. Maybe a
Nothing
varDecDef :: SVariable MatlabCode
-> MatlabCode ScopeData
-> SValue MatlabCode
-> MSStatement MatlabCode
varDecDef SVariable MatlabCode
v MatlabCode ScopeData
scp SValue MatlabCode
e = SVariable MatlabCode
-> MatlabCode ScopeData
-> Maybe (SValue MatlabCode)
-> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
SVariable r -> r ScopeData -> Maybe (SValue r) -> MSStatement r
CS.varDecDef SVariable MatlabCode
v MatlabCode ScopeData
scp (VS (MatlabCode ValData) -> Maybe (VS (MatlabCode ValData))
forall a. a -> Maybe a
Just VS (MatlabCode ValData)
SValue MatlabCode
e)
setDec :: SVariable MatlabCode
-> MatlabCode ScopeData -> MSStatement MatlabCode
setDec = VS (MatlabCode VarData)
-> MatlabCode ScopeData -> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode
-> MatlabCode ScopeData -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
setDecDef :: SVariable MatlabCode
-> MatlabCode ScopeData
-> SValue MatlabCode
-> MSStatement MatlabCode
setDecDef = VS (MatlabCode VarData)
-> MatlabCode ScopeData
-> VS (MatlabCode ValData)
-> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode
-> MatlabCode ScopeData
-> SValue MatlabCode
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
listDec :: Integer
-> SVariable MatlabCode
-> MatlabCode ScopeData
-> MSStatement MatlabCode
listDec = Integer
-> VS (MatlabCode VarData)
-> MatlabCode ScopeData
-> MS (MatlabCode (Doc, Terminator))
Integer
-> SVariable MatlabCode
-> MatlabCode ScopeData
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
listDecDef :: SVariable MatlabCode
-> MatlabCode ScopeData
-> [SValue MatlabCode]
-> MSStatement MatlabCode
listDecDef = VS (MatlabCode VarData)
-> MatlabCode ScopeData
-> [VS (MatlabCode ValData)]
-> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode
-> MatlabCode ScopeData
-> [SValue MatlabCode]
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
arrayDec :: Integer
-> SVariable MatlabCode
-> MatlabCode ScopeData
-> MSStatement MatlabCode
arrayDec = Integer
-> VS (MatlabCode VarData)
-> MatlabCode ScopeData
-> MS (MatlabCode (Doc, Terminator))
Integer
-> SVariable MatlabCode
-> MatlabCode ScopeData
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
arrayDecDef :: SVariable MatlabCode
-> MatlabCode ScopeData
-> [SValue MatlabCode]
-> MSStatement MatlabCode
arrayDecDef = VS (MatlabCode VarData)
-> MatlabCode ScopeData
-> [VS (MatlabCode ValData)]
-> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode
-> MatlabCode ScopeData
-> [SValue MatlabCode]
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
constDecDef :: SVariable MatlabCode
-> MatlabCode ScopeData
-> SValue MatlabCode
-> MSStatement MatlabCode
constDecDef = VS (MatlabCode VarData)
-> MatlabCode ScopeData
-> VS (MatlabCode ValData)
-> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode
-> MatlabCode ScopeData
-> SValue MatlabCode
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
funcDecDef :: SVariable MatlabCode
-> MatlabCode ScopeData
-> [SVariable MatlabCode]
-> MSBody MatlabCode
-> MSStatement MatlabCode
funcDecDef = VS (MatlabCode VarData)
-> MatlabCode ScopeData
-> [VS (MatlabCode VarData)]
-> State MethodState (MatlabCode Doc)
-> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode
-> MatlabCode ScopeData
-> [SVariable MatlabCode]
-> MSBody MatlabCode
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
instance IOStatement MatlabCode where
print :: SValue MatlabCode -> MSStatement MatlabCode
print = Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
False Maybe (VS (MatlabCode ValData))
Maybe (SValue MatlabCode)
forall a. Maybe a
Nothing SValue MatlabCode
forall (r :: * -> *). RenderValue r => SValue r
printFunc
printLn :: SValue MatlabCode -> MSStatement MatlabCode
printLn = Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
True Maybe (VS (MatlabCode ValData))
Maybe (SValue MatlabCode)
forall a. Maybe a
Nothing SValue MatlabCode
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc
printStr :: Label -> MSStatement MatlabCode
printStr = Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
False Maybe (VS (MatlabCode ValData))
Maybe (SValue MatlabCode)
forall a. Maybe a
Nothing SValue MatlabCode
forall (r :: * -> *). RenderValue r => SValue r
printFunc (SValue MatlabCode -> MS (MatlabCode (Doc, Terminator)))
-> (Label -> SValue MatlabCode)
-> Label
-> MS (MatlabCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Label -> SValue MatlabCode
forall (r :: * -> *). Literal r => Label -> SValue r
litString
printStrLn :: Label -> MSStatement MatlabCode
printStrLn = Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
True Maybe (VS (MatlabCode ValData))
Maybe (SValue MatlabCode)
forall a. Maybe a
Nothing SValue MatlabCode
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc (SValue MatlabCode -> MS (MatlabCode (Doc, Terminator)))
-> (Label -> SValue MatlabCode)
-> Label
-> MS (MatlabCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Label -> SValue MatlabCode
forall (r :: * -> *). Literal r => Label -> SValue r
litString
printFile :: SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
printFile SValue MatlabCode
f = Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
False (VS (MatlabCode ValData) -> Maybe (VS (MatlabCode ValData))
forall a. a -> Maybe a
Just VS (MatlabCode ValData)
SValue MatlabCode
f) SValue MatlabCode
forall (r :: * -> *). RenderValue r => SValue r
printFunc
printFileLn :: SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
printFileLn SValue MatlabCode
f = Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
forall (r :: * -> *).
(CommonRenderSym r, UnRepr r TypeData) =>
Bool -> Maybe (SValue r) -> SValue r -> SValue r -> MSStatement r
G.print Bool
True (VS (MatlabCode ValData) -> Maybe (VS (MatlabCode ValData))
forall a. a -> Maybe a
Just VS (MatlabCode ValData)
SValue MatlabCode
f) SValue MatlabCode
forall (r :: * -> *). RenderValue r => SValue r
printLnFunc
printFileStr :: SValue MatlabCode -> Label -> MSStatement MatlabCode
printFileStr SValue MatlabCode
f = SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
IOStatement r =>
SValue r -> SValue r -> MSStatement r
printFile SValue MatlabCode
f (VS (MatlabCode ValData) -> MS (MatlabCode (Doc, Terminator)))
-> (Label -> VS (MatlabCode ValData))
-> Label
-> MS (MatlabCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Label -> VS (MatlabCode ValData)
Label -> SValue MatlabCode
forall (r :: * -> *). Literal r => Label -> SValue r
litString
printFileStrLn :: SValue MatlabCode -> Label -> MSStatement MatlabCode
printFileStrLn SValue MatlabCode
f = SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
IOStatement r =>
SValue r -> SValue r -> MSStatement r
printFileLn SValue MatlabCode
f (VS (MatlabCode ValData) -> MS (MatlabCode (Doc, Terminator)))
-> (Label -> VS (MatlabCode ValData))
-> Label
-> MS (MatlabCode (Doc, Terminator))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Label -> VS (MatlabCode ValData)
Label -> SValue MatlabCode
forall (r :: * -> *). Literal r => Label -> SValue r
litString
getInput :: SVariable MatlabCode -> MSStatement MatlabCode
getInput = VS (MatlabCode VarData) -> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
discardInput :: MSStatement MatlabCode
discardInput = MS (MatlabCode (Doc, Terminator))
MSStatement MatlabCode
forall a. HasCallStack => a
undefined
getFileInput :: SValue MatlabCode -> SVariable MatlabCode -> MSStatement MatlabCode
getFileInput SValue MatlabCode
f = SValue MatlabCode -> SVariable MatlabCode -> MSStatement MatlabCode
mlInput (SValue MatlabCode -> SValue MatlabCode
mlReadLine SValue MatlabCode
f)
discardFileInput :: SValue MatlabCode -> MSStatement MatlabCode
discardFileInput SValue MatlabCode
f = SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue MatlabCode -> SValue MatlabCode
mlReadLine SValue MatlabCode
f)
openFileR :: SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
openFileR SVariable MatlabCode
f SValue MatlabCode
n = SVariable MatlabCode
f SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
&= PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp Label
"fopen" VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
infile [SValue MatlabCode
n, Label -> SValue MatlabCode
forall (r :: * -> *). Literal r => Label -> SValue r
litString Label
"r"]
openFileW :: SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
openFileW SVariable MatlabCode
f SValue MatlabCode
n = SVariable MatlabCode
f SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
&= PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp Label
"fopen" VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
outfile [SValue MatlabCode
n, Label -> SValue MatlabCode
forall (r :: * -> *). Literal r => Label -> SValue r
litString Label
"w"]
openFileA :: SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
openFileA SVariable MatlabCode
f SValue MatlabCode
n = SVariable MatlabCode
f SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
&= PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp Label
"fopen" VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
outfile [SValue MatlabCode
n, Label -> SValue MatlabCode
forall (r :: * -> *). Literal r => Label -> SValue r
litString Label
"a"]
closeFile :: SValue MatlabCode -> MSStatement MatlabCode
closeFile SValue MatlabCode
f = SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *). StatementSym r => SValue r -> MSStatement r
valStmt (SValue MatlabCode -> MSStatement MatlabCode)
-> SValue MatlabCode -> MSStatement MatlabCode
forall a b. (a -> b) -> a -> b
$ PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp Label
"fclose" VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
void [SValue MatlabCode
f]
getFileInputLine :: SValue MatlabCode -> SVariable MatlabCode -> MSStatement MatlabCode
getFileInputLine = SValue MatlabCode -> SVariable MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
IOStatement r =>
SValue r -> SVariable r -> MSStatement r
getFileInput
discardFileLine :: SValue MatlabCode -> MSStatement MatlabCode
discardFileLine = SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *). IOStatement r => SValue r -> MSStatement r
discardFileInput
getFileInputAll :: SValue MatlabCode -> SVariable MatlabCode -> MSStatement MatlabCode
getFileInputAll = VS (MatlabCode ValData)
-> VS (MatlabCode VarData) -> MS (MatlabCode (Doc, Terminator))
SValue MatlabCode -> SVariable MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
instance StringStatement MatlabCode where
stringSplit :: Char
-> SVariable MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
stringSplit = Char
-> VS (MatlabCode VarData)
-> VS (MatlabCode ValData)
-> MS (MatlabCode (Doc, Terminator))
Char
-> SVariable MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
stringListVals :: [SVariable MatlabCode]
-> SValue MatlabCode -> MSStatement MatlabCode
stringListVals = [VS (MatlabCode VarData)]
-> VS (MatlabCode ValData) -> MS (MatlabCode (Doc, Terminator))
[SVariable MatlabCode]
-> SValue MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
stringListLists :: [SVariable MatlabCode]
-> SValue MatlabCode -> MSStatement MatlabCode
stringListLists = [VS (MatlabCode VarData)]
-> VS (MatlabCode ValData) -> MS (MatlabCode (Doc, Terminator))
[SVariable MatlabCode]
-> SValue MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
instance FunctionSym MatlabCode where
type Function MatlabCode = FuncData
instance FuncAppStatement MatlabCode where
inOutCall :: InOutCall MatlabCode
inOutCall = PosCall MatlabCode -> InOutCall MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
(Label -> VSType r -> [SValue r] -> SValue r)
-> Label
-> [SValue r]
-> [SVariable r]
-> [SVariable r]
-> MSStatement r
CP.inOutCall PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp
extInOutCall :: Label -> InOutCall MatlabCode
extInOutCall = Label
-> Label
-> [VS (MatlabCode ValData)]
-> [VS (MatlabCode VarData)]
-> [VS (MatlabCode VarData)]
-> MS (MatlabCode (Doc, Terminator))
Label -> InOutCall MatlabCode
forall a. HasCallStack => a
undefined
instance CommentStatement MatlabCode where
comment :: Label -> MSStatement MatlabCode
comment = Doc -> Label -> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
Doc -> Label -> MSStatement r
G.comment Doc
mlCmtStart
instance ControlStatement MatlabCode where
break :: MSStatement MatlabCode
break = MS (MatlabCode (Doc, Terminator))
MSStatement MatlabCode
forall a. HasCallStack => a
undefined
continue :: MSStatement MatlabCode
continue = MS (MatlabCode (Doc, Terminator))
MSStatement MatlabCode
forall a. HasCallStack => a
undefined
returnStmt :: SValue MatlabCode -> MSStatement MatlabCode
returnStmt SValue MatlabCode
v' = do
MatlabCode ValData
v <- LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode ValData))
MethodState
ValueState
-> VS (MatlabCode ValData)
-> StateT MethodState Identity (MatlabCode ValData)
forall c.
LensLike'
(Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode ValData))
MethodState
ValueState
(ValueState -> Focusing Identity (MatlabCode ValData) ValueState)
-> MethodState
-> Focusing Identity (MatlabCode ValData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (MatlabCode ValData)
SValue MatlabCode
v'
Label -> VSType MatlabCode -> SVariable MatlabCode
forall (r :: * -> *).
VariableSym r =>
Label -> VSType r -> SVariable r
var Label
mlRet (MatlabCode TypeData -> VSType MatlabCode
forall a s. a -> State s a
toState (MatlabCode (Value MatlabCode) -> MatlabCode TypeData
forall (r :: * -> *). ValueSym r => r (Value r) -> r TypeData
valueType MatlabCode ValData
MatlabCode (Value MatlabCode)
v)) SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
&= SValue MatlabCode
v'
throw :: Label -> MSStatement MatlabCode
throw = Label -> MS (MatlabCode (Doc, Terminator))
Label -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
ifCond :: [(SValue MatlabCode, MSBody MatlabCode)]
-> MSBody MatlabCode -> MSStatement MatlabCode
ifCond = (Doc -> Doc)
-> Doc
-> OptionalSpace
-> Doc
-> Doc
-> Doc
-> [(SValue MatlabCode, MSBody MatlabCode)]
-> MSBody MatlabCode
-> MSStatement MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
(Doc -> Doc)
-> Doc
-> OptionalSpace
-> Doc
-> Doc
-> Doc
-> [(SValue r, MSBody r)]
-> MSBody r
-> MSStatement r
G.ifCond Doc -> Doc
forall a. a -> a
id Doc
empty (Doc -> OptionalSpace
OSpace Doc
empty) Doc
R.elseIfLabel Doc
empty (Label -> Doc
text Label
"end")
switch :: SValue MatlabCode
-> [(SValue MatlabCode, MSBody MatlabCode)]
-> MSBody MatlabCode
-> MSStatement MatlabCode
switch = VS (MatlabCode ValData)
-> [(VS (MatlabCode ValData), State MethodState (MatlabCode Doc))]
-> State MethodState (MatlabCode Doc)
-> MS (MatlabCode (Doc, Terminator))
SValue MatlabCode
-> [(SValue MatlabCode, MSBody MatlabCode)]
-> MSBody MatlabCode
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
ifExists :: SValue MatlabCode
-> MSBody MatlabCode -> MSBody MatlabCode -> MSStatement MatlabCode
ifExists = VS (MatlabCode ValData)
-> State MethodState (MatlabCode Doc)
-> State MethodState (MatlabCode Doc)
-> MS (MatlabCode (Doc, Terminator))
SValue MatlabCode
-> MSBody MatlabCode -> MSBody MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
for :: MSStatement MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
-> MSBody MatlabCode
-> MSStatement MatlabCode
for = MS (MatlabCode (Doc, Terminator))
-> VS (MatlabCode ValData)
-> MS (MatlabCode (Doc, Terminator))
-> State MethodState (MatlabCode Doc)
-> MS (MatlabCode (Doc, Terminator))
MSStatement MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
-> MSBody MatlabCode
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
forRange :: SVariable MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> MSBody MatlabCode
-> MSStatement MatlabCode
forRange = VS (MatlabCode VarData)
-> VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
-> VS (MatlabCode ValData)
-> State MethodState (MatlabCode Doc)
-> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> SValue MatlabCode
-> MSBody MatlabCode
-> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
forEach :: SVariable MatlabCode
-> SValue MatlabCode -> MSBody MatlabCode -> MSStatement MatlabCode
forEach = VS (MatlabCode VarData)
-> VS (MatlabCode ValData)
-> State MethodState (MatlabCode Doc)
-> MS (MatlabCode (Doc, Terminator))
SVariable MatlabCode
-> SValue MatlabCode -> MSBody MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
while :: SValue MatlabCode -> MSBody MatlabCode -> MSStatement MatlabCode
while = VS (MatlabCode ValData)
-> State MethodState (MatlabCode Doc)
-> MS (MatlabCode (Doc, Terminator))
SValue MatlabCode -> MSBody MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
tryCatch :: MSBody MatlabCode -> MSBody MatlabCode -> MSStatement MatlabCode
tryCatch = State MethodState (MatlabCode Doc)
-> State MethodState (MatlabCode Doc)
-> MS (MatlabCode (Doc, Terminator))
MSBody MatlabCode -> MSBody MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
assert :: SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
assert = VS (MatlabCode ValData)
-> VS (MatlabCode ValData) -> MS (MatlabCode (Doc, Terminator))
SValue MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall a. HasCallStack => a
undefined
instance VisibilitySym MatlabCode where
type Visibility MatlabCode = Doc
private :: MatlabCode (Visibility MatlabCode)
private = Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty
public :: MatlabCode (Visibility MatlabCode)
public = Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
empty
instance RenderVisibility MatlabCode where
visibilityFromData :: VisibilityTag -> Doc -> MatlabCode (Visibility MatlabCode)
visibilityFromData = VisibilityTag -> Doc -> MatlabCode Doc
VisibilityTag -> Doc -> MatlabCode (Visibility MatlabCode)
forall a. HasCallStack => a
undefined
instance VisibilityElim MatlabCode where
visibility :: MatlabCode (Visibility MatlabCode) -> Doc
visibility = MatlabCode Doc -> Doc
MatlabCode (Visibility MatlabCode) -> Doc
forall a. MatlabCode a -> a
unMLC
instance MethodTypeSym MatlabCode where
type MethodType MatlabCode = TypeData
mType :: VSType MatlabCode -> MSMthdType MatlabCode
mType = LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode TypeData))
MethodState
ValueState
-> VSType MatlabCode
-> StateT MethodState Identity (MatlabCode TypeData)
forall c.
LensLike'
(Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode TypeData))
MethodState
ValueState
(ValueState -> Focusing Identity (MatlabCode TypeData) ValueState)
-> MethodState
-> Focusing Identity (MatlabCode TypeData) MethodState
Lens' MethodState ValueState
lensMStoVS
instance ParameterSym MatlabCode where
type Parameter MatlabCode = ParamData
param :: SVariable MatlabCode -> MSParameter MatlabCode
param = (MatlabCode (Variable MatlabCode) -> Doc)
-> SVariable MatlabCode -> MSParameter MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
(r (Variable r) -> Doc) -> SVariable r -> MSParameter r
G.param MatlabCode (Variable MatlabCode) -> Doc
mlParam
pointerParam :: SVariable MatlabCode -> MSParameter MatlabCode
pointerParam = SVariable MatlabCode -> MSParameter MatlabCode
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
param
instance RenderParam MatlabCode where
paramFromData :: SVariable MatlabCode -> Doc -> MSParameter MatlabCode
paramFromData SVariable MatlabCode
v' Doc
d = do
MatlabCode VarData
v <- LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode VarData))
MethodState
ValueState
-> VS (MatlabCode VarData)
-> StateT MethodState Identity (MatlabCode VarData)
forall c.
LensLike'
(Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode VarData))
MethodState
ValueState
(ValueState -> Focusing Identity (MatlabCode VarData) ValueState)
-> MethodState
-> Focusing Identity (MatlabCode VarData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (MatlabCode VarData)
SVariable MatlabCode
v'
MatlabCode ParamData -> State MethodState (MatlabCode ParamData)
forall a s. a -> State s a
toState (MatlabCode ParamData -> State MethodState (MatlabCode ParamData))
-> MatlabCode ParamData -> State MethodState (MatlabCode ParamData)
forall a b. (a -> b) -> a -> b
$ (VarData -> Doc -> ParamData)
-> MatlabCode VarData -> MatlabCode Doc -> MatlabCode ParamData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues VarData -> Doc -> ParamData
pd MatlabCode VarData
v (Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode Doc
d)
instance ParamElim MatlabCode where
parameterName :: MatlabCode (Parameter MatlabCode) -> Label
parameterName = MatlabCode VarData -> Label
MatlabCode (Variable MatlabCode) -> Label
forall (r :: * -> *). VariableElim r => r (Variable r) -> Label
variableName (MatlabCode VarData -> Label)
-> (MatlabCode ParamData -> MatlabCode VarData)
-> MatlabCode ParamData
-> Label
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> VarData)
-> MatlabCode ParamData -> MatlabCode VarData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> VarData
paramVar
parameterType :: MatlabCode (Parameter MatlabCode) -> MatlabCode TypeData
parameterType = MatlabCode VarData -> MatlabCode TypeData
MatlabCode (Variable MatlabCode) -> MatlabCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r TypeData
variableType (MatlabCode VarData -> MatlabCode TypeData)
-> (MatlabCode ParamData -> MatlabCode VarData)
-> MatlabCode ParamData
-> MatlabCode TypeData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ParamData -> VarData)
-> MatlabCode ParamData -> MatlabCode VarData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ParamData -> VarData
paramVar
parameter :: MatlabCode (Parameter MatlabCode) -> Doc
parameter = ParamData -> Doc
paramDoc (ParamData -> Doc)
-> (MatlabCode ParamData -> ParamData)
-> MatlabCode ParamData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode ParamData -> ParamData
forall a. MatlabCode a -> a
unMLC
instance MethodSym MatlabCode where
type Method MatlabCode = MethodData
docMain :: MSBody MatlabCode -> SMethod MatlabCode
docMain = MSBody MatlabCode -> SMethod MatlabCode
forall (r :: * -> *). MethodSym r => MSBody r -> SMethod r
mainFunction
function :: Label
-> MatlabCode (Visibility MatlabCode)
-> VSType MatlabCode
-> [MSParameter MatlabCode]
-> MSBody MatlabCode
-> SMethod MatlabCode
function = Label
-> MatlabCode (Visibility MatlabCode)
-> VSType MatlabCode
-> [MSParameter MatlabCode]
-> MSBody MatlabCode
-> SMethod MatlabCode
forall (r :: * -> *).
ProcRenderSym r =>
Label
-> r (Visibility r)
-> VSType r
-> [MSParameter r]
-> MSBody r
-> SMethod r
A.function
mainFunction :: MSBody MatlabCode -> SMethod MatlabCode
mainFunction = MSBody MatlabCode -> SMethod MatlabCode
forall (r :: * -> *). CommonRenderSym r => MSBody r -> SMethod r
CP.mainBody
docFunc :: Label
-> [Label]
-> Maybe Label
-> SMethod MatlabCode
-> SMethod MatlabCode
docFunc = FuncDocRenderer
-> Label
-> [Label]
-> Maybe Label
-> SMethod MatlabCode
-> SMethod MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
FuncDocRenderer
-> Label -> [Label] -> Maybe Label -> SMethod r -> SMethod r
G.docFunc FuncDocRenderer
CP.functionDoc
inOutFunc :: Label -> MatlabCode (Visibility MatlabCode) -> InOutFunc MatlabCode
inOutFunc Label
n MatlabCode (Visibility MatlabCode)
_ [SVariable MatlabCode]
ins [SVariable MatlabCode]
outs [SVariable MatlabCode]
both MSBody MatlabCode
b = do
[MatlabCode (Parameter MatlabCode)]
pms <- (SVariable MatlabCode -> MSParameter MatlabCode)
-> [SVariable MatlabCode]
-> StateT MethodState Identity [MatlabCode (Parameter MatlabCode)]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM SVariable MatlabCode -> MSParameter MatlabCode
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MSParameter r
param ([SVariable MatlabCode]
both [SVariable MatlabCode]
-> [SVariable MatlabCode] -> [SVariable MatlabCode]
forall a. [a] -> [a] -> [a]
++ [SVariable MatlabCode]
ins)
[MatlabCode VarData]
rets <- (VS (MatlabCode VarData)
-> StateT MethodState Identity (MatlabCode VarData))
-> [VS (MatlabCode VarData)]
-> StateT MethodState Identity [MatlabCode VarData]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM (LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode VarData))
MethodState
ValueState
-> VS (MatlabCode VarData)
-> StateT MethodState Identity (MatlabCode VarData)
forall c.
LensLike'
(Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode VarData))
MethodState
ValueState
(ValueState -> Focusing Identity (MatlabCode VarData) ValueState)
-> MethodState
-> Focusing Identity (MatlabCode VarData) MethodState
Lens' MethodState ValueState
lensMStoVS) ([VS (MatlabCode VarData)]
[SVariable MatlabCode]
both [VS (MatlabCode VarData)]
-> [VS (MatlabCode VarData)] -> [VS (MatlabCode VarData)]
forall a. [a] -> [a] -> [a]
++ [VS (MatlabCode VarData)]
[SVariable MatlabCode]
outs)
MatlabCode Doc
bod <- State MethodState (MatlabCode Doc)
MSBody MatlabCode
b
MatlabCode MethodData
-> StateT MethodState Identity (MatlabCode MethodData)
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MatlabCode MethodData
-> StateT MethodState Identity (MatlabCode MethodData))
-> MatlabCode MethodData
-> StateT MethodState Identity (MatlabCode MethodData)
forall a b. (a -> b) -> a -> b
$ MethodData -> MatlabCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> MatlabCode MethodData)
-> MethodData -> MatlabCode MethodData
forall a b. (a -> b) -> a -> b
$ Doc -> MethodData
mthd (Doc -> MethodData) -> Doc -> MethodData
forall a b. (a -> b) -> a -> b
$ Label -> [Doc] -> [MatlabCode (Parameter MatlabCode)] -> Doc -> Doc
forall (r :: * -> *).
CommonRenderSym r =>
Label -> [Doc] -> [r (Parameter r)] -> Doc -> Doc
mlFuncDoc Label
n ((MatlabCode VarData -> Doc) -> [MatlabCode VarData] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map MatlabCode VarData -> Doc
MatlabCode (Variable MatlabCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable [MatlabCode VarData]
rets) [MatlabCode (Parameter MatlabCode)]
pms (MatlabCode (Body MatlabCode) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body MatlabCode Doc
MatlabCode (Body MatlabCode)
bod)
docInOutFunc :: Label
-> MatlabCode (Visibility MatlabCode) -> DocInOutFunc MatlabCode
docInOutFunc Label
n MatlabCode (Visibility MatlabCode)
s = FuncDocRenderer -> InOutFunc MatlabCode -> DocInOutFunc MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
FuncDocRenderer
-> ([SVariable r]
-> [SVariable r] -> [SVariable r] -> MSBody r -> SMethod r)
-> Label
-> [(Label, SVariable r)]
-> [(Label, SVariable r)]
-> [(Label, SVariable r)]
-> MSBody r
-> SMethod r
CP.docInOutFunc' FuncDocRenderer
CP.functionDoc (Label -> MatlabCode (Visibility MatlabCode) -> InOutFunc MatlabCode
forall (r :: * -> *).
MethodSym r =>
Label -> r (Visibility r) -> InOutFunc r
inOutFunc Label
n MatlabCode (Visibility MatlabCode)
s)
instance RenderMethod MatlabCode where
commentedFunc :: State MethodState (MatlabCode Doc)
-> SMethod MatlabCode -> SMethod MatlabCode
commentedFunc State MethodState (MatlabCode Doc)
cmt SMethod MatlabCode
m = (MatlabCode MethodData
-> MatlabCode (Doc -> Doc) -> MatlabCode MethodData)
-> StateT MethodState Identity (MatlabCode MethodData)
-> State MethodState (MatlabCode (Doc -> Doc))
-> StateT MethodState Identity (MatlabCode MethodData)
forall a b c s.
(a -> b -> c) -> State s a -> State s b -> State s c
on2StateValues ((MethodData -> (Doc -> Doc) -> MethodData)
-> MatlabCode MethodData
-> MatlabCode (Doc -> Doc)
-> MatlabCode MethodData
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> r a -> r b -> r c
on2CodeValues MethodData -> (Doc -> Doc) -> MethodData
updateMthd) StateT MethodState Identity (MatlabCode MethodData)
SMethod MatlabCode
m
((MatlabCode Doc -> MatlabCode (Doc -> Doc))
-> State MethodState (MatlabCode Doc)
-> State MethodState (MatlabCode (Doc -> Doc))
forall a b s. (a -> b) -> State s a -> State s b
onStateValue ((Doc -> Doc -> Doc) -> MatlabCode Doc -> MatlabCode (Doc -> Doc)
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue Doc -> Doc -> Doc
R.commentedItem) State MethodState (MatlabCode Doc)
cmt)
mthdFromData :: VisibilityTag -> Doc -> SMethod MatlabCode
mthdFromData VisibilityTag
_ Doc
d = MatlabCode (Method MatlabCode) -> SMethod MatlabCode
forall a s. a -> State s a
toState (MatlabCode (Method MatlabCode) -> SMethod MatlabCode)
-> MatlabCode (Method MatlabCode) -> SMethod MatlabCode
forall a b. (a -> b) -> a -> b
$ MethodData -> MatlabCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> MatlabCode MethodData)
-> MethodData -> MatlabCode MethodData
forall a b. (a -> b) -> a -> b
$ Doc -> MethodData
mthd Doc
d
instance ProcRenderMethod MatlabCode where
intFunc :: Bool
-> Label
-> MatlabCode (Visibility MatlabCode)
-> MSMthdType MatlabCode
-> [MSParameter MatlabCode]
-> MSBody MatlabCode
-> SMethod MatlabCode
intFunc Bool
_ Label
n MatlabCode (Visibility MatlabCode)
_ MSMthdType MatlabCode
t [MSParameter MatlabCode]
ps MSBody MatlabCode
b = do
[MatlabCode ParamData]
pms <- [State MethodState (MatlabCode ParamData)]
-> StateT MethodState Identity [MatlabCode ParamData]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [State MethodState (MatlabCode ParamData)]
[MSParameter MatlabCode]
ps
MatlabCode TypeData
tp <- StateT MethodState Identity (MatlabCode TypeData)
MSMthdType MatlabCode
t
MatlabCode Doc
bod <- State MethodState (MatlabCode Doc)
MSBody MatlabCode
b
let outs :: [Doc]
outs = [Label -> Doc
text Label
mlRet | TypeData -> CodeType
cType (MatlabCode TypeData -> TypeData
forall a. MatlabCode a -> a
unMLC MatlabCode TypeData
tp) CodeType -> CodeType -> Bool
forall a. Eq a => a -> a -> Bool
/= CodeType
Void]
MatlabCode MethodData
-> StateT MethodState Identity (MatlabCode MethodData)
forall a. a -> StateT MethodState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MatlabCode MethodData
-> StateT MethodState Identity (MatlabCode MethodData))
-> MatlabCode MethodData
-> StateT MethodState Identity (MatlabCode MethodData)
forall a b. (a -> b) -> a -> b
$ MethodData -> MatlabCode MethodData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (MethodData -> MatlabCode MethodData)
-> MethodData -> MatlabCode MethodData
forall a b. (a -> b) -> a -> b
$ Doc -> MethodData
mthd (Doc -> MethodData) -> Doc -> MethodData
forall a b. (a -> b) -> a -> b
$ Label -> [Doc] -> [MatlabCode (Parameter MatlabCode)] -> Doc -> Doc
forall (r :: * -> *).
CommonRenderSym r =>
Label -> [Doc] -> [r (Parameter r)] -> Doc -> Doc
mlFuncDoc Label
n [Doc]
outs [MatlabCode ParamData]
[MatlabCode (Parameter MatlabCode)]
pms (MatlabCode (Body MatlabCode) -> Doc
forall (r :: * -> *). BodyElim r => r (Body r) -> Doc
RC.body MatlabCode Doc
MatlabCode (Body MatlabCode)
bod)
instance MethodElim MatlabCode where
method :: MatlabCode (Method MatlabCode) -> Doc
method = MethodData -> Doc
mthdDoc (MethodData -> Doc)
-> (MatlabCode MethodData -> MethodData)
-> MatlabCode MethodData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode MethodData -> MethodData
forall a. MatlabCode a -> a
unMLC
instance ModuleSym MatlabCode where
type Module MatlabCode = ModData
buildModule :: Label -> [Label] -> [SMethod MatlabCode] -> FSModule MatlabCode
buildModule Label
n [Label]
_ = Label
-> FS Doc -> FS Doc -> [SMethod MatlabCode] -> FSModule MatlabCode
forall (r :: * -> *).
ProcRenderSym r =>
Label -> FS Doc -> FS Doc -> [SMethod r] -> FSModule r
A.buildModule Label
n (Label -> FS Doc
mlMainFunc Label
n) (Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Doc
empty)
instance RenderMod MatlabCode where
modFromData :: Label -> FS Doc -> FSModule MatlabCode
modFromData Label
n = Label
-> (Doc -> MatlabCode (Module MatlabCode))
-> FS Doc
-> FSModule MatlabCode
forall (r :: * -> *).
Label -> (Doc -> r (Module r)) -> FS Doc -> FSModule r
A.modFromData Label
n (ModData -> MatlabCode ModData
forall (r :: * -> *) a. Monad r => a -> r a
toCode (ModData -> MatlabCode ModData)
-> (Doc -> ModData) -> Doc -> MatlabCode ModData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Label -> Doc -> ModData
md Label
n)
updateModuleDoc :: (Doc -> Doc)
-> MatlabCode (Module MatlabCode) -> MatlabCode (Module MatlabCode)
updateModuleDoc Doc -> Doc
f = (ModData -> ModData) -> MatlabCode ModData -> MatlabCode ModData
forall (r :: * -> *) a b. Functor r => (a -> b) -> r a -> r b
onCodeValue ((Doc -> Doc) -> ModData -> ModData
updateMod Doc -> Doc
f)
instance ModuleElim MatlabCode where
module' :: MatlabCode (Module MatlabCode) -> Doc
module' = ModData -> Doc
modDoc (ModData -> Doc)
-> (MatlabCode ModData -> ModData) -> MatlabCode ModData -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode ModData -> ModData
forall a. MatlabCode a -> a
unMLC
instance BlockCommentSym MatlabCode where
blockComment :: [Label] -> MatlabCode Doc
blockComment [Label]
lns = Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> MatlabCode Doc) -> Doc -> MatlabCode Doc
forall a b. (a -> b) -> a -> b
$ [Label] -> Doc
mlLineCmt [Label]
lns
docComment :: forall a. State a [Label] -> State a (MatlabCode Doc)
docComment = ([Label] -> MatlabCode Doc)
-> State a [Label] -> State a (MatlabCode Doc)
forall a b s. (a -> b) -> State s a -> State s b
onStateValue (Doc -> MatlabCode Doc
forall (r :: * -> *) a. Monad r => a -> r a
toCode (Doc -> MatlabCode Doc)
-> ([Label] -> Doc) -> [Label] -> MatlabCode Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Label] -> Doc
mlLineCmt)
instance BlockCommentElim MatlabCode where
blockComment' :: MatlabCode Doc -> Doc
blockComment' = MatlabCode Doc -> Doc
forall a. MatlabCode a -> a
unMLC
mlName, mlVersion :: String
mlName :: Label
mlName = Label
"MATLAB"
mlVersion :: Label
mlVersion = Label
"R2024b"
mlExt :: String
mlExt :: Label
mlExt = Label
"m"
mlRet :: String
mlRet :: Label
mlRet = Label
"result"
mlTy :: CodeType -> String -> VSType MatlabCode
mlTy :: CodeType -> Label -> VSType MatlabCode
mlTy CodeType
c Label
s = CodeType -> Label -> Doc -> VSType MatlabCode
forall (r :: * -> *).
Monad r =>
CodeType -> Label -> Doc -> VSType r
typeFromData CodeType
c Label
s (Label -> Doc
text Label
s)
mlParam :: MatlabCode (Variable MatlabCode) -> Doc
mlParam :: MatlabCode (Variable MatlabCode) -> Doc
mlParam = MatlabCode (Variable MatlabCode) -> Doc
forall (r :: * -> *). InternalVarElim r => r (Variable r) -> Doc
RC.variable
mlFuncDoc :: (CommonRenderSym r) => Label -> [Doc] -> [r (Parameter r)] -> Doc
-> Doc
mlFuncDoc :: forall (r :: * -> *).
CommonRenderSym r =>
Label -> [Doc] -> [r (Parameter r)] -> Doc -> Doc
mlFuncDoc Label
n [Doc]
outs [r (Parameter r)]
pms Doc
bod =
[Doc] -> Doc
vcat [Label -> Doc
text Label
"function" Doc -> Doc -> Doc
<+> (Doc
retDoc Doc -> Doc -> Doc
<> Label -> Doc
text Label
n) Doc -> Doc -> Doc
<> Doc -> Doc
parens ([r (Parameter r)] -> Doc
forall (r :: * -> *). CommonRenderSym r => [r (Parameter r)] -> Doc
R.parameterList [r (Parameter r)]
pms),
Doc -> Doc
indent Doc
bod,
Label -> Doc
text Label
"end"]
where retDoc :: Doc
retDoc = case [Doc]
outs of
[] -> Doc
empty
[Doc
o] -> Doc
o Doc -> Doc -> Doc
<+> Doc
equals Doc -> Doc -> Doc
<> Label -> Doc
text Label
" "
[Doc]
os -> Doc -> Doc
brackets ([Doc] -> Doc
hcat (Doc -> [Doc] -> [Doc]
punctuate (Label -> Doc
text Label
", ") [Doc]
os)) Doc -> Doc -> Doc
<+> Doc
equals Doc -> Doc -> Doc
<> Label -> Doc
text Label
" "
mlCmtStart :: Doc
mlCmtStart :: Doc
mlCmtStart = Label -> Doc
text Label
"%"
mlLineCmt :: [String] -> Doc
mlLineCmt :: [Label] -> Doc
mlLineCmt = [Doc] -> Doc
vcat ([Doc] -> Doc) -> ([Label] -> [Doc]) -> [Label] -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Label -> Doc) -> [Label] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map ((Doc
mlCmtStart Doc -> Doc -> Doc
<+>) (Doc -> Doc) -> (Label -> Doc) -> Label -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Label -> Doc
text)
mlPrintFunc :: SValue MatlabCode
mlPrintFunc :: SValue MatlabCode
mlPrintFunc = VSType MatlabCode -> Doc -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
VSType r -> Doc -> SValue r
mkStateVal VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
void (Label -> Doc
text Label
"fprintf")
mlMainFunc :: Label -> FS Doc
mlMainFunc :: Label -> FS Doc
mlMainFunc Label
n = do
Doc
b <- FS Doc
getMainDoc
Doc -> FS Doc
forall a. a -> StateT FileState Identity a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Doc -> FS Doc) -> Doc -> FS Doc
forall a b. (a -> b) -> a -> b
$ Doc -> Doc -> Doc
emptyIfEmpty Doc
b (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
vcat
[Label -> Doc
text Label
"function" Doc -> Doc -> Doc
<+> Label -> Doc
text Label
n Doc -> Doc -> Doc
<> Doc -> Doc
parens (Label -> Doc
text Label
"varargin"),
Doc -> Doc
indent Doc
b,
Label -> Doc
text Label
"end"]
mlArg :: SValue MatlabCode -> SValue MatlabCode
mlArg :: SValue MatlabCode -> SValue MatlabCode
mlArg SValue MatlabCode
n' = do
MatlabCode ValData
n <- VS (MatlabCode ValData)
SValue MatlabCode
n'
MatlabCode TypeData
s <- VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
string
MatlabCode TypeData -> Doc -> SValue MatlabCode
forall (r :: * -> *).
CommonRenderSym r =>
r TypeData -> Doc -> SValue r
mkVal MatlabCode TypeData
s (Label -> Doc
text Label
"varargin" Doc -> Doc -> Doc
<> Doc -> Doc
braces (MatlabCode (Value MatlabCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value MatlabCode ValData
MatlabCode (Value MatlabCode)
n))
mlReadLine :: SValue MatlabCode -> SValue MatlabCode
mlReadLine :: SValue MatlabCode -> SValue MatlabCode
mlReadLine SValue MatlabCode
f = PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp Label
"fgetl" VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
string [SValue MatlabCode
f]
mlInput :: SValue MatlabCode -> SVariable MatlabCode -> MSStatement MatlabCode
mlInput :: SValue MatlabCode -> SVariable MatlabCode -> MSStatement MatlabCode
mlInput SValue MatlabCode
inSrc SVariable MatlabCode
v = SVariable MatlabCode
v SVariable MatlabCode -> SValue MatlabCode -> MSStatement MatlabCode
forall (r :: * -> *).
AssignStatement r =>
SVariable r -> SValue r -> MSStatement r
&= (VS (MatlabCode VarData)
SVariable MatlabCode
v VS (MatlabCode VarData)
-> (MatlabCode VarData -> VS (MatlabCode ValData))
-> VS (MatlabCode ValData)
forall a b.
StateT ValueState Identity a
-> (a -> StateT ValueState Identity b)
-> StateT ValueState Identity b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= CodeType -> VS (MatlabCode ValData)
CodeType -> SValue MatlabCode
mlInput' (CodeType -> VS (MatlabCode ValData))
-> (MatlabCode VarData -> CodeType)
-> MatlabCode VarData
-> VS (MatlabCode ValData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode TypeData -> CodeType
forall (r :: * -> *). UnRepr r TypeData => r TypeData -> CodeType
getCodeType (MatlabCode TypeData -> CodeType)
-> (MatlabCode VarData -> MatlabCode TypeData)
-> MatlabCode VarData
-> CodeType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MatlabCode VarData -> MatlabCode TypeData
MatlabCode (Variable MatlabCode) -> MatlabCode TypeData
forall (r :: * -> *).
VariableElim r =>
r (Variable r) -> r TypeData
variableType)
where mlInput' :: CodeType -> SValue MatlabCode
mlInput' CodeType
Integer = PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp Label
"str2double" VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
int [SValue MatlabCode
inSrc]
mlInput' CodeType
Float = PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp Label
"str2double" VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
float [SValue MatlabCode
inSrc]
mlInput' CodeType
Double = PosCall MatlabCode
forall (r :: * -> *). ValueExpression r => PosCall r
funcApp Label
"str2double" VSType MatlabCode
forall (r :: * -> *). TypeSym r => VSType r
double [SValue MatlabCode
inSrc]
mlInput' CodeType
String = SValue MatlabCode
inSrc
mlInput' CodeType
_ = Label -> VS (MatlabCode ValData)
forall a. HasCallStack => Label -> a
error Label
"Attempt to read a value of unreadable type"
mlPrint :: Bool -> Maybe (SValue MatlabCode) -> SValue MatlabCode
-> SValue MatlabCode -> MSStatement MatlabCode
mlPrint :: Bool
-> Maybe (SValue MatlabCode)
-> SValue MatlabCode
-> SValue MatlabCode
-> MSStatement MatlabCode
mlPrint Bool
newLn Maybe (SValue MatlabCode)
f' SValue MatlabCode
_ SValue MatlabCode
v' = do
MatlabCode ValData
v <- LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode ValData))
MethodState
ValueState
-> VS (MatlabCode ValData)
-> StateT MethodState Identity (MatlabCode ValData)
forall c.
LensLike'
(Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode ValData))
MethodState
ValueState
(ValueState -> Focusing Identity (MatlabCode ValData) ValueState)
-> MethodState
-> Focusing Identity (MatlabCode ValData) MethodState
Lens' MethodState ValueState
lensMStoVS VS (MatlabCode ValData)
SValue MatlabCode
v'
Maybe (MatlabCode ValData)
mf <- (VS (MatlabCode ValData)
-> StateT MethodState Identity (MatlabCode ValData))
-> Maybe (VS (MatlabCode ValData))
-> StateT MethodState Identity (Maybe (MatlabCode ValData))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Maybe a -> f (Maybe b)
traverse (LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode ValData))
MethodState
ValueState
-> VS (MatlabCode ValData)
-> StateT MethodState Identity (MatlabCode ValData)
forall c.
LensLike'
(Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
(Zoomed (StateT ValueState Identity) (MatlabCode ValData))
MethodState
ValueState
(ValueState -> Focusing Identity (MatlabCode ValData) ValueState)
-> MethodState
-> Focusing Identity (MatlabCode ValData) MethodState
Lens' MethodState ValueState
lensMStoVS) Maybe (VS (MatlabCode ValData))
Maybe (SValue MatlabCode)
f'
let fmt :: Label
fmt = case TypeData -> CodeType
cType (ValData -> TypeData
valType (MatlabCode ValData -> ValData
forall a. MatlabCode a -> a
unMLC MatlabCode ValData
v)) of
CodeType
String -> Label
"%s"
CodeType
_ -> Label
"%g"
nl :: Label
nl = if Bool
newLn then Label
"\\n" else Label
""
fileArg :: Doc
fileArg = Doc
-> (MatlabCode ValData -> Doc) -> Maybe (MatlabCode ValData) -> Doc
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Doc
empty (\MatlabCode ValData
fv -> MatlabCode (Value MatlabCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value MatlabCode ValData
MatlabCode (Value MatlabCode)
fv Doc -> Doc -> Doc
<> Doc
listSep') Maybe (MatlabCode ValData)
mf
Doc -> Terminator -> MSStatement MatlabCode
forall (r :: * -> *).
RenderStatement r =>
Doc -> Terminator -> MSStatement r
stmtFromData (Label -> Doc
text Label
"fprintf" Doc -> Doc -> Doc
<>
Doc -> Doc
parens (Doc
fileArg Doc -> Doc -> Doc
<> Label -> Doc
text (Label
"'" Label -> Label -> Label
forall a. [a] -> [a] -> [a]
++ Label
fmt Label -> Label -> Label
forall a. [a] -> [a] -> [a]
++ Label
nl Label -> Label -> Label
forall a. [a] -> [a] -> [a]
++ Label
"'") Doc -> Doc -> Doc
<> Doc
listSep' Doc -> Doc -> Doc
<> MatlabCode (Value MatlabCode) -> Doc
forall (r :: * -> *). ValueElim r => r (Value r) -> Doc
RC.value MatlabCode ValData
MatlabCode (Value MatlabCode)
v))
Terminator
Semi