{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}

-- | MVP renderer for logging statements.

module Drasil.Shared.LanguageRenderer.LoggingFor (LoggingFor(..)) where

import Drasil.Shared.InterfaceCommon
import qualified Drasil.GProc.InterfaceProc as P
import qualified Drasil.GOOL.InterfaceGOOL as G
import Drasil.Shared.State

import Prelude hiding (print, break, pi, log, floor, sin, cos, tan, exp)
import Control.Lens (zoom)
import Data.Kind (Type)
import Control.Monad.State
import Data.Bifunctor (bimap)
import Drasil.Shared.CodeType (CodeType)

newtype LoggingFor (r :: Type -> Type) a = LC {forall (r :: * -> *) a. LoggingFor r a -> r a
unLC :: r a}
  deriving newtype ((forall a b. (a -> b) -> LoggingFor r a -> LoggingFor r b)
-> (forall a b. a -> LoggingFor r b -> LoggingFor r a)
-> Functor (LoggingFor r)
forall a b. a -> LoggingFor r b -> LoggingFor r a
forall a b. (a -> b) -> LoggingFor r a -> LoggingFor r b
forall (r :: * -> *) a b.
Functor r =>
a -> LoggingFor r b -> LoggingFor r a
forall (r :: * -> *) a b.
Functor r =>
(a -> b) -> LoggingFor r a -> LoggingFor r b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall (r :: * -> *) a b.
Functor r =>
(a -> b) -> LoggingFor r a -> LoggingFor r b
fmap :: forall a b. (a -> b) -> LoggingFor r a -> LoggingFor r b
$c<$ :: forall (r :: * -> *) a b.
Functor r =>
a -> LoggingFor r b -> LoggingFor r a
<$ :: forall a b. a -> LoggingFor r b -> LoggingFor r a
Functor, Functor (LoggingFor r)
Functor (LoggingFor r) =>
(forall a. a -> LoggingFor r a)
-> (forall a b.
    LoggingFor r (a -> b) -> LoggingFor r a -> LoggingFor r b)
-> (forall a b c.
    (a -> b -> c)
    -> LoggingFor r a -> LoggingFor r b -> LoggingFor r c)
-> (forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r b)
-> (forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r a)
-> Applicative (LoggingFor r)
forall a. a -> LoggingFor r a
forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r a
forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r b
forall a b.
LoggingFor r (a -> b) -> LoggingFor r a -> LoggingFor r b
forall a b c.
(a -> b -> c) -> LoggingFor r a -> LoggingFor r b -> LoggingFor r c
forall (f :: * -> *).
Functor f =>
(forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
forall (r :: * -> *). Applicative r => Functor (LoggingFor r)
forall (r :: * -> *) a. Applicative r => a -> LoggingFor r a
forall (r :: * -> *) a b.
Applicative r =>
LoggingFor r a -> LoggingFor r b -> LoggingFor r a
forall (r :: * -> *) a b.
Applicative r =>
LoggingFor r a -> LoggingFor r b -> LoggingFor r b
forall (r :: * -> *) a b.
Applicative r =>
LoggingFor r (a -> b) -> LoggingFor r a -> LoggingFor r b
forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> LoggingFor r a -> LoggingFor r b -> LoggingFor r c
$cpure :: forall (r :: * -> *) a. Applicative r => a -> LoggingFor r a
pure :: forall a. a -> LoggingFor r a
$c<*> :: forall (r :: * -> *) a b.
Applicative r =>
LoggingFor r (a -> b) -> LoggingFor r a -> LoggingFor r b
<*> :: forall a b.
LoggingFor r (a -> b) -> LoggingFor r a -> LoggingFor r b
$cliftA2 :: forall (r :: * -> *) a b c.
Applicative r =>
(a -> b -> c) -> LoggingFor r a -> LoggingFor r b -> LoggingFor r c
liftA2 :: forall a b c.
(a -> b -> c) -> LoggingFor r a -> LoggingFor r b -> LoggingFor r c
$c*> :: forall (r :: * -> *) a b.
Applicative r =>
LoggingFor r a -> LoggingFor r b -> LoggingFor r b
*> :: forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r b
$c<* :: forall (r :: * -> *) a b.
Applicative r =>
LoggingFor r a -> LoggingFor r b -> LoggingFor r a
<* :: forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r a
Applicative, Applicative (LoggingFor r)
Applicative (LoggingFor r) =>
(forall a b.
 LoggingFor r a -> (a -> LoggingFor r b) -> LoggingFor r b)
-> (forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r b)
-> (forall a. a -> LoggingFor r a)
-> Monad (LoggingFor r)
forall a. a -> LoggingFor r a
forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r b
forall a b.
LoggingFor r a -> (a -> LoggingFor r b) -> LoggingFor r b
forall (r :: * -> *). Monad r => Applicative (LoggingFor r)
forall (r :: * -> *) a. Monad r => a -> LoggingFor r a
forall (r :: * -> *) a b.
Monad r =>
LoggingFor r a -> LoggingFor r b -> LoggingFor r b
forall (r :: * -> *) a b.
Monad r =>
LoggingFor r a -> (a -> LoggingFor r b) -> LoggingFor r b
forall (m :: * -> *).
Applicative m =>
(forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
$c>>= :: forall (r :: * -> *) a b.
Monad r =>
LoggingFor r a -> (a -> LoggingFor r b) -> LoggingFor r b
>>= :: forall a b.
LoggingFor r a -> (a -> LoggingFor r b) -> LoggingFor r b
$c>> :: forall (r :: * -> *) a b.
Monad r =>
LoggingFor r a -> LoggingFor r b -> LoggingFor r b
>> :: forall a b. LoggingFor r a -> LoggingFor r b -> LoggingFor r b
$creturn :: forall (r :: * -> *) a. Monad r => a -> LoggingFor r a
return :: forall a. a -> LoggingFor r a
Monad)

class LiftLogging u l | l -> u where
  liftLogging :: u -> l
  lowerLogging :: l -> u

instance (LiftLogging u1 l1, LiftLogging u2 l2) => LiftLogging (u1 -> u2) (l1 -> l2) where
  liftLogging :: (u1 -> u2) -> l1 -> l2
liftLogging u1 -> u2
k = u2 -> l2
forall u l. LiftLogging u l => u -> l
liftLogging (u2 -> l2) -> (l1 -> u2) -> l1 -> l2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. u1 -> u2
k (u1 -> u2) -> (l1 -> u1) -> l1 -> u2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. l1 -> u1
forall u l. LiftLogging u l => l -> u
lowerLogging
  lowerLogging :: (l1 -> l2) -> u1 -> u2
lowerLogging l1 -> l2
k = l2 -> u2
forall u l. LiftLogging u l => l -> u
lowerLogging (l2 -> u2) -> (u1 -> l2) -> u1 -> u2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. l1 -> l2
k (l1 -> l2) -> (u1 -> l1) -> u1 -> l2
forall b c a. (b -> c) -> (a -> b) -> a -> c
. u1 -> l1
forall u l. LiftLogging u l => u -> l
liftLogging

instance LiftLogging (r a) (LoggingFor r a) where
  lowerLogging :: LoggingFor r a -> r a
lowerLogging = LoggingFor r a -> r a
forall (r :: * -> *) a. LoggingFor r a -> r a
unLC
  liftLogging :: r a -> LoggingFor r a
liftLogging = r a -> LoggingFor r a
forall (r :: * -> *) a. r a -> LoggingFor r a
LC

instance (LiftLogging u l) => LiftLogging (State s u) (State s l) where
  liftLogging :: State s u -> State s l
liftLogging = (u -> l) -> State s u -> State s l
forall a b. (a -> b) -> StateT s Identity a -> StateT s Identity b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap u -> l
forall u l. LiftLogging u l => u -> l
liftLogging
  lowerLogging :: State s l -> State s u
lowerLogging = (l -> u) -> State s l -> State s u
forall a b. (a -> b) -> StateT s Identity a -> StateT s Identity b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap l -> u
forall u l. LiftLogging u l => l -> u
lowerLogging

instance (LiftLogging u l) => LiftLogging (Maybe u) (Maybe l) where
  liftLogging :: Maybe u -> Maybe l
liftLogging = (u -> l) -> Maybe u -> Maybe l
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap u -> l
forall u l. LiftLogging u l => u -> l
liftLogging
  lowerLogging :: Maybe l -> Maybe u
lowerLogging = (l -> u) -> Maybe l -> Maybe u
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap l -> u
forall u l. LiftLogging u l => l -> u
lowerLogging

instance {-# OVERLAPPABLE #-} (LiftLogging u l) => LiftLogging [u] [l] where
  liftLogging :: [u] -> [l]
liftLogging = (u -> l) -> [u] -> [l]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap u -> l
forall u l. LiftLogging u l => u -> l
liftLogging
  lowerLogging :: [l] -> [u]
lowerLogging = (l -> u) -> [l] -> [u]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap l -> u
forall u l. LiftLogging u l => l -> u
lowerLogging

instance LiftLogging String String where
  liftLogging :: String -> String
liftLogging = String -> String
forall a. a -> a
id
  lowerLogging :: String -> String
lowerLogging = String -> String
forall a. a -> a
id

instance LiftLogging Integer Integer where
  liftLogging :: Integer -> Integer
liftLogging = Integer -> Integer
forall a. a -> a
id
  lowerLogging :: Integer -> Integer
lowerLogging = Integer -> Integer
forall a. a -> a
id

instance LiftLogging Char Char where
  liftLogging :: Char -> Char
liftLogging = Char -> Char
forall a. a -> a
id
  lowerLogging :: Char -> Char
lowerLogging = Char -> Char
forall a. a -> a
id

instance LiftLogging Double Double where
  liftLogging :: Double -> Double
liftLogging = Double -> Double
forall a. a -> a
id
  lowerLogging :: Double -> Double
lowerLogging = Double -> Double
forall a. a -> a
id

instance LiftLogging Float Float where
  liftLogging :: Float -> Float
liftLogging = Float -> Float
forall a. a -> a
id
  lowerLogging :: Float -> Float
lowerLogging = Float -> Float
forall a. a -> a
id

instance LiftLogging CodeType CodeType where
  liftLogging :: CodeType -> CodeType
liftLogging = CodeType -> CodeType
forall a. a -> a
id
  lowerLogging :: CodeType -> CodeType
lowerLogging = CodeType -> CodeType
forall a. a -> a
id

instance (LiftLogging u1 l1, LiftLogging u2 l2) => LiftLogging (u1, u2) (l1, l2) where
  liftLogging :: (u1, u2) -> (l1, l2)
liftLogging = (u1 -> l1) -> (u2 -> l2) -> (u1, u2) -> (l1, l2)
forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
forall (p :: * -> * -> *) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap u1 -> l1
forall u l. LiftLogging u l => u -> l
liftLogging u2 -> l2
forall u l. LiftLogging u l => u -> l
liftLogging
  lowerLogging :: (l1, l2) -> (u1, u2)
lowerLogging = (l1 -> u1) -> (l2 -> u2) -> (l1, l2) -> (u1, u2)
forall a b c d. (a -> b) -> (c -> d) -> (a, c) -> (b, d)
forall (p :: * -> * -> *) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap l1 -> u1
forall u l. LiftLogging u l => l -> u
lowerLogging l2 -> u2
forall u l. LiftLogging u l => l -> u
lowerLogging

-- TODO [Brandon Bosman, 06/19/2026]: This should be passed down from drasil-code
varLogFile :: (VariableSym r) => SVariable r
varLogFile :: forall (r :: * -> *). VariableSym r => SVariable r
varLogFile = String -> VS (r TypeData) -> SVariable r
forall (r :: * -> *).
VariableSym r =>
String -> VS (r TypeData) -> SVariable r
var String
"outfile" VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
outfile

valLogFile :: (VariableValue r) => SValue r
valLogFile :: forall (r :: * -> *). VariableValue r => SValue r
valLogFile = SVariable r -> SValue r
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf SVariable r
forall (r :: * -> *). VariableSym r => SVariable r
varLogFile

-- TODO [Brandon Bosman, 06/19/2026]: This should be passed down from drasil-code
logName :: (Literal r) => SValue r
logName :: forall (r :: * -> *). Literal r => SValue r
logName = String -> SValue r
forall (r :: * -> *). Literal r => String -> SValue r
litString String
"log.txt"

logVarUpdate
  :: (IOStatement r smt, VariableValue r, VariableElim r, Literal r)
  => SVariable (LoggingFor r)
  -> [MS (r smt)]
logVarUpdate :: forall (r :: * -> *) smt.
(IOStatement r smt, VariableValue r, VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r smt)]
logVarUpdate SVariable (LoggingFor r)
x =
  [ SVariable r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileA SVariable r
forall (r :: * -> *). VariableSym r => SVariable r
varLogFile SValue r
forall (r :: * -> *). Literal r => SValue r
logName
  , do
      String
x' <- r Variable -> String
forall (r :: * -> *). VariableElim r => r Variable -> String
variableName (r Variable -> String)
-> (LoggingFor r Variable -> r Variable)
-> LoggingFor r Variable
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LoggingFor r Variable -> r Variable
forall u l. LiftLogging u l => l -> u
lowerLogging (LoggingFor r Variable -> String)
-> StateT MethodState Identity (LoggingFor r Variable)
-> StateT MethodState Identity String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> LensLike'
  (Zoomed (StateT ValueState Identity) (LoggingFor r Variable))
  MethodState
  ValueState
-> SVariable (LoggingFor r)
-> StateT MethodState Identity (LoggingFor r Variable)
forall c.
LensLike'
  (Zoomed (StateT ValueState Identity) c) MethodState ValueState
-> StateT ValueState Identity c -> StateT MethodState Identity c
forall (m :: * -> *) (n :: * -> *) s t c.
Zoom m n s t =>
LensLike' (Zoomed m c) t s -> m c -> n c
zoom LensLike'
  (Zoomed (StateT ValueState Identity) (LoggingFor r Variable))
  MethodState
  ValueState
(ValueState
 -> Focusing Identity (LoggingFor r Variable) ValueState)
-> MethodState
-> Focusing Identity (LoggingFor r Variable) MethodState
Lens' MethodState ValueState
lensMStoVS SVariable (LoggingFor r)
x
      SValue r -> String -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> String -> MS (r smt)
printFileStr SValue r
forall (r :: * -> *). VariableValue r => SValue r
valLogFile (String -> MS (r smt)) -> String -> MS (r smt)
forall a b. (a -> b) -> a -> b
$ String
"var '" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
x' String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"' assigned "
  , SValue r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SValue r -> MS (r smt)
printFile SValue r
forall (r :: * -> *). VariableValue r => SValue r
valLogFile (SValue r -> MS (r smt)) -> SValue r -> MS (r smt)
forall a b. (a -> b) -> a -> b
$ SVariable r -> SValue r
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
x)
  , do
      String
modName <- LensLike'
  (Zoomed (StateT FileState Identity) String) MethodState FileState
-> StateT FileState Identity String
-> StateT MethodState Identity String
forall c.
LensLike'
  (Zoomed (StateT FileState Identity) c) MethodState FileState
-> StateT FileState 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 FileState Identity) String) MethodState FileState
(FileState -> Focusing Identity String FileState)
-> MethodState -> Focusing Identity String MethodState
Lens' MethodState FileState
lensMStoFS StateT FileState Identity String
getModuleName
      SValue r -> String -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> String -> MS (r smt)
printFileStrLn SValue r
forall (r :: * -> *). VariableValue r => SValue r
valLogFile (String -> MS (r smt)) -> String -> MS (r smt)
forall a b. (a -> b) -> a -> b
$ String
" in module " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
modName
  , SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
closeFile SValue r
forall (r :: * -> *). VariableValue r => SValue r
valLogFile
  ]

instance (AssignStatement r smt, IOStatement r smt, VariableValue r, VariableElim r, Literal r)
  => AssignStatement (LoggingFor r) smt where
  &-= :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
(&-=) = (SVariable r -> SValue r -> MS (r smt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
(&-=)
  &+= :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
(&+=) = (SVariable r -> SValue r -> MS (r smt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
(&+=)
  &++ :: SVariable (LoggingFor r) -> MS (LoggingFor r smt)
(&++) = (SVariable r -> MS (r smt))
-> SVariable (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> MS (r smt)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> MS (r smt)
(&++)
  &-- :: SVariable (LoggingFor r) -> MS (LoggingFor r smt)
(&--) = (SVariable r -> MS (r smt))
-> SVariable (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> MS (r smt)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> MS (r smt)
(&--)
  assign :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
assign SVariable (LoggingFor r)
x SValue (LoggingFor r)
e = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$ [MS (r smt)] -> MS (r smt)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi ([MS (r smt)] -> MS (r smt)) -> [MS (r smt)] -> MS (r smt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
AssignStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
assign (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
x) (SValue (LoggingFor r) -> SValue r
forall u l. LiftLogging u l => l -> u
lowerLogging SValue (LoggingFor r)
e)
    MS (r smt) -> [MS (r smt)] -> [MS (r smt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r smt)]
forall (r :: * -> *) smt.
(IOStatement r smt, VariableValue r, VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r smt)]
logVarUpdate SVariable (LoggingFor r)
x

instance (List r smt) => List (LoggingFor r) smt where
  listSize :: SValue (LoggingFor r) -> SValue (LoggingFor r)
listSize = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *) smt. List r smt => SValue r -> SValue r
listSize
  listAdd :: SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
listAdd = (SValue r -> SValue r -> SValue r -> MS (r smt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r -> MS (r smt)
listAdd
  listAppend :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
listAppend = (SValue r -> SValue r -> MS (r smt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> MS (r smt)
listAppend
  listAccess :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
listAccess = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r
listAccess
  listSet :: SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
listSet = (SValue r -> SValue r -> SValue r -> MS (r smt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r -> MS (r smt)
listSet -- TODO [Brandon Bosman, 06/23/2026]: Add logging
                                -- (Can't right now because RC.value isn't exposed)
  indexOf :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
indexOf = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *) smt.
List r smt =>
SValue r -> SValue r -> SValue r
indexOf

instance (DeclStatement r smt, IOStatement r smt, VariableValue r, VariableElim r, Literal r)
  => DeclStatement (LoggingFor r) smt where
  varDec :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData -> MS (LoggingFor r smt)
varDec = (SVariable r -> r ScopeData -> MS (r smt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> r ScopeData -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
varDec
  varDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
varDecDef SVariable (LoggingFor r)
vr LoggingFor r ScopeData
scp SValue (LoggingFor r)
vl = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$ [MS (r smt)] -> MS (r smt)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi ([MS (r smt)] -> MS (r smt)) -> [MS (r smt)] -> MS (r smt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
varDecDef (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
vr) (LoggingFor r ScopeData -> r ScopeData
forall u l. LiftLogging u l => l -> u
lowerLogging LoggingFor r ScopeData
scp) (SValue (LoggingFor r) -> SValue r
forall u l. LiftLogging u l => l -> u
lowerLogging SValue (LoggingFor r)
vl)
    MS (r smt) -> [MS (r smt)] -> [MS (r smt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r smt)]
forall (r :: * -> *) smt.
(IOStatement r smt, VariableValue r, VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r smt)]
logVarUpdate SVariable (LoggingFor r)
vr
  listDec :: Integer
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r smt)
listDec = (Integer -> SVariable r -> r ScopeData -> MS (r smt))
-> Integer
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging Integer -> SVariable r -> r ScopeData -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
Integer -> SVariable r -> r ScopeData -> MS (r smt)
listDec
  listDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r smt)
listDecDef SVariable (LoggingFor r)
vr LoggingFor r ScopeData
scp [SValue (LoggingFor r)]
vls = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
listDecDef (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
vr) (LoggingFor r ScopeData -> r ScopeData
forall u l. LiftLogging u l => l -> u
lowerLogging LoggingFor r ScopeData
scp) ([SValue (LoggingFor r)] -> [SValue r]
forall u l. LiftLogging u l => l -> u
lowerLogging [SValue (LoggingFor r)]
vls)
  setDec :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData -> MS (LoggingFor r smt)
setDec = (SVariable r -> r ScopeData -> MS (r smt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> r ScopeData -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> MS (r smt)
setDec
  setDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
setDecDef SVariable (LoggingFor r)
vr LoggingFor r ScopeData
scp SValue (LoggingFor r)
vl = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
setDecDef (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
vr) (LoggingFor r ScopeData -> r ScopeData
forall u l. LiftLogging u l => l -> u
lowerLogging LoggingFor r ScopeData
scp) (SValue (LoggingFor r) -> SValue r
forall u l. LiftLogging u l => l -> u
lowerLogging SValue (LoggingFor r)
vl)
  arrayDec :: Integer
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r smt)
arrayDec = (Integer -> SValue r -> SVariable r -> r ScopeData -> MS (r smt))
-> Integer
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging Integer -> SValue r -> SVariable r -> r ScopeData -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
Integer -> SValue r -> SVariable r -> r ScopeData -> MS (r smt)
arrayDec
  arrayDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r smt)
arrayDecDef SVariable (LoggingFor r)
vr LoggingFor r ScopeData
scp [SValue (LoggingFor r)]
vls = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
arrayDecDef (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
vr) (LoggingFor r ScopeData -> r ScopeData
forall u l. LiftLogging u l => l -> u
lowerLogging LoggingFor r ScopeData
scp) ([SValue (LoggingFor r)] -> [SValue r]
forall u l. LiftLogging u l => l -> u
lowerLogging [SValue (LoggingFor r)]
vls)
  constDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
constDecDef SVariable (LoggingFor r)
cnst LoggingFor r ScopeData
scp SValue (LoggingFor r)
vl = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$ [MS (r smt)] -> MS (r smt)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi ([MS (r smt)] -> MS (r smt)) -> [MS (r smt)] -> MS (r smt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
constDecDef (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
cnst) (LoggingFor r ScopeData -> r ScopeData
forall u l. LiftLogging u l => l -> u
lowerLogging LoggingFor r ScopeData
scp) (SValue (LoggingFor r) -> SValue r
forall u l. LiftLogging u l => l -> u
lowerLogging SValue (LoggingFor r)
vl)
    MS (r smt) -> [MS (r smt)] -> [MS (r smt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r smt)]
forall (r :: * -> *) smt.
(IOStatement r smt, VariableValue r, VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r smt)]
logVarUpdate SVariable (LoggingFor r)
cnst
  funcDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SVariable (LoggingFor r)]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
funcDecDef = (SVariable r
 -> r ScopeData -> [SVariable r] -> MS (r Body) -> MS (r smt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SVariable (LoggingFor r)]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r
-> r ScopeData -> [SVariable r] -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
DeclStatement r smt =>
SVariable r
-> r ScopeData -> [SVariable r] -> MS (r Body) -> MS (r smt)
funcDecDef

instance (IOStatement r smt, VariableValue r, VariableElim r, Literal r)
  => IOStatement (LoggingFor r) smt where
  print :: SValue (LoggingFor r) -> MS (LoggingFor r smt)
print = (SValue r -> MS (r smt))
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
print
  printLn :: SValue (LoggingFor r) -> MS (LoggingFor r smt)
printLn = (SValue r -> MS (r smt))
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
printLn
  printStr :: String -> MS (LoggingFor r smt)
printStr = (String -> MS (r smt)) -> String -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r smt)
forall (r :: * -> *) smt. IOStatement r smt => String -> MS (r smt)
printStr
  printStrLn :: String -> MS (LoggingFor r smt)
printStrLn = (String -> MS (r smt)) -> String -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r smt)
forall (r :: * -> *) smt. IOStatement r smt => String -> MS (r smt)
printStrLn
  printFile :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
printFile = (SValue r -> SValue r -> MS (r smt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SValue r -> MS (r smt)
printFile
  printFileLn :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
printFileLn = (SValue r -> SValue r -> MS (r smt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SValue r -> MS (r smt)
printFileLn
  printFileStr :: SValue (LoggingFor r) -> String -> MS (LoggingFor r smt)
printFileStr = (SValue r -> String -> MS (r smt))
-> SValue (LoggingFor r) -> String -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> String -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> String -> MS (r smt)
printFileStr
  printFileStrLn :: SValue (LoggingFor r) -> String -> MS (LoggingFor r smt)
printFileStrLn = (SValue r -> String -> MS (r smt))
-> SValue (LoggingFor r) -> String -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> String -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> String -> MS (r smt)
printFileStrLn
  getInput :: SVariable (LoggingFor r) -> MS (LoggingFor r smt)
getInput SVariable (LoggingFor r)
vr = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$ [MS (r smt)] -> MS (r smt)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi ([MS (r smt)] -> MS (r smt)) -> [MS (r smt)] -> MS (r smt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> MS (r smt)
getInput (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
vr) MS (r smt) -> [MS (r smt)] -> [MS (r smt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r smt)]
forall (r :: * -> *) smt.
(IOStatement r smt, VariableValue r, VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r smt)]
logVarUpdate SVariable (LoggingFor r)
vr
  discardInput :: MS (LoggingFor r smt)
discardInput = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r smt)
forall (r :: * -> *) smt. IOStatement r smt => MS (r smt)
discardInput
  getFileInput :: SValue (LoggingFor r)
-> SVariable (LoggingFor r) -> MS (LoggingFor r smt)
getFileInput SValue (LoggingFor r)
file SVariable (LoggingFor r)
vr = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$ [MS (r smt)] -> MS (r smt)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi ([MS (r smt)] -> MS (r smt)) -> [MS (r smt)] -> MS (r smt)
forall a b. (a -> b) -> a -> b
$
    SValue r -> SVariable r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInput (SValue (LoggingFor r) -> SValue r
forall u l. LiftLogging u l => l -> u
lowerLogging SValue (LoggingFor r)
file) (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
vr)
    MS (r smt) -> [MS (r smt)] -> [MS (r smt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r smt)]
forall (r :: * -> *) smt.
(IOStatement r smt, VariableValue r, VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r smt)]
logVarUpdate SVariable (LoggingFor r)
vr
  discardFileInput :: SValue (LoggingFor r) -> MS (LoggingFor r smt)
discardFileInput = (SValue r -> MS (r smt))
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
discardFileInput
  openFileR :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
openFileR = (SVariable r -> SValue r -> MS (r smt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileR
  openFileW :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
openFileW = (SVariable r -> SValue r -> MS (r smt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileW
  openFileA :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
openFileA = (SVariable r -> SValue r -> MS (r smt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SVariable r -> SValue r -> MS (r smt)
openFileA
  closeFile :: SValue (LoggingFor r) -> MS (LoggingFor r smt)
closeFile = (SValue r -> MS (r smt))
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
closeFile
  getFileInputLine :: SValue (LoggingFor r)
-> SVariable (LoggingFor r) -> MS (LoggingFor r smt)
getFileInputLine = (SValue r -> SVariable r -> MS (r smt))
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SVariable r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInputLine
  discardFileLine :: SValue (LoggingFor r) -> MS (LoggingFor r smt)
discardFileLine = (SValue r -> MS (r smt))
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> MS (r smt)
discardFileLine
  getFileInputAll :: SValue (LoggingFor r)
-> SVariable (LoggingFor r) -> MS (LoggingFor r smt)
getFileInputAll = (SValue r -> SVariable r -> MS (r smt))
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SVariable r -> MS (r smt)
forall (r :: * -> *) smt.
IOStatement r smt =>
SValue r -> SVariable r -> MS (r smt)
getFileInputAll

instance (StringStatement r smt, IOStatement r smt, VariableValue r, VariableElim r, Literal r)
  => StringStatement (LoggingFor r) smt where
  stringSplit :: Char
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
stringSplit Char
chr SVariable (LoggingFor r)
vr SValue (LoggingFor r)
str  = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$
    Char -> SVariable r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
StringStatement r smt =>
Char -> SVariable r -> SValue r -> MS (r smt)
stringSplit (Char -> Char
forall u l. LiftLogging u l => l -> u
lowerLogging Char
chr) (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
vr) (SValue (LoggingFor r) -> SValue r
forall u l. LiftLogging u l => l -> u
lowerLogging SValue (LoggingFor r)
str)
  stringListVals :: [SVariable (LoggingFor r)]
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
stringListVals [SVariable (LoggingFor r)]
vrs SValue (LoggingFor r)
strs  = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$
    [SVariable r] -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
StringStatement r smt =>
[SVariable r] -> SValue r -> MS (r smt)
stringListVals ([SVariable (LoggingFor r)] -> [SVariable r]
forall u l. LiftLogging u l => l -> u
lowerLogging [SVariable (LoggingFor r)]
vrs) (SValue (LoggingFor r) -> SValue r
forall u l. LiftLogging u l => l -> u
lowerLogging SValue (LoggingFor r)
strs)
  stringListLists :: [SVariable (LoggingFor r)]
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
stringListLists [SVariable (LoggingFor r)]
vrs SValue (LoggingFor r)
strs = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r smt) -> MS (LoggingFor r smt))
-> MS (r smt) -> MS (LoggingFor r smt)
forall a b. (a -> b) -> a -> b
$ [MS (r smt)] -> MS (r smt)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi ([MS (r smt)] -> MS (r smt)) -> [MS (r smt)] -> MS (r smt)
forall a b. (a -> b) -> a -> b
$
    [SVariable r] -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
StringStatement r smt =>
[SVariable r] -> SValue r -> MS (r smt)
stringListLists ([SVariable (LoggingFor r)] -> [SVariable r]
forall u l. LiftLogging u l => l -> u
lowerLogging [SVariable (LoggingFor r)]
vrs) (SValue (LoggingFor r) -> SValue r
forall u l. LiftLogging u l => l -> u
lowerLogging SValue (LoggingFor r)
strs)
    MS (r smt) -> [MS (r smt)] -> [MS (r smt)]
forall a. a -> [a] -> [a]
: (SVariable (LoggingFor r) -> [MS (r smt)])
-> [SVariable (LoggingFor r)] -> [MS (r smt)]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap SVariable (LoggingFor r) -> [MS (r smt)]
forall (r :: * -> *) smt.
(IOStatement r smt, VariableValue r, VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r smt)]
logVarUpdate [SVariable (LoggingFor r)]
vrs

-- SharedProg Boilerplate

instance (SharedProg r vis smt md) => SharedProg (LoggingFor r) vis smt md
instance (SharedStatement r smt, VariableElim r) => SharedStatement (LoggingFor r) smt
instance (G.OOStatement r smt, VariableElim r) => G.OOStatement (LoggingFor r) smt

instance (VariableSym r) => VariableSym (LoggingFor r) where
  var :: String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
var = (String -> VS (r TypeData) -> SVariable r)
-> String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> VS (r TypeData) -> SVariable r
forall (r :: * -> *).
VariableSym r =>
String -> VS (r TypeData) -> SVariable r
var
  constant :: String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
constant = (String -> VS (r TypeData) -> SVariable r)
-> String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> VS (r TypeData) -> SVariable r
forall (r :: * -> *).
VariableSym r =>
String -> VS (r TypeData) -> SVariable r
constant
  extVar :: String
-> String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
extVar = (String -> String -> VS (r TypeData) -> SVariable r)
-> String
-> String
-> VS (LoggingFor r TypeData)
-> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> String -> VS (r TypeData) -> SVariable r
forall (r :: * -> *).
VariableSym r =>
String -> String -> VS (r TypeData) -> SVariable r
extVar

instance (TypeSym r) => TypeSym (LoggingFor r) where
  bool :: VS (LoggingFor r TypeData)
bool = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
bool
  int :: VS (LoggingFor r TypeData)
int = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
int
  float :: VS (LoggingFor r TypeData)
float = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
float
  double :: VS (LoggingFor r TypeData)
double = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
double
  char :: VS (LoggingFor r TypeData)
char = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
char
  string :: VS (LoggingFor r TypeData)
string = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
string
  infile :: VS (LoggingFor r TypeData)
infile = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
infile
  outfile :: VS (LoggingFor r TypeData)
outfile = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
outfile
  referenceType :: VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
referenceType = (VS (r TypeData) -> VS (r TypeData))
-> VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> VS (r TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
referenceType
  listType :: VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
listType = (VS (r TypeData) -> VS (r TypeData))
-> VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> VS (r TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
listType
  setType :: VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
setType = (VS (r TypeData) -> VS (r TypeData))
-> VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> VS (r TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
setType
  arrayType :: VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
arrayType = (VS (r TypeData) -> VS (r TypeData))
-> VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> VS (r TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
arrayType
  innerType :: VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
innerType = (VS (r TypeData) -> VS (r TypeData))
-> VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> VS (r TypeData)
forall (r :: * -> *).
TypeSym r =>
VS (r TypeData) -> VS (r TypeData)
innerType
  funcType :: [VS (LoggingFor r TypeData)]
-> VS (LoggingFor r TypeData) -> VS (LoggingFor r TypeData)
funcType = ([VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData))
-> [VS (LoggingFor r TypeData)]
-> VS (LoggingFor r TypeData)
-> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging [VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
forall (r :: * -> *).
TypeSym r =>
[VS (r TypeData)] -> VS (r TypeData) -> VS (r TypeData)
funcType
  void :: VS (LoggingFor r TypeData)
void = VS (r TypeData) -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData)
forall (r :: * -> *). TypeSym r => VS (r TypeData)
void

instance (TypeElim r) => TypeElim (LoggingFor r) where
  getCodeType :: LoggingFor r TypeData -> CodeType
getCodeType = (r TypeData -> CodeType) -> LoggingFor r TypeData -> CodeType
forall u l. LiftLogging u l => u -> l
liftLogging r TypeData -> CodeType
forall (r :: * -> *). TypeElim r => r TypeData -> CodeType
getCodeType

instance (ValueSym r) => ValueSym (LoggingFor r) where
  valueType :: LoggingFor r Value -> LoggingFor r TypeData
valueType = (r Value -> r TypeData)
-> LoggingFor r Value -> LoggingFor r TypeData
forall u l. LiftLogging u l => u -> l
liftLogging r Value -> r TypeData
forall (r :: * -> *). ValueSym r => r Value -> r TypeData
valueType

instance StatementSym r smt => StatementSym (LoggingFor r) smt where
  valStmt :: SValue (LoggingFor r) -> MS (LoggingFor r smt)
valStmt = (SValue r -> MS (r smt))
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r smt)
forall (r :: * -> *) smt.
StatementSym r smt =>
SValue r -> MS (r smt)
valStmt
  emptyStmt :: MS (LoggingFor r smt)
emptyStmt = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r smt)
forall (r :: * -> *) smt. StatementSym r smt => MS (r smt)
emptyStmt
  multi :: [MS (LoggingFor r smt)] -> MS (LoggingFor r smt)
multi = ([MS (r smt)] -> MS (r smt))
-> [MS (LoggingFor r smt)] -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging [MS (r smt)] -> MS (r smt)
forall (r :: * -> *) smt.
StatementSym r smt =>
[MS (r smt)] -> MS (r smt)
multi

instance (Argument r) => Argument (LoggingFor r) where
  pointerArg :: SValue (LoggingFor r) -> SValue (LoggingFor r)
pointerArg = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). Argument r => SValue r -> SValue r
pointerArg

instance (Reference r) => Reference (LoggingFor r) where
  makeRef :: SValue (LoggingFor r) -> SValue (LoggingFor r)
makeRef = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). Reference r => SValue r -> SValue r
makeRef
  maybeDeref :: SValue (LoggingFor r) -> SValue (LoggingFor r)
maybeDeref = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). Reference r => SValue r -> SValue r
maybeDeref

instance (Array r) => Array (LoggingFor r) where
  arrayElem :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SVariable (LoggingFor r)
arrayElem = (SValue r -> SValue r -> SVariable r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SVariable r
forall (r :: * -> *).
Array r =>
SValue r -> SValue r -> SVariable r
arrayElem
  arrayLength :: SValue (LoggingFor r) -> SValue (LoggingFor r)
arrayLength = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). Array r => SValue r -> SValue r
arrayLength
  arrayCopy :: SValue (LoggingFor r) -> SValue (LoggingFor r)
arrayCopy = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). Array r => SValue r -> SValue r
arrayCopy

instance (BinderSym r) => BinderSym (LoggingFor r) where
  binder :: String -> VS (LoggingFor r TypeData) -> VSBinder (LoggingFor r)
binder = (String -> VS (r TypeData) -> VSBinder r)
-> String -> VS (LoggingFor r TypeData) -> VSBinder (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> VS (r TypeData) -> VSBinder r
forall (r :: * -> *).
BinderSym r =>
String -> VS (r TypeData) -> VSBinder r
binder

instance (BooleanExpression r) => BooleanExpression (LoggingFor r) where
  ?! :: SValue (LoggingFor r) -> SValue (LoggingFor r)
(?!) = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). BooleanExpression r => SValue r -> SValue r
(?!)
  ?&& :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(?&&) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?&&)
  ?|| :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(?||) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
BooleanExpression r =>
SValue r -> SValue r -> SValue r
(?||)

instance (CommandLineArgs r) => CommandLineArgs (LoggingFor r) where
  arg :: Integer -> SValue (LoggingFor r)
arg = (Integer -> SValue r) -> Integer -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging Integer -> SValue r
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
arg
  argsList :: SValue (LoggingFor r)
argsList = SValue r -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r
forall (r :: * -> *). CommandLineArgs r => SValue r
argsList
  argExists :: Integer -> SValue (LoggingFor r)
argExists = (Integer -> SValue r) -> Integer -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging Integer -> SValue r
forall (r :: * -> *). CommandLineArgs r => Integer -> SValue r
argExists

instance (CommentStatement r smt) => CommentStatement (LoggingFor r) smt where
  comment :: String -> MS (LoggingFor r smt)
comment = (String -> MS (r smt)) -> String -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r smt)
forall (r :: * -> *) smt.
CommentStatement r smt =>
String -> MS (r smt)
comment

instance (Comparison r) => Comparison (LoggingFor r) where
  ?< :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(?<) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<)
  ?<= :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(?<=) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?<=)
  ?> :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(?>) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>)
  ?>= :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(?>=) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?>=)
  ?== :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(?==) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?==)
  ?!= :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(?!=) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
Comparison r =>
SValue r -> SValue r -> SValue r
(?!=)

instance (BlockSym r smt) => BlockSym (LoggingFor r) smt where
  block :: [MS (LoggingFor r smt)] -> MS (LoggingFor r Body)
block = ([MS (r smt)] -> MS (r Body))
-> [MS (LoggingFor r smt)] -> MS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging [MS (r smt)] -> MS (r Body)
forall (r :: * -> *) smt.
BlockSym r smt =>
[MS (r smt)] -> MS (r Body)
block

instance (BodySym r smt) => BodySym (LoggingFor r) smt where
  body :: [MS (LoggingFor r Body)] -> MS (LoggingFor r Body)
body = ([MS (r Body)] -> MS (r Body))
-> [MS (LoggingFor r Body)] -> MS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging [MS (r Body)] -> MS (r Body)
forall (r :: * -> *) smt.
BodySym r smt =>
[MS (r Body)] -> MS (r Body)
body
  addComments :: String -> MS (LoggingFor r Body) -> MS (LoggingFor r Body)
addComments = (String -> MS (r Body) -> MS (r Body))
-> String -> MS (LoggingFor r Body) -> MS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r Body) -> MS (r Body)
forall (r :: * -> *) smt.
BodySym r smt =>
String -> MS (r Body) -> MS (r Body)
addComments

instance (ControlStatement r smt) => ControlStatement (LoggingFor r) smt where
  break :: MS (LoggingFor r smt)
break = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r smt)
forall (r :: * -> *) smt. ControlStatement r smt => MS (r smt)
break
  continue :: MS (LoggingFor r smt)
continue = MS (r smt) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r smt)
forall (r :: * -> *) smt. ControlStatement r smt => MS (r smt)
continue
  returnStmt :: SValue (LoggingFor r) -> MS (LoggingFor r smt)
returnStmt = (SValue r -> MS (r smt))
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r smt)
returnStmt
  throw :: String -> MS (LoggingFor r smt)
throw = (String -> MS (r smt)) -> String -> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
String -> MS (r smt)
throw
  ifCond :: [(SValue (LoggingFor r), MS (LoggingFor r Body))]
-> MS (LoggingFor r Body) -> MS (LoggingFor r smt)
ifCond = ([(SValue r, MS (r Body))] -> MS (r Body) -> MS (r smt))
-> [(SValue (LoggingFor r), MS (LoggingFor r Body))]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging [(SValue r, MS (r Body))] -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
[(SValue r, MS (r Body))] -> MS (r Body) -> MS (r smt)
ifCond
  switch :: SValue (LoggingFor r)
-> [(SValue (LoggingFor r), MS (LoggingFor r Body))]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
switch = (SValue r
 -> [(SValue r, MS (r Body))] -> MS (r Body) -> MS (r smt))
-> SValue (LoggingFor r)
-> [(SValue (LoggingFor r), MS (LoggingFor r Body))]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> [(SValue r, MS (r Body))] -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> [(SValue r, MS (r Body))] -> MS (r Body) -> MS (r smt)
switch
  ifExists :: SValue (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
ifExists = (SValue r -> MS (r Body) -> MS (r Body) -> MS (r smt))
-> SValue (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r Body) -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r Body) -> MS (r Body) -> MS (r smt)
ifExists
  for :: MS (LoggingFor r smt)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
for = (MS (r smt) -> SValue r -> MS (r smt) -> MS (r Body) -> MS (r smt))
-> MS (LoggingFor r smt)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r smt) -> SValue r -> MS (r smt) -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
MS (r smt) -> SValue r -> MS (r smt) -> MS (r Body) -> MS (r smt)
for
  forRange :: SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forRange = (SVariable r
 -> SValue r -> SValue r -> SValue r -> MS (r Body) -> MS (r smt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r
-> SValue r -> SValue r -> SValue r -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SVariable r
-> SValue r -> SValue r -> SValue r -> MS (r Body) -> MS (r smt)
forRange
  forEach :: SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forEach = (SVariable r -> SValue r -> MS (r Body) -> MS (r smt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SVariable r -> SValue r -> MS (r Body) -> MS (r smt)
forEach
  while :: SValue (LoggingFor r)
-> MS (LoggingFor r Body) -> MS (LoggingFor r smt)
while = (SValue r -> MS (r Body) -> MS (r smt))
-> SValue (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> MS (r Body) -> MS (r smt)
while
  tryCatch :: MS (LoggingFor r Body)
-> MS (LoggingFor r Body) -> MS (LoggingFor r smt)
tryCatch = (MS (r Body) -> MS (r Body) -> MS (r smt))
-> MS (LoggingFor r Body)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r Body) -> MS (r Body) -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
MS (r Body) -> MS (r Body) -> MS (r smt)
tryCatch
  assert :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r smt)
assert = (SValue r -> SValue r -> MS (r smt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
ControlStatement r smt =>
SValue r -> SValue r -> MS (r smt)
assert

instance (ScopeSym r) => ScopeSym (LoggingFor r) where
  global :: LoggingFor r ScopeData
global = r ScopeData -> LoggingFor r ScopeData
forall u l. LiftLogging u l => u -> l
liftLogging r ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
global
  mainFn :: LoggingFor r ScopeData
mainFn = r ScopeData -> LoggingFor r ScopeData
forall u l. LiftLogging u l => u -> l
liftLogging r ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
mainFn
  local :: LoggingFor r ScopeData
local = r ScopeData -> LoggingFor r ScopeData
forall u l. LiftLogging u l => u -> l
liftLogging r ScopeData
forall (r :: * -> *). ScopeSym r => r ScopeData
local

instance (FuncAppStatement r smt) => FuncAppStatement (LoggingFor r) smt where
  inOutCall :: InOutCall (LoggingFor r) smt
inOutCall = InOutCall r smt -> InOutCall (LoggingFor r) smt
forall u l. LiftLogging u l => u -> l
liftLogging InOutCall r smt
forall (r :: * -> *) smt. FuncAppStatement r smt => InOutCall r smt
inOutCall
  extInOutCall :: String -> InOutCall (LoggingFor r) smt
extInOutCall = (String -> InOutCall r smt)
-> String -> InOutCall (LoggingFor r) smt
forall u l. LiftLogging u l => u -> l
liftLogging String -> InOutCall r smt
forall (r :: * -> *) smt.
FuncAppStatement r smt =>
String -> InOutCall r smt
extInOutCall

instance (FunctionSym r) => FunctionSym (LoggingFor r) where

instance (InternalList r) => InternalList (LoggingFor r) where
  listSlice' :: Maybe (SValue (LoggingFor r))
-> Maybe (SValue (LoggingFor r))
-> Maybe (SValue (LoggingFor r))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r Body)
listSlice' = (Maybe (SValue r)
 -> Maybe (SValue r)
 -> Maybe (SValue r)
 -> SVariable r
 -> SValue r
 -> MS (r Body))
-> Maybe (SValue (LoggingFor r))
-> Maybe (SValue (LoggingFor r))
-> Maybe (SValue (LoggingFor r))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MS (r Body)
forall (r :: * -> *).
InternalList r =>
Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MS (r Body)
listSlice'

instance (Literal r) => Literal (LoggingFor r) where
  litTrue :: SValue (LoggingFor r)
litTrue = SValue r -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r
forall (r :: * -> *). Literal r => SValue r
litTrue
  litFalse :: SValue (LoggingFor r)
litFalse = SValue r -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r
forall (r :: * -> *). Literal r => SValue r
litFalse
  litChar :: Char -> SValue (LoggingFor r)
litChar = (Char -> SValue r) -> Char -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging Char -> SValue r
forall (r :: * -> *). Literal r => Char -> SValue r
litChar
  litDouble :: Double -> SValue (LoggingFor r)
litDouble = (Double -> SValue r) -> Double -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging Double -> SValue r
forall (r :: * -> *). Literal r => Double -> SValue r
litDouble
  litFloat :: Float -> SValue (LoggingFor r)
litFloat = (Float -> SValue r) -> Float -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging Float -> SValue r
forall (r :: * -> *). Literal r => Float -> SValue r
litFloat
  litInt :: Integer -> SValue (LoggingFor r)
litInt = (Integer -> SValue r) -> Integer -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging Integer -> SValue r
forall (r :: * -> *). Literal r => Integer -> SValue r
litInt
  litString :: String -> SValue (LoggingFor r)
litString = (String -> SValue r) -> String -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> SValue r
forall (r :: * -> *). Literal r => String -> SValue r
litString
  litArray :: VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)] -> SValue (LoggingFor r)
litArray = (VS (r TypeData) -> [SValue r] -> SValue r)
-> VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)]
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> [SValue r] -> SValue r
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litArray
  litList :: VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)] -> SValue (LoggingFor r)
litList = (VS (r TypeData) -> [SValue r] -> SValue r)
-> VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)]
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> [SValue r] -> SValue r
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litList
  litSet :: VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)] -> SValue (LoggingFor r)
litSet = (VS (r TypeData) -> [SValue r] -> SValue r)
-> VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)]
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> [SValue r] -> SValue r
forall (r :: * -> *).
Literal r =>
VS (r TypeData) -> [SValue r] -> SValue r
litSet

instance (MathConstant r) => MathConstant (LoggingFor r) where
  pi :: SValue (LoggingFor r)
pi = SValue r -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r
forall (r :: * -> *). MathConstant r => SValue r
pi

instance (ParameterSym r) => ParameterSym (LoggingFor r) where
  param :: SVariable (LoggingFor r) -> MS (LoggingFor r ParamData)
param = (SVariable r -> MS (r ParamData))
-> SVariable (LoggingFor r) -> MS (LoggingFor r ParamData)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> MS (r ParamData)
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
param
  pointerParam :: SVariable (LoggingFor r) -> MS (LoggingFor r ParamData)
pointerParam = (SVariable r -> MS (r ParamData))
-> SVariable (LoggingFor r) -> MS (LoggingFor r ParamData)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> MS (r ParamData)
forall (r :: * -> *).
ParameterSym r =>
SVariable r -> MS (r ParamData)
pointerParam

instance (VisibilitySym r vis) => VisibilitySym (LoggingFor r) vis where
  private :: LoggingFor r vis
private = r vis -> LoggingFor r vis
forall u l. LiftLogging u l => u -> l
liftLogging r vis
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
private
  public :: LoggingFor r vis
public = r vis -> LoggingFor r vis
forall u l. LiftLogging u l => u -> l
liftLogging r vis
forall (r :: * -> *) vis. VisibilitySym r vis => r vis
public

instance (MethodSym r vis smt md) => MethodSym (LoggingFor r) vis smt md where
  docMain :: MS (LoggingFor r Body) -> MS (LoggingFor r md)
docMain = (MS (r Body) -> MS (r md))
-> MS (LoggingFor r Body) -> MS (LoggingFor r md)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r Body) -> MS (r md)
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
MS (r Body) -> MS (r md)
docMain
  function :: String
-> LoggingFor r vis
-> VS (LoggingFor r TypeData)
-> [MS (LoggingFor r ParamData)]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r md)
function = (String
 -> r vis
 -> VS (r TypeData)
 -> [MS (r ParamData)]
 -> MS (r Body)
 -> MS (r md))
-> String
-> LoggingFor r vis
-> VS (LoggingFor r TypeData)
-> [MS (LoggingFor r ParamData)]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r md)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Body)
-> MS (r md)
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
String
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Body)
-> MS (r md)
function
  mainFunction :: MS (LoggingFor r Body) -> MS (LoggingFor r md)
mainFunction = (MS (r Body) -> MS (r md))
-> MS (LoggingFor r Body) -> MS (LoggingFor r md)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r Body) -> MS (r md)
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
MS (r Body) -> MS (r md)
mainFunction
  docFunc :: String
-> [String]
-> Maybe String
-> MS (LoggingFor r md)
-> MS (LoggingFor r md)
docFunc = (String -> [String] -> Maybe String -> MS (r md) -> MS (r md))
-> String
-> [String]
-> Maybe String
-> MS (LoggingFor r md)
-> MS (LoggingFor r md)
forall u l. LiftLogging u l => u -> l
liftLogging String -> [String] -> Maybe String -> MS (r md) -> MS (r md)
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
String -> [String] -> Maybe String -> MS (r md) -> MS (r md)
docFunc
  inOutFunc :: String -> LoggingFor r vis -> InOutFunc (LoggingFor r) md
inOutFunc = (String -> r vis -> InOutFunc r md)
-> String -> LoggingFor r vis -> InOutFunc (LoggingFor r) md
forall u l. LiftLogging u l => u -> l
liftLogging String -> r vis -> InOutFunc r md
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
String -> r vis -> InOutFunc r md
inOutFunc
  docInOutFunc :: String -> LoggingFor r vis -> DocInOutFunc (LoggingFor r) md
docInOutFunc = (String -> r vis -> DocInOutFunc r md)
-> String -> LoggingFor r vis -> DocInOutFunc (LoggingFor r) md
forall u l. LiftLogging u l => u -> l
liftLogging String -> r vis -> DocInOutFunc r md
forall (r :: * -> *) vis smt md.
MethodSym r vis smt md =>
String -> r vis -> DocInOutFunc r md
docInOutFunc

instance (NumericExpression r) => NumericExpression (LoggingFor r) where
  #~ :: SValue (LoggingFor r) -> SValue (LoggingFor r)
(#~) = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#~)
  #/^ :: SValue (LoggingFor r) -> SValue (LoggingFor r)
(#/^) = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#/^)
  #| :: SValue (LoggingFor r) -> SValue (LoggingFor r)
(#|) = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
(#|)
  #+ :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(#+) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#+)
  #- :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(#-) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#-)
  #* :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(#*) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#*)
  #/ :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(#/) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#/)
  #% :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(#%) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#%)
  #^ :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
(#^) = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *).
NumericExpression r =>
SValue r -> SValue r -> SValue r
(#^)
  log :: SValue (LoggingFor r) -> SValue (LoggingFor r)
log = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
log
  ln :: SValue (LoggingFor r) -> SValue (LoggingFor r)
ln = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ln
  exp :: SValue (LoggingFor r) -> SValue (LoggingFor r)
exp = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
exp
  sin :: SValue (LoggingFor r) -> SValue (LoggingFor r)
sin = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sin
  cos :: SValue (LoggingFor r) -> SValue (LoggingFor r)
cos = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cos
  tan :: SValue (LoggingFor r) -> SValue (LoggingFor r)
tan = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
tan
  csc :: SValue (LoggingFor r) -> SValue (LoggingFor r)
csc = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
csc
  sec :: SValue (LoggingFor r) -> SValue (LoggingFor r)
sec = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
sec
  cot :: SValue (LoggingFor r) -> SValue (LoggingFor r)
cot = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
cot
  arcsin :: SValue (LoggingFor r) -> SValue (LoggingFor r)
arcsin = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arcsin
  arccos :: SValue (LoggingFor r) -> SValue (LoggingFor r)
arccos = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arccos
  arctan :: SValue (LoggingFor r) -> SValue (LoggingFor r)
arctan = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
arctan
  floor :: SValue (LoggingFor r) -> SValue (LoggingFor r)
floor = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
floor
  ceil :: SValue (LoggingFor r) -> SValue (LoggingFor r)
ceil = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). NumericExpression r => SValue r -> SValue r
ceil

instance (Set r) => Set (LoggingFor r) where
  contains :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
contains = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
contains
  setAdd :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
setAdd = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setAdd
  setRemove :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
setRemove = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setRemove
  setUnion :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
setUnion = (SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r
forall (r :: * -> *). Set r => SValue r -> SValue r -> SValue r
setUnion

instance (UnRepr r contents) => UnRepr (LoggingFor r) contents where
  unRepr :: LoggingFor r contents -> contents
unRepr = r contents -> contents
forall (repr :: * -> *) contents.
UnRepr repr contents =>
repr contents -> contents
unRepr (r contents -> contents)
-> (LoggingFor r contents -> r contents)
-> LoggingFor r contents
-> contents
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LoggingFor r contents -> r contents
forall (r :: * -> *) a. LoggingFor r a -> r a
unLC

instance (ValueExpression r) => ValueExpression (LoggingFor r) where
  inlineIf :: SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
inlineIf = (SValue r -> SValue r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> SValue r -> SValue r
forall (r :: * -> *).
ValueExpression r =>
SValue r -> SValue r -> SValue r -> SValue r
inlineIf
  funcAppMixedArgs :: MixedCall (LoggingFor r)
funcAppMixedArgs = MixedCall r -> MixedCall (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging MixedCall r
forall (r :: * -> *). ValueExpression r => MixedCall r
funcAppMixedArgs
  extFuncAppMixedArgs :: String -> MixedCall (LoggingFor r)
extFuncAppMixedArgs = (String -> MixedCall r) -> String -> MixedCall (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MixedCall r
forall (r :: * -> *). ValueExpression r => String -> MixedCall r
extFuncAppMixedArgs
  libFuncAppMixedArgs :: String -> MixedCall (LoggingFor r)
libFuncAppMixedArgs = (String -> MixedCall r) -> String -> MixedCall (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MixedCall r
forall (r :: * -> *). ValueExpression r => String -> MixedCall r
libFuncAppMixedArgs
  lambda :: [VSBinder (LoggingFor r)]
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
lambda = ([VSBinder r] -> SValue r -> SValue r)
-> [VSBinder (LoggingFor r)]
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging [VSBinder r] -> SValue r -> SValue r
forall (r :: * -> *).
ValueExpression r =>
[VSBinder r] -> SValue r -> SValue r
lambda
  notNull :: SValue (LoggingFor r) -> SValue (LoggingFor r)
notNull = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). ValueExpression r => SValue r -> SValue r
notNull

instance (VariableElim r) => VariableElim (LoggingFor r) where
  variableName :: LoggingFor r Variable -> String
variableName = (r Variable -> String) -> LoggingFor r Variable -> String
forall u l. LiftLogging u l => u -> l
liftLogging r Variable -> String
forall (r :: * -> *). VariableElim r => r Variable -> String
variableName
  variableType :: LoggingFor r Variable -> LoggingFor r TypeData
variableType = (r Variable -> r TypeData)
-> LoggingFor r Variable -> LoggingFor r TypeData
forall u l. LiftLogging u l => u -> l
liftLogging r Variable -> r TypeData
forall (r :: * -> *). VariableElim r => r Variable -> r TypeData
variableType

instance (VariableValue r) => VariableValue (LoggingFor r) where
  valueOf :: SVariable (LoggingFor r) -> SValue (LoggingFor r)
valueOf = (SVariable r -> SValue r)
-> SVariable (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r
forall (r :: * -> *). VariableValue r => SVariable r -> SValue r
valueOf

instance (IndexTranslator r) => IndexTranslator (LoggingFor r) where
  intToIndex :: SValue (LoggingFor r) -> SValue (LoggingFor r)
intToIndex = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). IndexTranslator r => SValue r -> SValue r
intToIndex
  indexToInt :: SValue (LoggingFor r) -> SValue (LoggingFor r)
indexToInt = (SValue r -> SValue r)
-> SValue (LoggingFor r) -> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r
forall (r :: * -> *). IndexTranslator r => SValue r -> SValue r
indexToInt

instance (NativeVector lang) => NativeVector (LoggingFor lang) where
  vecScale :: SValue (LoggingFor lang)
-> SValue (LoggingFor lang) -> SValue (LoggingFor lang)
vecScale = (SValue lang -> SValue lang -> SValue lang)
-> SValue (LoggingFor lang)
-> SValue (LoggingFor lang)
-> SValue (LoggingFor lang)
forall u l. LiftLogging u l => u -> l
liftLogging SValue lang -> SValue lang -> SValue lang
forall (r :: * -> *).
NativeVector r =>
SValue r -> SValue r -> SValue r
vecScale
  vecAdd :: SValue (LoggingFor lang)
-> SValue (LoggingFor lang) -> SValue (LoggingFor lang)
vecAdd = (SValue lang -> SValue lang -> SValue lang)
-> SValue (LoggingFor lang)
-> SValue (LoggingFor lang)
-> SValue (LoggingFor lang)
forall u l. LiftLogging u l => u -> l
liftLogging SValue lang -> SValue lang -> SValue lang
forall (r :: * -> *).
NativeVector r =>
SValue r -> SValue r -> SValue r
vecAdd
  vecIndex :: SValue (LoggingFor lang)
-> SValue (LoggingFor lang) -> SValue (LoggingFor lang)
vecIndex = (SValue lang -> SValue lang -> SValue lang)
-> SValue (LoggingFor lang)
-> SValue (LoggingFor lang)
-> SValue (LoggingFor lang)
forall u l. LiftLogging u l => u -> l
liftLogging SValue lang -> SValue lang -> SValue lang
forall (r :: * -> *).
NativeVector r =>
SValue r -> SValue r -> SValue r
vecIndex
  vecDot :: SValue (LoggingFor lang)
-> SValue (LoggingFor lang) -> SValue (LoggingFor lang)
vecDot = (SValue lang -> SValue lang -> SValue lang)
-> SValue (LoggingFor lang)
-> SValue (LoggingFor lang)
-> SValue (LoggingFor lang)
forall u l. LiftLogging u l => u -> l
liftLogging SValue lang -> SValue lang -> SValue lang
forall (r :: * -> *).
NativeVector r =>
SValue r -> SValue r -> SValue r
vecDot
  vecMag :: SValue (LoggingFor lang) -> SValue (LoggingFor lang)
vecMag = (SValue lang -> SValue lang)
-> SValue (LoggingFor lang) -> SValue (LoggingFor lang)
forall u l. LiftLogging u l => u -> l
liftLogging SValue lang -> SValue lang
forall (r :: * -> *). NativeVector r => SValue r -> SValue r
vecMag
  vecUnit :: SValue (LoggingFor lang) -> SValue (LoggingFor lang)
vecUnit = (SValue lang -> SValue lang)
-> SValue (LoggingFor lang) -> SValue (LoggingFor lang)
forall u l. LiftLogging u l => u -> l
liftLogging SValue lang -> SValue lang
forall (r :: * -> *). NativeVector r => SValue r -> SValue r
vecUnit

-- GProc

instance (P.ProcProg r vis smt md prg) => P.ProcProg (LoggingFor r) vis smt md prg

instance (P.ModuleSym r vis smt md) => P.ModuleSym (LoggingFor r) vis smt md where
  buildModule :: String
-> [String] -> [MS (LoggingFor r md)] -> FS (LoggingFor r Module)
buildModule = (String -> [String] -> [MS (r md)] -> FS (r Module))
-> String
-> [String]
-> [MS (LoggingFor r md)]
-> FS (LoggingFor r Module)
forall u l. LiftLogging u l => u -> l
liftLogging String -> [String] -> [MS (r md)] -> FS (r Module)
forall (r :: * -> *) vis smt md.
ModuleSym r vis smt md =>
String -> [String] -> [MS (r md)] -> FS (r Module)
P.buildModule

instance (P.FileSym r vis smt md) => P.FileSym (LoggingFor r) vis smt md where
  fileDoc :: FS (LoggingFor r Module) -> FS (LoggingFor r File)
fileDoc = (FS (r Module) -> FS (r File))
-> FS (LoggingFor r Module) -> FS (LoggingFor r File)
forall u l. LiftLogging u l => u -> l
liftLogging FS (r Module) -> FS (r File)
forall (r :: * -> *) vis smt md.
FileSym r vis smt md =>
FS (r Module) -> FS (r File)
P.fileDoc
  docMod :: String
-> String
-> [String]
-> String
-> FS (LoggingFor r File)
-> FS (LoggingFor r File)
docMod = (String
 -> String -> [String] -> String -> FS (r File) -> FS (r File))
-> String
-> String
-> [String]
-> String
-> FS (LoggingFor r File)
-> FS (LoggingFor r File)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> String -> [String] -> String -> FS (r File) -> FS (r File)
forall (r :: * -> *) vis smt md.
FileSym r vis smt md =>
String
-> String -> [String] -> String -> FS (r File) -> FS (r File)
P.docMod

instance (P.ProgramSym r vis smt md prg) => P.ProgramSym (LoggingFor r) vis smt md prg where
  prog :: String
-> String
-> [FS (LoggingFor r File)]
-> GSProgram (LoggingFor r) prg
prog = (String -> String -> [FS (r File)] -> GSProgram r prg)
-> String
-> String
-> [FS (LoggingFor r File)]
-> GSProgram (LoggingFor r) prg
forall u l. LiftLogging u l => u -> l
liftLogging String -> String -> [FS (r File)] -> GSProgram r prg
forall (r :: * -> *) vis smt md prg.
ProgramSym r vis smt md prg =>
String -> String -> [FS (r File)] -> GSProgram r prg
P.prog

-- GOOL

instance (G.OOProg r vis smt md svr att prg) => G.OOProg (LoggingFor r) vis smt md svr att prg

instance (G.GetSet r) => G.GetSet (LoggingFor r) where
  get :: SValue (LoggingFor r)
-> SVariable (LoggingFor r) -> SValue (LoggingFor r)
get = (SValue r -> SVariable r -> SValue r)
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SVariable r -> SValue r
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r
G.get
  set :: SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
set = (SValue r -> SVariable r -> SValue r -> SValue r)
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SVariable r -> SValue r -> SValue r
forall (r :: * -> *).
GetSet r =>
SValue r -> SVariable r -> SValue r -> SValue r
G.set

instance (G.InternalValueExp r) => G.InternalValueExp (LoggingFor r) where
  objMethodCallMixedArgs' :: String
-> VS (LoggingFor r TypeData)
-> SValue (LoggingFor r)
-> [SValue (LoggingFor r)]
-> NamedArgs (LoggingFor r)
-> SValue (LoggingFor r)
objMethodCallMixedArgs' = (String
 -> VS (r TypeData)
 -> SValue r
 -> [SValue r]
 -> NamedArgs r
 -> SValue r)
-> String
-> VS (LoggingFor r TypeData)
-> SValue (LoggingFor r)
-> [SValue (LoggingFor r)]
-> NamedArgs (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> VS (r TypeData)
-> SValue r
-> [SValue r]
-> NamedArgs r
-> SValue r
forall (r :: * -> *).
InternalValueExp r =>
String
-> VS (r TypeData)
-> SValue r
-> [SValue r]
-> NamedArgs r
-> SValue r
G.objMethodCallMixedArgs'
  classMethodCallMixedArgs' :: String
-> VS (LoggingFor r TypeData)
-> VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)]
-> NamedArgs (LoggingFor r)
-> SValue (LoggingFor r)
classMethodCallMixedArgs' = (String
 -> VS (r TypeData)
 -> VS (r TypeData)
 -> [SValue r]
 -> NamedArgs r
 -> SValue r)
-> String
-> VS (LoggingFor r TypeData)
-> VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)]
-> NamedArgs (LoggingFor r)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> VS (r TypeData)
-> VS (r TypeData)
-> [SValue r]
-> NamedArgs r
-> SValue r
forall (r :: * -> *).
InternalValueExp r =>
String
-> VS (r TypeData)
-> VS (r TypeData)
-> [SValue r]
-> NamedArgs r
-> SValue r
G.classMethodCallMixedArgs'

instance (G.OOTypeSym r) => G.OOTypeSym (LoggingFor r) where
  obj :: String -> VS (LoggingFor r TypeData)
obj = (String -> VS (r TypeData)) -> String -> VS (LoggingFor r TypeData)
forall u l. LiftLogging u l => u -> l
liftLogging String -> VS (r TypeData)
forall (r :: * -> *). OOTypeSym r => String -> VS (r TypeData)
G.obj

instance (G.OOVariableSym r) => G.OOVariableSym (LoggingFor r) where
  classVar :: String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
classVar = (String -> VS (r TypeData) -> SVariable r)
-> String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> VS (r TypeData) -> SVariable r
forall (r :: * -> *).
OOVariableSym r =>
String -> VS (r TypeData) -> SVariable r
G.classVar
  classConst :: String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
classConst = (String -> VS (r TypeData) -> SVariable r)
-> String -> VS (LoggingFor r TypeData) -> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> VS (r TypeData) -> SVariable r
forall (r :: * -> *).
OOVariableSym r =>
String -> VS (r TypeData) -> SVariable r
G.classConst
  classVarAccess :: VS (LoggingFor r TypeData)
-> SVariable (LoggingFor r) -> SVariable (LoggingFor r)
classVarAccess = (VS (r TypeData) -> SVariable r -> SVariable r)
-> VS (LoggingFor r TypeData)
-> SVariable (LoggingFor r)
-> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> SVariable r -> SVariable r
forall (r :: * -> *).
OOVariableSym r =>
VS (r TypeData) -> SVariable r -> SVariable r
G.classVarAccess
  extClassVarAccess :: VS (LoggingFor r TypeData)
-> SVariable (LoggingFor r) -> SVariable (LoggingFor r)
extClassVarAccess = (VS (r TypeData) -> SVariable r -> SVariable r)
-> VS (LoggingFor r TypeData)
-> SVariable (LoggingFor r)
-> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r TypeData) -> SVariable r -> SVariable r
forall (r :: * -> *).
OOVariableSym r =>
VS (r TypeData) -> SVariable r -> SVariable r
G.extClassVarAccess
  instanceVarAccess :: SValue (LoggingFor r)
-> SVariable (LoggingFor r) -> SVariable (LoggingFor r)
instanceVarAccess = (SValue r -> SVariable r -> SVariable r)
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SVariable r -> SVariable r
forall (r :: * -> *).
OOVariableSym r =>
SValue r -> SVariable r -> SVariable r
G.instanceVarAccess

instance (DeclStatement (LoggingFor r) smt, G.OODeclStatement r smt) =>
    G.OODeclStatement (LoggingFor r) smt where
  objDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
objDecDef = (SVariable r -> r ScopeData -> SValue r -> MS (r smt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> r ScopeData -> SValue r -> MS (r smt)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
SVariable r -> r ScopeData -> SValue r -> MS (r smt)
G.objDecDef
  objDecNew :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r smt)
objDecNew = (SVariable r -> r ScopeData -> [SValue r] -> MS (r smt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
G.objDecNew
  extObjDecNew :: String
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r smt)
extObjDecNew = (String -> SVariable r -> r ScopeData -> [SValue r] -> MS (r smt))
-> String
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
forall (r :: * -> *) smt.
OODeclStatement r smt =>
String -> SVariable r -> r ScopeData -> [SValue r] -> MS (r smt)
G.extObjDecNew

instance (G.OOFuncAppStatement r smt) => G.OOFuncAppStatement (LoggingFor r) smt where
  selfInOutCall :: InOutCall (LoggingFor r) smt
selfInOutCall = InOutCall r smt -> InOutCall (LoggingFor r) smt
forall u l. LiftLogging u l => u -> l
liftLogging InOutCall r smt
forall (r :: * -> *) smt.
OOFuncAppStatement r smt =>
InOutCall r smt
G.selfInOutCall

instance (G.OOValueSym r) => G.OOValueSym (LoggingFor r) where

instance (G.OOValueExpression r) => G.OOValueExpression (LoggingFor r) where
  newObjMixedArgs :: MixedCtorCall (LoggingFor r)
newObjMixedArgs = MixedCtorCall r -> MixedCtorCall (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging MixedCtorCall r
forall (r :: * -> *). OOValueExpression r => MixedCtorCall r
G.newObjMixedArgs
  extNewObjMixedArgs :: String -> MixedCtorCall (LoggingFor r)
extNewObjMixedArgs = (String -> MixedCtorCall r)
-> String -> MixedCtorCall (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MixedCtorCall r
forall (r :: * -> *).
OOValueExpression r =>
String -> MixedCtorCall r
G.extNewObjMixedArgs
  libNewObjMixedArgs :: String -> MixedCtorCall (LoggingFor r)
libNewObjMixedArgs = (String -> MixedCtorCall r)
-> String -> MixedCtorCall (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MixedCtorCall r
forall (r :: * -> *).
OOValueExpression r =>
String -> MixedCtorCall r
G.libNewObjMixedArgs

instance (G.SelfSym r) => G.SelfSym (LoggingFor r) where
  self :: SVariable (LoggingFor r)
self = SVariable r -> SVariable (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r
forall (r :: * -> *). SelfSym r => SVariable r
G.self

instance (G.OOVariableValue r) => G.OOVariableValue (LoggingFor r)

instance (G.OOFunctionSym r) => G.OOFunctionSym (LoggingFor r) where
  func :: String
-> VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)]
-> VS (LoggingFor r FuncData)
func = (String -> VS (r TypeData) -> [SValue r] -> VS (r FuncData))
-> String
-> VS (LoggingFor r TypeData)
-> [SValue (LoggingFor r)]
-> VS (LoggingFor r FuncData)
forall u l. LiftLogging u l => u -> l
liftLogging String -> VS (r TypeData) -> [SValue r] -> VS (r FuncData)
forall (r :: * -> *).
OOFunctionSym r =>
String -> VS (r TypeData) -> [SValue r] -> VS (r FuncData)
G.func
  objAccess :: SValue (LoggingFor r)
-> VS (LoggingFor r FuncData) -> SValue (LoggingFor r)
objAccess = (SValue r -> VS (r FuncData) -> SValue r)
-> SValue (LoggingFor r)
-> VS (LoggingFor r FuncData)
-> SValue (LoggingFor r)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> VS (r FuncData) -> SValue r
forall (r :: * -> *).
OOFunctionSym r =>
SValue r -> VS (r FuncData) -> SValue r
G.objAccess

instance (G.ObserverPattern r smt) => G.ObserverPattern (LoggingFor r) smt where
  notifyObservers :: VS (LoggingFor r FuncData)
-> VS (LoggingFor r TypeData) -> MS (LoggingFor r smt)
notifyObservers = (VS (r FuncData) -> VS (r TypeData) -> MS (r smt))
-> VS (LoggingFor r FuncData)
-> VS (LoggingFor r TypeData)
-> MS (LoggingFor r smt)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r FuncData) -> VS (r TypeData) -> MS (r smt)
forall (r :: * -> *) smt.
ObserverPattern r smt =>
VS (r FuncData) -> VS (r TypeData) -> MS (r smt)
G.notifyObservers

instance (G.AttachmentSym r att) => G.AttachmentSym (LoggingFor r) att where
  classLevel :: LoggingFor r att
classLevel = r att -> LoggingFor r att
forall u l. LiftLogging u l => u -> l
liftLogging r att
forall (r :: * -> *) att. AttachmentSym r att => r att
G.classLevel
  instanceLevel :: LoggingFor r att
instanceLevel = r att -> LoggingFor r att
forall u l. LiftLogging u l => u -> l
liftLogging r att
forall (r :: * -> *) att. AttachmentSym r att => r att
G.instanceLevel

instance (G.OOMethodSym r vis smt md att) => G.OOMethodSym (LoggingFor r) vis smt md att where
  method :: String
-> LoggingFor r vis
-> LoggingFor r att
-> VS (LoggingFor r TypeData)
-> [MS (LoggingFor r ParamData)]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r md)
method = (String
 -> r vis
 -> r att
 -> VS (r TypeData)
 -> [MS (r ParamData)]
 -> MS (r Body)
 -> MS (r md))
-> String
-> LoggingFor r vis
-> LoggingFor r att
-> VS (LoggingFor r TypeData)
-> [MS (LoggingFor r ParamData)]
-> MS (LoggingFor r Body)
-> MS (LoggingFor r md)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Body)
-> MS (r md)
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
String
-> r vis
-> r att
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r Body)
-> MS (r md)
G.method
  getMethod :: SVariable (LoggingFor r) -> MS (LoggingFor r md)
getMethod = (SVariable r -> MS (r md))
-> SVariable (LoggingFor r) -> MS (LoggingFor r md)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> MS (r md)
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
SVariable r -> MS (r md)
G.getMethod
  setMethod :: SVariable (LoggingFor r) -> MS (LoggingFor r md)
setMethod = (SVariable r -> MS (r md))
-> SVariable (LoggingFor r) -> MS (LoggingFor r md)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> MS (r md)
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
SVariable r -> MS (r md)
G.setMethod
  constructor :: [MS (LoggingFor r ParamData)]
-> Initializers (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r md)
constructor = ([MS (r ParamData)] -> Initializers r -> MS (r Body) -> MS (r md))
-> [MS (LoggingFor r ParamData)]
-> Initializers (LoggingFor r)
-> MS (LoggingFor r Body)
-> MS (LoggingFor r md)
forall u l. LiftLogging u l => u -> l
liftLogging [MS (r ParamData)] -> Initializers r -> MS (r Body) -> MS (r md)
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
[MS (r ParamData)] -> Initializers r -> MS (r Body) -> MS (r md)
G.constructor
  inOutMethod :: String
-> LoggingFor r vis
-> LoggingFor r att
-> InOutFunc (LoggingFor r) md
inOutMethod = (String -> r vis -> r att -> InOutFunc r md)
-> String
-> LoggingFor r vis
-> LoggingFor r att
-> InOutFunc (LoggingFor r) md
forall u l. LiftLogging u l => u -> l
liftLogging String -> r vis -> r att -> InOutFunc r md
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
String -> r vis -> r att -> InOutFunc r md
G.inOutMethod
  docInOutMethod :: String
-> LoggingFor r vis
-> LoggingFor r att
-> DocInOutFunc (LoggingFor r) md
docInOutMethod = (String -> r vis -> r att -> DocInOutFunc r md)
-> String
-> LoggingFor r vis
-> LoggingFor r att
-> DocInOutFunc (LoggingFor r) md
forall u l. LiftLogging u l => u -> l
liftLogging String -> r vis -> r att -> DocInOutFunc r md
forall (r :: * -> *) vis smt md att.
OOMethodSym r vis smt md att =>
String -> r vis -> r att -> DocInOutFunc r md
G.docInOutMethod

instance (G.StateVarSym r vis svr att) => G.StateVarSym (LoggingFor r) vis svr att where
  stateVar :: LoggingFor r vis
-> LoggingFor r att
-> SVariable (LoggingFor r)
-> CSStateVar (LoggingFor r) svr
stateVar = (r vis -> r att -> SVariable r -> CSStateVar r svr)
-> LoggingFor r vis
-> LoggingFor r att
-> SVariable (LoggingFor r)
-> CSStateVar (LoggingFor r) svr
forall u l. LiftLogging u l => u -> l
liftLogging r vis -> r att -> SVariable r -> CSStateVar r svr
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> r att -> SVariable r -> CSStateVar r svr
G.stateVar
  stateVarDef :: LoggingFor r vis
-> LoggingFor r att
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> CSStateVar (LoggingFor r) svr
stateVarDef = (r vis -> r att -> SVariable r -> SValue r -> CSStateVar r svr)
-> LoggingFor r vis
-> LoggingFor r att
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> CSStateVar (LoggingFor r) svr
forall u l. LiftLogging u l => u -> l
liftLogging r vis -> r att -> SVariable r -> SValue r -> CSStateVar r svr
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> r att -> SVariable r -> SValue r -> CSStateVar r svr
G.stateVarDef
  constVar :: LoggingFor r vis
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> CSStateVar (LoggingFor r) svr
constVar = (r vis -> SVariable r -> SValue r -> CSStateVar r svr)
-> LoggingFor r vis
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> CSStateVar (LoggingFor r) svr
forall u l. LiftLogging u l => u -> l
liftLogging r vis -> SVariable r -> SValue r -> CSStateVar r svr
forall (r :: * -> *) vis svr att.
StateVarSym r vis svr att =>
r vis -> SVariable r -> SValue r -> CSStateVar r svr
G.constVar

instance (G.ClassSym r vis smt md svr att) => G.ClassSym (LoggingFor r) vis smt md svr att where
  buildClass :: Maybe String
-> [CSStateVar (LoggingFor r) svr]
-> [MS (LoggingFor r md)]
-> [MS (LoggingFor r md)]
-> CS (LoggingFor r Body)
buildClass = (Maybe String
 -> [CSStateVar r svr] -> [MS (r md)] -> [MS (r md)] -> CS (r Body))
-> Maybe String
-> [CSStateVar (LoggingFor r) svr]
-> [MS (LoggingFor r md)]
-> [MS (LoggingFor r md)]
-> CS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging Maybe String
-> [CSStateVar r svr] -> [MS (r md)] -> [MS (r md)] -> CS (r Body)
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
Maybe String
-> [CSStateVar r svr] -> [MS (r md)] -> [MS (r md)] -> CS (r Body)
G.buildClass
  extraClass :: String
-> Maybe String
-> [CSStateVar (LoggingFor r) svr]
-> [MS (LoggingFor r md)]
-> [MS (LoggingFor r md)]
-> CS (LoggingFor r Body)
extraClass = (String
 -> Maybe String
 -> [CSStateVar r svr]
 -> [MS (r md)]
 -> [MS (r md)]
 -> CS (r Body))
-> String
-> Maybe String
-> [CSStateVar (LoggingFor r) svr]
-> [MS (LoggingFor r md)]
-> [MS (LoggingFor r md)]
-> CS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> Maybe String
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Body)
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
String
-> Maybe String
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Body)
G.extraClass
  implementingClass :: String
-> [String]
-> [CSStateVar (LoggingFor r) svr]
-> [MS (LoggingFor r md)]
-> [MS (LoggingFor r md)]
-> CS (LoggingFor r Body)
implementingClass = (String
 -> [String]
 -> [CSStateVar r svr]
 -> [MS (r md)]
 -> [MS (r md)]
 -> CS (r Body))
-> String
-> [String]
-> [CSStateVar (LoggingFor r) svr]
-> [MS (LoggingFor r md)]
-> [MS (LoggingFor r md)]
-> CS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> [String]
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Body)
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
String
-> [String]
-> [CSStateVar r svr]
-> [MS (r md)]
-> [MS (r md)]
-> CS (r Body)
G.implementingClass
  docClass :: String -> CS (LoggingFor r Body) -> CS (LoggingFor r Body)
docClass = (String -> CS (r Body) -> CS (r Body))
-> String -> CS (LoggingFor r Body) -> CS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging String -> CS (r Body) -> CS (r Body)
forall (r :: * -> *) vis smt md svr att.
ClassSym r vis smt md svr att =>
String -> CS (r Body) -> CS (r Body)
G.docClass

instance (G.ModuleSym r vis smt md svr att) => G.ModuleSym (LoggingFor r) vis smt md svr att where
  buildModule :: String
-> [String]
-> [MS (LoggingFor r md)]
-> [CS (LoggingFor r Body)]
-> FS (LoggingFor r Module)
buildModule = (String
 -> [String] -> [MS (r md)] -> [CS (r Body)] -> FS (r Module))
-> String
-> [String]
-> [MS (LoggingFor r md)]
-> [CS (LoggingFor r Body)]
-> FS (LoggingFor r Module)
forall u l. LiftLogging u l => u -> l
liftLogging String -> [String] -> [MS (r md)] -> [CS (r Body)] -> FS (r Module)
forall (r :: * -> *) vis smt md svr att.
ModuleSym r vis smt md svr att =>
String -> [String] -> [MS (r md)] -> [CS (r Body)] -> FS (r Module)
G.buildModule

instance (G.FileSym r vis smt md svr att) => G.FileSym (LoggingFor r) vis smt md svr att where
  fileDoc :: FS (LoggingFor r Module) -> FS (LoggingFor r File)
fileDoc = (FS (r Module) -> FS (r File))
-> FS (LoggingFor r Module) -> FS (LoggingFor r File)
forall u l. LiftLogging u l => u -> l
liftLogging FS (r Module) -> FS (r File)
forall (r :: * -> *) vis smt md svr att.
FileSym r vis smt md svr att =>
FS (r Module) -> FS (r File)
G.fileDoc
  docMod :: String
-> String
-> [String]
-> String
-> FS (LoggingFor r File)
-> FS (LoggingFor r File)
docMod = (String
 -> String -> [String] -> String -> FS (r File) -> FS (r File))
-> String
-> String
-> [String]
-> String
-> FS (LoggingFor r File)
-> FS (LoggingFor r File)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> String -> [String] -> String -> FS (r File) -> FS (r File)
forall (r :: * -> *) vis smt md svr att.
FileSym r vis smt md svr att =>
String
-> String -> [String] -> String -> FS (r File) -> FS (r File)
G.docMod

instance (G.ProgramSym r vis smt md svr att prg) => G.ProgramSym (LoggingFor r) vis smt md svr att prg where
  prog :: String
-> String
-> [FS (LoggingFor r File)]
-> GSProgram (LoggingFor r) prg
prog = (String -> String -> [FS (r File)] -> GSProgram r prg)
-> String
-> String
-> [FS (LoggingFor r File)]
-> GSProgram (LoggingFor r) prg
forall u l. LiftLogging u l => u -> l
liftLogging String -> String -> [FS (r File)] -> GSProgram r prg
forall (r :: * -> *) vis smt md svr att prg.
ProgramSym r vis smt md svr att prg =>
String -> String -> [FS (r File)] -> GSProgram r prg
G.prog

instance (G.StrategyPattern r smt) => G.StrategyPattern (LoggingFor r) smt where
  runStrategy :: String
-> [(String, MS (LoggingFor r Body))]
-> Maybe (SValue (LoggingFor r))
-> Maybe (SVariable (LoggingFor r))
-> MS (LoggingFor r Body)
runStrategy = (String
 -> [(String, MS (r Body))]
 -> Maybe (SValue r)
 -> Maybe (SVariable r)
 -> MS (r Body))
-> String
-> [(String, MS (LoggingFor r Body))]
-> Maybe (SValue (LoggingFor r))
-> Maybe (SVariable (LoggingFor r))
-> MS (LoggingFor r Body)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> [(String, MS (r Body))]
-> Maybe (SValue r)
-> Maybe (SVariable r)
-> MS (r Body)
forall (r :: * -> *) smt.
StrategyPattern r smt =>
String
-> [(String, MS (r Body))]
-> Maybe (SValue r)
-> Maybe (SVariable r)
-> MS (r Body)
G.runStrategy