{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE DerivingVia #-}
-- | 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
  :: (FileHandling r stmt, PrintFile r stmt, VariableValue r, VariableElim r, Literal r)
  => SVariable (LoggingFor r) -> [MS (r stmt)]
logVarUpdate :: forall (r :: * -> *) stmt.
(FileHandling r stmt, PrintFile r stmt, VariableValue r,
 VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r stmt)]
logVarUpdate SVariable (LoggingFor r)
x =
  [ SVariable r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
FileHandling r stmt =>
SVariable r -> SValue r -> MS (r stmt)
openFileA SVariable r
forall (r :: * -> *). VariableSym r => SVariable r
varLogFile SValue r
forall (r :: * -> *). Literal r => SValue r
logName
  , do
      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
      printFileStr valLogFile $ "var '" <> x' <> "' assigned "
  , SValue r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintFile r stmt =>
SValue r -> SValue r -> MS (r stmt)
printFile SValue r
forall (r :: * -> *). VariableValue r => SValue r
valLogFile (SValue r -> MS (r stmt)) -> SValue r -> MS (r stmt)
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
      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
      printFileStrLn valLogFile $ " in module " <> modName
  , SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
FileHandling r stmt =>
SValue r -> MS (r stmt)
closeFile SValue r
forall (r :: * -> *). VariableValue r => SValue r
valLogFile
  ]

instance
  ( MultiStatement r stmt
  , AssignStatement r stmt
  , FileHandling r stmt
  , PrintFile r stmt
  , VariableValue r
  , VariableElim r
  , Literal r
  ) => AssignStatement (LoggingFor r) stmt where
  &-= :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
(&-=) = (SVariable r -> SValue r -> MS (r stmt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
AssignStatement r stmt =>
SVariable r -> SValue r -> MS (r stmt)
(&-=)
  &+= :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
(&+=) = (SVariable r -> SValue r -> MS (r stmt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
AssignStatement r stmt =>
SVariable r -> SValue r -> MS (r stmt)
(&+=)
  &++ :: SVariable (LoggingFor r) -> MS (LoggingFor r stmt)
(&++) = (SVariable r -> MS (r stmt))
-> SVariable (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> MS (r stmt)
forall (r :: * -> *) stmt.
AssignStatement r stmt =>
SVariable r -> MS (r stmt)
(&++)
  &-- :: SVariable (LoggingFor r) -> MS (LoggingFor r stmt)
(&--) = (SVariable r -> MS (r stmt))
-> SVariable (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> MS (r stmt)
forall (r :: * -> *) stmt.
AssignStatement r stmt =>
SVariable r -> MS (r stmt)
(&--)
  assign :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
assign SVariable (LoggingFor r)
x SValue (LoggingFor r)
e = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$ [MS (r stmt)] -> MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi ([MS (r stmt)] -> MS (r stmt)) -> [MS (r stmt)] -> MS (r stmt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
AssignStatement r stmt =>
SVariable r -> SValue r -> MS (r stmt)
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 stmt) -> [MS (r stmt)] -> [MS (r stmt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r stmt)]
forall (r :: * -> *) stmt.
(FileHandling r stmt, PrintFile r stmt, VariableValue r,
 VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r stmt)]
logVarUpdate SVariable (LoggingFor r)
x

instance (List r) => List (LoggingFor r) 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 :: * -> *). List r => SValue r -> SValue r
listSize
  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 :: * -> *). List r => SValue r -> SValue r -> SValue r
listAccess
  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 :: * -> *). List r => SValue r -> SValue r -> SValue r
indexOf

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

instance
  ( MultiStatement r stmt
  , DeclStatement r stmt bod
  , FileHandling r stmt
  , PrintFile r stmt
  , VariableValue r
  , VariableElim r
  , Literal r
  ) => DeclStatement (LoggingFor r) stmt bod where
  varDec :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData -> MS (LoggingFor r stmt)
varDec = (SVariable r -> r ScopeData -> MS (r stmt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> r ScopeData -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
SVariable r -> r ScopeData -> MS (r stmt)
varDec
  varDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
varDecDef SVariable (LoggingFor r)
vr LoggingFor r ScopeData
scp SValue (LoggingFor r)
vl = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$ [MS (r stmt)] -> MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi ([MS (r stmt)] -> MS (r stmt)) -> [MS (r stmt)] -> MS (r stmt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
SVariable r -> r ScopeData -> SValue r -> MS (r stmt)
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 stmt) -> [MS (r stmt)] -> [MS (r stmt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r stmt)]
forall (r :: * -> *) stmt.
(FileHandling r stmt, PrintFile r stmt, VariableValue r,
 VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r stmt)]
logVarUpdate SVariable (LoggingFor r)
vr
  listDec :: Integer
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r stmt)
listDec = (Integer -> SVariable r -> r ScopeData -> MS (r stmt))
-> Integer
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging Integer -> SVariable r -> r ScopeData -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
Integer -> SVariable r -> r ScopeData -> MS (r stmt)
listDec
  listDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r stmt)
listDecDef SVariable (LoggingFor r)
vr LoggingFor r ScopeData
scp [SValue (LoggingFor r)]
vls = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt)
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 stmt)
setDec = (SVariable r -> r ScopeData -> MS (r stmt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> r ScopeData -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
SVariable r -> r ScopeData -> MS (r stmt)
setDec
  setDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
setDecDef SVariable (LoggingFor r)
vr LoggingFor r ScopeData
scp SValue (LoggingFor r)
vl = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
SVariable r -> r ScopeData -> SValue r -> MS (r stmt)
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 stmt)
arrayDec = (Integer -> SValue r -> SVariable r -> r ScopeData -> MS (r stmt))
-> Integer
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging Integer -> SValue r -> SVariable r -> r ScopeData -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
Integer -> SValue r -> SVariable r -> r ScopeData -> MS (r stmt)
arrayDec
  arrayDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r stmt)
arrayDecDef SVariable (LoggingFor r)
vr LoggingFor r ScopeData
scp [SValue (LoggingFor r)]
vls = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt)
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 stmt)
constDecDef SVariable (LoggingFor r)
cnst LoggingFor r ScopeData
scp SValue (LoggingFor r)
vl = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$ [MS (r stmt)] -> MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi ([MS (r stmt)] -> MS (r stmt)) -> [MS (r stmt)] -> MS (r stmt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> r ScopeData -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
SVariable r -> r ScopeData -> SValue r -> MS (r stmt)
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 stmt) -> [MS (r stmt)] -> [MS (r stmt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r stmt)]
forall (r :: * -> *) stmt.
(FileHandling r stmt, PrintFile r stmt, VariableValue r,
 VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r stmt)]
logVarUpdate SVariable (LoggingFor r)
cnst
  funcDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SVariable (LoggingFor r)]
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
funcDecDef = (SVariable r
 -> r ScopeData -> [SVariable r] -> MS (r bod) -> MS (r stmt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SVariable (LoggingFor r)]
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r
-> r ScopeData -> [SVariable r] -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
DeclStatement r stmt bod =>
SVariable r
-> r ScopeData -> [SVariable r] -> MS (r bod) -> MS (r stmt)
funcDecDef

instance (PrintConsole r stmt) => PrintConsole (LoggingFor r) stmt where
  print :: SValue (LoggingFor r) -> MS (LoggingFor r stmt)
print = (SValue r -> MS (r stmt))
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintConsole r stmt =>
SValue r -> MS (r stmt)
print
  printLn :: SValue (LoggingFor r) -> MS (LoggingFor r stmt)
printLn = (SValue r -> MS (r stmt))
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintConsole r stmt =>
SValue r -> MS (r stmt)
printLn
  printStr :: String -> MS (LoggingFor r stmt)
printStr = (String -> MS (r stmt)) -> String -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintConsole r stmt =>
String -> MS (r stmt)
printStr
  printStrLn :: String -> MS (LoggingFor r stmt)
printStrLn = (String -> MS (r stmt)) -> String -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintConsole r stmt =>
String -> MS (r stmt)
printStrLn

instance
  ( MultiStatement r stmt
  , FileHandling r stmt
  , PrintFile r stmt
  , ReadConsole r stmt
  , VariableValue r
  , VariableElim r
  , Literal r
  ) => ReadConsole (LoggingFor r) stmt where
  getInput :: SVariable (LoggingFor r) -> MS (LoggingFor r stmt)
getInput SVariable (LoggingFor r)
vr = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$ [MS (r stmt)] -> MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi ([MS (r stmt)] -> MS (r stmt)) -> [MS (r stmt)] -> MS (r stmt)
forall a b. (a -> b) -> a -> b
$
    SVariable r -> MS (r stmt)
forall (r :: * -> *) stmt.
ReadConsole r stmt =>
SVariable r -> MS (r stmt)
getInput (SVariable (LoggingFor r) -> SVariable r
forall u l. LiftLogging u l => l -> u
lowerLogging SVariable (LoggingFor r)
vr) MS (r stmt) -> [MS (r stmt)] -> [MS (r stmt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r stmt)]
forall (r :: * -> *) stmt.
(FileHandling r stmt, PrintFile r stmt, VariableValue r,
 VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r stmt)]
logVarUpdate SVariable (LoggingFor r)
vr
  discardInput :: MS (LoggingFor r stmt)
discardInput = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r stmt)
forall (r :: * -> *) stmt. ReadConsole r stmt => MS (r stmt)
discardInput

instance (FileHandling r stmt) => FileHandling (LoggingFor r) stmt where
  openFileR :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
openFileR = (SVariable r -> SValue r -> MS (r stmt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
FileHandling r stmt =>
SVariable r -> SValue r -> MS (r stmt)
openFileR
  openFileW :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
openFileW = (SVariable r -> SValue r -> MS (r stmt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
FileHandling r stmt =>
SVariable r -> SValue r -> MS (r stmt)
openFileW
  openFileA :: SVariable (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
openFileA = (SVariable r -> SValue r -> MS (r stmt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
FileHandling r stmt =>
SVariable r -> SValue r -> MS (r stmt)
openFileA
  closeFile :: SValue (LoggingFor r) -> MS (LoggingFor r stmt)
closeFile = (SValue r -> MS (r stmt))
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
FileHandling r stmt =>
SValue r -> MS (r stmt)
closeFile

instance (PrintFile r stmt) => PrintFile (LoggingFor r) stmt where
  printFile :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
printFile = (SValue r -> SValue r -> MS (r stmt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintFile r stmt =>
SValue r -> SValue r -> MS (r stmt)
printFile
  printFileLn :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
printFileLn = (SValue r -> SValue r -> MS (r stmt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintFile r stmt =>
SValue r -> SValue r -> MS (r stmt)
printFileLn
  printFileStr :: SValue (LoggingFor r) -> String -> MS (LoggingFor r stmt)
printFileStr = (SValue r -> String -> MS (r stmt))
-> SValue (LoggingFor r) -> String -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> String -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintFile r stmt =>
SValue r -> String -> MS (r stmt)
printFileStr
  printFileStrLn :: SValue (LoggingFor r) -> String -> MS (LoggingFor r stmt)
printFileStrLn = (SValue r -> String -> MS (r stmt))
-> SValue (LoggingFor r) -> String -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> String -> MS (r stmt)
forall (r :: * -> *) stmt.
PrintFile r stmt =>
SValue r -> String -> MS (r stmt)
printFileStrLn

instance
  ( MultiStatement r stmt
  , FileHandling r stmt
  , PrintFile r stmt
  , ReadFile r stmt
  , VariableValue r
  , VariableElim r
  , Literal r
  ) => ReadFile (LoggingFor r) stmt where
  getFileInput :: SValue (LoggingFor r)
-> SVariable (LoggingFor r) -> MS (LoggingFor r stmt)
getFileInput SValue (LoggingFor r)
file SVariable (LoggingFor r)
vr = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$ [MS (r stmt)] -> MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi ([MS (r stmt)] -> MS (r stmt)) -> [MS (r stmt)] -> MS (r stmt)
forall a b. (a -> b) -> a -> b
$
    SValue r -> SVariable r -> MS (r stmt)
forall (r :: * -> *) stmt.
ReadFile r stmt =>
SValue r -> SVariable r -> MS (r stmt)
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 stmt) -> [MS (r stmt)] -> [MS (r stmt)]
forall a. a -> [a] -> [a]
: SVariable (LoggingFor r) -> [MS (r stmt)]
forall (r :: * -> *) stmt.
(FileHandling r stmt, PrintFile r stmt, VariableValue r,
 VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r stmt)]
logVarUpdate SVariable (LoggingFor r)
vr
  discardFileInput :: SValue (LoggingFor r) -> MS (LoggingFor r stmt)
discardFileInput = (SValue r -> MS (r stmt))
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
ReadFile r stmt =>
SValue r -> MS (r stmt)
discardFileInput
  getFileInputLine :: SValue (LoggingFor r)
-> SVariable (LoggingFor r) -> MS (LoggingFor r stmt)
getFileInputLine = (SValue r -> SVariable r -> MS (r stmt))
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SVariable r -> MS (r stmt)
forall (r :: * -> *) stmt.
ReadFile r stmt =>
SValue r -> SVariable r -> MS (r stmt)
getFileInputLine
  discardFileLine :: SValue (LoggingFor r) -> MS (LoggingFor r stmt)
discardFileLine = (SValue r -> MS (r stmt))
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
ReadFile r stmt =>
SValue r -> MS (r stmt)
discardFileLine
  getFileInputAll :: SValue (LoggingFor r)
-> SVariable (LoggingFor r) -> MS (LoggingFor r stmt)
getFileInputAll = (SValue r -> SVariable r -> MS (r stmt))
-> SValue (LoggingFor r)
-> SVariable (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SVariable r -> MS (r stmt)
forall (r :: * -> *) stmt.
ReadFile r stmt =>
SValue r -> SVariable r -> MS (r stmt)
getFileInputAll

instance
  ( MultiStatement r stmt
  , StringStatement r stmt
  , FileHandling r stmt
  , PrintFile r stmt
  , VariableValue r
  , VariableElim r
  , Literal r
  ) => StringStatement (LoggingFor r) stmt where
  stringSplit :: Char
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
stringSplit Char
chr SVariable (LoggingFor r)
vr SValue (LoggingFor r)
str  = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$
    Char -> SVariable r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
StringStatement r stmt =>
Char -> SVariable r -> SValue r -> MS (r stmt)
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 stmt)
stringListVals [SVariable (LoggingFor r)]
vrs SValue (LoggingFor r)
strs  = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$
    [SVariable r] -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
StringStatement r stmt =>
[SVariable r] -> SValue r -> MS (r stmt)
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 stmt)
stringListLists [SVariable (LoggingFor r)]
vrs SValue (LoggingFor r)
strs = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging (MS (r stmt) -> MS (LoggingFor r stmt))
-> MS (r stmt) -> MS (LoggingFor r stmt)
forall a b. (a -> b) -> a -> b
$ [MS (r stmt)] -> MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi ([MS (r stmt)] -> MS (r stmt)) -> [MS (r stmt)] -> MS (r stmt)
forall a b. (a -> b) -> a -> b
$
    [SVariable r] -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
StringStatement r stmt =>
[SVariable r] -> SValue r -> MS (r stmt)
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 stmt) -> [MS (r stmt)] -> [MS (r stmt)]
forall a. a -> [a] -> [a]
: (SVariable (LoggingFor r) -> [MS (r stmt)])
-> [SVariable (LoggingFor r)] -> [MS (r stmt)]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap SVariable (LoggingFor r) -> [MS (r stmt)]
forall (r :: * -> *) stmt.
(FileHandling r stmt, PrintFile r stmt, VariableValue r,
 VariableElim r, Literal r) =>
SVariable (LoggingFor r) -> [MS (r stmt)]
logVarUpdate [SVariable (LoggingFor r)]
vrs

-- SharedProg Boilerplate

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 EmptyStatement r stmt => EmptyStatement (LoggingFor r) stmt where
  emptyStmt :: MS (LoggingFor r stmt)
emptyStmt = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
EmptyStatement r stmt =>
MS (r stmt)
emptyStmt

instance MultiStatement r stmt => MultiStatement (LoggingFor r) stmt where
  multi :: [MS (LoggingFor r stmt)] -> MS (LoggingFor r stmt)
multi = ([MS (r stmt)] -> MS (r stmt))
-> [MS (LoggingFor r stmt)] -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging [MS (r stmt)] -> MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
MultiStatement r stmt =>
[MS (r stmt)] -> MS (r stmt)
multi

instance ValueStatement r stmt => ValueStatement (LoggingFor r) stmt where
  valStmt :: SValue (LoggingFor r) -> MS (LoggingFor r stmt)
valStmt = (SValue r -> MS (r stmt))
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r stmt)
forall (r :: * -> *) stmt.
ValueStatement r stmt =>
SValue r -> MS (r stmt)
valStmt

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 stmt) => CommentStatement (LoggingFor r) stmt where
  comment :: String -> MS (LoggingFor r stmt)
comment = (String -> MS (r stmt)) -> String -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r stmt)
forall {k} (r :: k -> *) (stmt :: k).
CommentStatement r stmt =>
String -> MS (r stmt)
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 block stmt) => BlockSym (LoggingFor r) block stmt where
  block :: [MS (LoggingFor r stmt)] -> MS (LoggingFor r block)
block = ([MS (r stmt)] -> MS (r block))
-> [MS (LoggingFor r stmt)] -> MS (LoggingFor r block)
forall u l. LiftLogging u l => u -> l
liftLogging [MS (r stmt)] -> MS (r block)
forall {k} (r :: k -> *) (block :: k) (stmt :: k).
BlockSym r block stmt =>
[MS (r stmt)] -> MS (r block)
block

instance (BodySym r bod block) => BodySym (LoggingFor r) bod block where
  body :: [MS (LoggingFor r block)] -> MS (LoggingFor r bod)
body = ([MS (r block)] -> MS (r bod))
-> [MS (LoggingFor r block)] -> MS (LoggingFor r bod)
forall u l. LiftLogging u l => u -> l
liftLogging [MS (r block)] -> MS (r bod)
forall {k} (r :: k -> *) (bod :: k) (block :: k).
BodySym r bod block =>
[MS (r block)] -> MS (r bod)
body
  addComments :: String -> MS (LoggingFor r bod) -> MS (LoggingFor r bod)
addComments = (String -> MS (r bod) -> MS (r bod))
-> String -> MS (LoggingFor r bod) -> MS (LoggingFor r bod)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r bod) -> MS (r bod)
forall {k} (r :: k -> *) (bod :: k) (block :: k).
BodySym r bod block =>
String -> MS (r bod) -> MS (r bod)
addComments

instance (ControlStatement r stmt bod) => ControlStatement (LoggingFor r) stmt bod where
  break :: MS (LoggingFor r stmt)
break = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
MS (r stmt)
break
  continue :: MS (LoggingFor r stmt)
continue = MS (r stmt) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
MS (r stmt)
continue
  returnStmt :: SValue (LoggingFor r) -> MS (LoggingFor r stmt)
returnStmt = (SValue r -> MS (r stmt))
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
SValue r -> MS (r stmt)
returnStmt
  throw :: String -> MS (LoggingFor r stmt)
throw = (String -> MS (r stmt)) -> String -> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
String -> MS (r stmt)
throw
  ifCond :: [(SValue (LoggingFor r), MS (LoggingFor r bod))]
-> MS (LoggingFor r bod) -> MS (LoggingFor r stmt)
ifCond = ([(SValue r, MS (r bod))] -> MS (r bod) -> MS (r stmt))
-> [(SValue (LoggingFor r), MS (LoggingFor r bod))]
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging [(SValue r, MS (r bod))] -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
[(SValue r, MS (r bod))] -> MS (r bod) -> MS (r stmt)
ifCond
  switch :: SValue (LoggingFor r)
-> [(SValue (LoggingFor r), MS (LoggingFor r bod))]
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
switch = (SValue r -> [(SValue r, MS (r bod))] -> MS (r bod) -> MS (r stmt))
-> SValue (LoggingFor r)
-> [(SValue (LoggingFor r), MS (LoggingFor r bod))]
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> [(SValue r, MS (r bod))] -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
SValue r -> [(SValue r, MS (r bod))] -> MS (r bod) -> MS (r stmt)
switch
  ifExists :: SValue (LoggingFor r)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
ifExists = (SValue r -> MS (r bod) -> MS (r bod) -> MS (r stmt))
-> SValue (LoggingFor r)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r bod) -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
SValue r -> MS (r bod) -> MS (r bod) -> MS (r stmt)
ifExists
  for :: MS (LoggingFor r stmt)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
for = (MS (r stmt)
 -> SValue r -> MS (r stmt) -> MS (r bod) -> MS (r stmt))
-> MS (LoggingFor r stmt)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r stmt) -> SValue r -> MS (r stmt) -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
MS (r stmt) -> SValue r -> MS (r stmt) -> MS (r bod) -> MS (r stmt)
for
  forRange :: SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forRange = (SVariable r
 -> SValue r -> SValue r -> SValue r -> MS (r bod) -> MS (r stmt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r
-> SValue r -> SValue r -> SValue r -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
SVariable r
-> SValue r -> SValue r -> SValue r -> MS (r bod) -> MS (r stmt)
forRange
  forEach :: SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forEach = (SVariable r -> SValue r -> MS (r bod) -> MS (r stmt))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> SValue r -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
SVariable r -> SValue r -> MS (r bod) -> MS (r stmt)
forEach
  while :: SValue (LoggingFor r)
-> MS (LoggingFor r bod) -> MS (LoggingFor r stmt)
while = (SValue r -> MS (r bod) -> MS (r stmt))
-> SValue (LoggingFor r)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
SValue r -> MS (r bod) -> MS (r stmt)
while
  tryCatch :: MS (LoggingFor r bod)
-> MS (LoggingFor r bod) -> MS (LoggingFor r stmt)
tryCatch = (MS (r bod) -> MS (r bod) -> MS (r stmt))
-> MS (LoggingFor r bod)
-> MS (LoggingFor r bod)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r bod) -> MS (r bod) -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
MS (r bod) -> MS (r bod) -> MS (r stmt)
tryCatch
  assert :: SValue (LoggingFor r)
-> SValue (LoggingFor r) -> MS (LoggingFor r stmt)
assert = (SValue r -> SValue r -> MS (r stmt))
-> SValue (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SValue r -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt bod.
ControlStatement r stmt bod =>
SValue r -> SValue r -> MS (r stmt)
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 stmt) => FuncAppStatement (LoggingFor r) stmt where
  inOutCall :: InOutCall (LoggingFor r) stmt
inOutCall = InOutCall r stmt -> InOutCall (LoggingFor r) stmt
forall u l. LiftLogging u l => u -> l
liftLogging InOutCall r stmt
forall (r :: * -> *) stmt.
FuncAppStatement r stmt =>
InOutCall r stmt
inOutCall
  extInOutCall :: String -> InOutCall (LoggingFor r) stmt
extInOutCall = (String -> InOutCall r stmt)
-> String -> InOutCall (LoggingFor r) stmt
forall u l. LiftLogging u l => u -> l
liftLogging String -> InOutCall r stmt
forall (r :: * -> *) stmt.
FuncAppStatement r stmt =>
String -> InOutCall r stmt
extInOutCall

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

instance (InternalList r block) => InternalList (LoggingFor r) block where
  listSlice' :: Maybe (SValue (LoggingFor r))
-> Maybe (SValue (LoggingFor r))
-> Maybe (SValue (LoggingFor r))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r block)
listSlice' = (Maybe (SValue r)
 -> Maybe (SValue r)
 -> Maybe (SValue r)
 -> SVariable r
 -> SValue r
 -> MS (r block))
-> Maybe (SValue (LoggingFor r))
-> Maybe (SValue (LoggingFor r))
-> Maybe (SValue (LoggingFor r))
-> SVariable (LoggingFor r)
-> SValue (LoggingFor r)
-> MS (LoggingFor r block)
forall u l. LiftLogging u l => u -> l
liftLogging Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MS (r block)
forall (r :: * -> *) block.
InternalList r block =>
Maybe (SValue r)
-> Maybe (SValue r)
-> Maybe (SValue r)
-> SVariable r
-> SValue r
-> MS (r block)
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 {k} (r :: k -> *) (vis :: k). 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 {k} (r :: k -> *) (vis :: k). VisibilitySym r vis => r vis
public

instance (MethodSym r vis mthd bod) => MethodSym (LoggingFor r) vis mthd bod where
  docMain :: MS (LoggingFor r bod) -> MS (LoggingFor r mthd)
docMain = (MS (r bod) -> MS (r mthd))
-> MS (LoggingFor r bod) -> MS (LoggingFor r mthd)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r bod) -> MS (r mthd)
forall (r :: * -> *) vis mthd bod.
MethodSym r vis mthd bod =>
MS (r bod) -> MS (r mthd)
docMain
  function :: String
-> LoggingFor r vis
-> VS (LoggingFor r TypeData)
-> [MS (LoggingFor r ParamData)]
-> MS (LoggingFor r bod)
-> MS (LoggingFor r mthd)
function = (String
 -> r vis
 -> VS (r TypeData)
 -> [MS (r ParamData)]
 -> MS (r bod)
 -> MS (r mthd))
-> String
-> LoggingFor r vis
-> VS (LoggingFor r TypeData)
-> [MS (LoggingFor r ParamData)]
-> MS (LoggingFor r bod)
-> MS (LoggingFor r mthd)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r bod)
-> MS (r mthd)
forall (r :: * -> *) vis mthd bod.
MethodSym r vis mthd bod =>
String
-> r vis
-> VS (r TypeData)
-> [MS (r ParamData)]
-> MS (r bod)
-> MS (r mthd)
function
  mainFunction :: MS (LoggingFor r bod) -> MS (LoggingFor r mthd)
mainFunction = (MS (r bod) -> MS (r mthd))
-> MS (LoggingFor r bod) -> MS (LoggingFor r mthd)
forall u l. LiftLogging u l => u -> l
liftLogging MS (r bod) -> MS (r mthd)
forall (r :: * -> *) vis mthd bod.
MethodSym r vis mthd bod =>
MS (r bod) -> MS (r mthd)
mainFunction
  docFunc :: String
-> [String]
-> Maybe String
-> MS (LoggingFor r mthd)
-> MS (LoggingFor r mthd)
docFunc = (String -> [String] -> Maybe String -> MS (r mthd) -> MS (r mthd))
-> String
-> [String]
-> Maybe String
-> MS (LoggingFor r mthd)
-> MS (LoggingFor r mthd)
forall u l. LiftLogging u l => u -> l
liftLogging String -> [String] -> Maybe String -> MS (r mthd) -> MS (r mthd)
forall (r :: * -> *) vis mthd bod.
MethodSym r vis mthd bod =>
String -> [String] -> Maybe String -> MS (r mthd) -> MS (r mthd)
docFunc
  inOutFunc :: String -> LoggingFor r vis -> InOutFunc (LoggingFor r) mthd bod
inOutFunc = (String -> r vis -> InOutFunc r mthd bod)
-> String -> LoggingFor r vis -> InOutFunc (LoggingFor r) mthd bod
forall u l. LiftLogging u l => u -> l
liftLogging String -> r vis -> InOutFunc r mthd bod
forall (r :: * -> *) vis mthd bod.
MethodSym r vis mthd bod =>
String -> r vis -> InOutFunc r mthd bod
inOutFunc
  docInOutFunc :: String -> LoggingFor r vis -> DocInOutFunc (LoggingFor r) mthd bod
docInOutFunc = (String -> r vis -> DocInOutFunc r mthd bod)
-> String
-> LoggingFor r vis
-> DocInOutFunc (LoggingFor r) mthd bod
forall u l. LiftLogging u l => u -> l
liftLogging String -> r vis -> DocInOutFunc r mthd bod
forall (r :: * -> *) vis mthd bod.
MethodSym r vis mthd bod =>
String -> r vis -> DocInOutFunc r mthd bod
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 stmt mthd prg file mod bod block) => P.ProcProg (LoggingFor r) vis stmt mthd prg file mod bod block

instance (P.ModuleSym r mod mthd) => P.ModuleSym (LoggingFor r) mod mthd where
  buildModule :: String
-> [String] -> [MS (LoggingFor r mthd)] -> FS (LoggingFor r mod)
buildModule = (String -> [String] -> [MS (r mthd)] -> FS (r mod))
-> String
-> [String]
-> [MS (LoggingFor r mthd)]
-> FS (LoggingFor r mod)
forall u l. LiftLogging u l => u -> l
liftLogging String -> [String] -> [MS (r mthd)] -> FS (r mod)
forall {k} (r :: k -> *) (mod :: k) (mthd :: k).
ModuleSym r mod mthd =>
String -> [String] -> [MS (r mthd)] -> FS (r mod)
P.buildModule

instance (P.FileSym r file mod) => P.FileSym (LoggingFor r) file mod where
  fileDoc :: FS (LoggingFor r mod) -> FS (LoggingFor r file)
fileDoc = (FS (r mod) -> FS (r file))
-> FS (LoggingFor r mod) -> FS (LoggingFor r file)
forall u l. LiftLogging u l => u -> l
liftLogging FS (r mod) -> FS (r file)
forall {k} (r :: k -> *) (file :: k) (mod :: k).
FileSym r file mod =>
FS (r mod) -> 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 {k} (r :: k -> *) (file :: k) (mod :: k).
FileSym r file mod =>
String
-> String -> [String] -> String -> FS (r file) -> FS (r file)
P.docMod

instance (P.ProgramSym r prg file) => P.ProgramSym (LoggingFor r) prg file 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 {k} (r :: k -> *) (prg :: k) (file :: k).
ProgramSym r prg file =>
String -> String -> [FS (r file)] -> GSProgram r prg
P.prog

-- GOOL

instance (G.OOProg r vis stmt mthd stvr attch prg file mod bod block) => G.OOProg (LoggingFor r) vis stmt mthd stvr attch prg file mod bod block

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) stmt bod, G.OODeclStatement r stmt bod) =>
    G.OODeclStatement (LoggingFor r) stmt bod where
  objDecDef :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
objDecDef = (SVariable r -> r ScopeData -> SValue r -> MS (r stmt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> SValue (LoggingFor r)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> r ScopeData -> SValue r -> MS (r stmt)
forall (r :: * -> *) stmt bod.
OODeclStatement r stmt bod =>
SVariable r -> r ScopeData -> SValue r -> MS (r stmt)
G.objDecDef
  objDecNew :: SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r stmt)
objDecNew = (SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt))
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt)
forall (r :: * -> *) stmt bod.
OODeclStatement r stmt bod =>
SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt)
G.objDecNew
  extObjDecNew :: String
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r stmt)
extObjDecNew = (String -> SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt))
-> String
-> SVariable (LoggingFor r)
-> LoggingFor r ScopeData
-> [SValue (LoggingFor r)]
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging String -> SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt)
forall (r :: * -> *) stmt bod.
OODeclStatement r stmt bod =>
String -> SVariable r -> r ScopeData -> [SValue r] -> MS (r stmt)
G.extObjDecNew

instance (G.OOFuncAppStatement r stmt) => G.OOFuncAppStatement (LoggingFor r) stmt where
  selfInOutCall :: InOutCall (LoggingFor r) stmt
selfInOutCall = InOutCall r stmt -> InOutCall (LoggingFor r) stmt
forall u l. LiftLogging u l => u -> l
liftLogging InOutCall r stmt
forall (r :: * -> *) stmt.
OOFuncAppStatement r stmt =>
InOutCall r stmt
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 stmt) => G.ObserverPattern (LoggingFor r) stmt where
  notifyObservers :: VS (LoggingFor r FuncData)
-> VS (LoggingFor r TypeData) -> MS (LoggingFor r stmt)
notifyObservers = (VS (r FuncData) -> VS (r TypeData) -> MS (r stmt))
-> VS (LoggingFor r FuncData)
-> VS (LoggingFor r TypeData)
-> MS (LoggingFor r stmt)
forall u l. LiftLogging u l => u -> l
liftLogging VS (r FuncData) -> VS (r TypeData) -> MS (r stmt)
forall (r :: * -> *) stmt.
ObserverPattern r stmt =>
VS (r FuncData) -> VS (r TypeData) -> MS (r stmt)
G.notifyObservers

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

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

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

instance (G.ClassSym r vis mthd stvr attch) => G.ClassSym (LoggingFor r) vis mthd stvr attch where
  buildClass :: Maybe String
-> [CSStateVar (LoggingFor r) stvr]
-> [MS (LoggingFor r mthd)]
-> [MS (LoggingFor r mthd)]
-> CS (LoggingFor r Class)
buildClass = (Maybe String
 -> [CSStateVar r stvr]
 -> [MS (r mthd)]
 -> [MS (r mthd)]
 -> CS (r Class))
-> Maybe String
-> [CSStateVar (LoggingFor r) stvr]
-> [MS (LoggingFor r mthd)]
-> [MS (LoggingFor r mthd)]
-> CS (LoggingFor r Class)
forall u l. LiftLogging u l => u -> l
liftLogging Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r Class)
forall (r :: * -> *) vis mthd stvr attch.
ClassSym r vis mthd stvr attch =>
Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r Class)
G.buildClass
  extraClass :: String
-> Maybe String
-> [CSStateVar (LoggingFor r) stvr]
-> [MS (LoggingFor r mthd)]
-> [MS (LoggingFor r mthd)]
-> CS (LoggingFor r Class)
extraClass = (String
 -> Maybe String
 -> [CSStateVar r stvr]
 -> [MS (r mthd)]
 -> [MS (r mthd)]
 -> CS (r Class))
-> String
-> Maybe String
-> [CSStateVar (LoggingFor r) stvr]
-> [MS (LoggingFor r mthd)]
-> [MS (LoggingFor r mthd)]
-> CS (LoggingFor r Class)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r Class)
forall (r :: * -> *) vis mthd stvr attch.
ClassSym r vis mthd stvr attch =>
String
-> Maybe String
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r Class)
G.extraClass
  implementingClass :: String
-> [String]
-> [CSStateVar (LoggingFor r) stvr]
-> [MS (LoggingFor r mthd)]
-> [MS (LoggingFor r mthd)]
-> CS (LoggingFor r Class)
implementingClass = (String
 -> [String]
 -> [CSStateVar r stvr]
 -> [MS (r mthd)]
 -> [MS (r mthd)]
 -> CS (r Class))
-> String
-> [String]
-> [CSStateVar (LoggingFor r) stvr]
-> [MS (LoggingFor r mthd)]
-> [MS (LoggingFor r mthd)]
-> CS (LoggingFor r Class)
forall u l. LiftLogging u l => u -> l
liftLogging String
-> [String]
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r Class)
forall (r :: * -> *) vis mthd stvr attch.
ClassSym r vis mthd stvr attch =>
String
-> [String]
-> [CSStateVar r stvr]
-> [MS (r mthd)]
-> [MS (r mthd)]
-> CS (r Class)
G.implementingClass
  docClass :: String -> CS (LoggingFor r Class) -> CS (LoggingFor r Class)
docClass = (String -> CS (r Class) -> CS (r Class))
-> String -> CS (LoggingFor r Class) -> CS (LoggingFor r Class)
forall u l. LiftLogging u l => u -> l
liftLogging String -> CS (r Class) -> CS (r Class)
forall (r :: * -> *) vis mthd stvr attch.
ClassSym r vis mthd stvr attch =>
String -> CS (r Class) -> CS (r Class)
G.docClass

instance (G.ModuleSym r mod mthd) => G.ModuleSym (LoggingFor r) mod mthd where
  buildModule :: String
-> [String]
-> [MS (LoggingFor r mthd)]
-> [CS (LoggingFor r Class)]
-> FS (LoggingFor r mod)
buildModule = (String
 -> [String] -> [MS (r mthd)] -> [CS (r Class)] -> FS (r mod))
-> String
-> [String]
-> [MS (LoggingFor r mthd)]
-> [CS (LoggingFor r Class)]
-> FS (LoggingFor r mod)
forall u l. LiftLogging u l => u -> l
liftLogging String -> [String] -> [MS (r mthd)] -> [CS (r Class)] -> FS (r mod)
forall (r :: * -> *) mod mthd.
ModuleSym r mod mthd =>
String -> [String] -> [MS (r mthd)] -> [CS (r Class)] -> FS (r mod)
G.buildModule

instance (G.FileSym r file mod) => G.FileSym (LoggingFor r) file mod where
  fileDoc :: FS (LoggingFor r mod) -> FS (LoggingFor r file)
fileDoc = (FS (r mod) -> FS (r file))
-> FS (LoggingFor r mod) -> FS (LoggingFor r file)
forall u l. LiftLogging u l => u -> l
liftLogging FS (r mod) -> FS (r file)
forall {k} (r :: k -> *) (file :: k) (mod :: k).
FileSym r file mod =>
FS (r mod) -> 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 {k} (r :: k -> *) (file :: k) (mod :: k).
FileSym r file mod =>
String
-> String -> [String] -> String -> FS (r file) -> FS (r file)
G.docMod

instance (G.ProgramSym r prg file) => G.ProgramSym (LoggingFor r) prg file 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 {k} (r :: k -> *) (prg :: k) (file :: k).
ProgramSym r prg file =>
String -> String -> [FS (r file)] -> GSProgram r prg
G.prog

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