{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeApplications #-}
module Drasil.Shared.LanguageRenderer.LoggingFor (LoggingFor(..)) where
import Drasil.Shared.InterfaceCommon (VSType, TypeSym(..), VariableSym(..),
VariableValue(..), ValueSym(..), Literal(..), IndexTranslator(..), Array(..),
VariableElim(..))
import Drasil.GOOL.InterfaceGOOL (OOTypeSym(..), OOVariableSym(..), SelfSym(..),
InstanceVarSelfSym(..))
import Drasil.Shared.AST (TypeData(..), td)
import Drasil.Shared.CodeType (CodeType(..))
import Drasil.GOOL.CodeInfoOO (CodeInfoOO)
import Drasil.GOOL.LanguageRenderer.JavaRenderer (JavaCode)
import Drasil.GOOL.LanguageRenderer.CSharpRenderer (CSharpCode)
import Drasil.GOOL.LanguageRenderer.CppRenderer (CppCode, CppSrcCode, CppHdrCode)
import Drasil.GOOL.LanguageRenderer.PythonRenderer (PythonCode)
import Drasil.GOOL.LanguageRenderer.SwiftRenderer (SwiftCode)
import Drasil.Shared.LanguageRenderer (dot)
import Text.PrettyPrint.HughesPJ (Doc, text, empty, comma, space, brackets,
braces, punctuate, hcat)
import qualified Text.PrettyPrint.HughesPJ as P (char, integer, float, double)
import Data.Kind (Type)
newtype LoggingFor (lang :: Type -> Type) a = LC {forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC :: a} deriving (forall a b. (a -> b) -> LoggingFor lang a -> LoggingFor lang b)
-> (forall a b. a -> LoggingFor lang b -> LoggingFor lang a)
-> Functor (LoggingFor lang)
forall a b. a -> LoggingFor lang b -> LoggingFor lang a
forall a b. (a -> b) -> LoggingFor lang a -> LoggingFor lang b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
forall (lang :: * -> *) a b.
a -> LoggingFor lang b -> LoggingFor lang a
forall (lang :: * -> *) a b.
(a -> b) -> LoggingFor lang a -> LoggingFor lang b
$cfmap :: forall (lang :: * -> *) a b.
(a -> b) -> LoggingFor lang a -> LoggingFor lang b
fmap :: forall a b. (a -> b) -> LoggingFor lang a -> LoggingFor lang b
$c<$ :: forall (lang :: * -> *) a b.
a -> LoggingFor lang b -> LoggingFor lang a
<$ :: forall a b. a -> LoggingFor lang b -> LoggingFor lang a
Functor
instance Applicative (LoggingFor lang) where
pure :: forall a. a -> LoggingFor lang a
pure = a -> LoggingFor lang a
forall (lang :: * -> *) a. a -> LoggingFor lang a
LC
(LC a -> b
f) <*> :: forall a b.
LoggingFor lang (a -> b) -> LoggingFor lang a -> LoggingFor lang b
<*> (LC a
x) = b -> LoggingFor lang b
forall (lang :: * -> *) a. a -> LoggingFor lang a
LC (a -> b
f a
x)
instance Monad (LoggingFor lang) where
LC a
x >>= :: forall a b.
LoggingFor lang a -> (a -> LoggingFor lang b) -> LoggingFor lang b
>>= a -> LoggingFor lang b
f = a -> LoggingFor lang b
f a
x
instance VariableSym (LoggingFor lang) where
type Variable (LoggingFor lang) = Doc
var :: Library -> VSType (LoggingFor lang) -> SVariable (LoggingFor lang)
var Library
n VSType (LoggingFor lang)
_ = LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang))
-> LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc) -> Doc -> LoggingFor lang Doc
forall a b. (a -> b) -> a -> b
$ Library -> Doc
text Library
n
constant :: Library -> VSType (LoggingFor lang) -> SVariable (LoggingFor lang)
constant Library
n VSType (LoggingFor lang)
_ = LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang))
-> LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc) -> Doc -> LoggingFor lang Doc
forall a b. (a -> b) -> a -> b
$ Library -> Doc
text Library
n
extVar :: Library
-> Library
-> VSType (LoggingFor lang)
-> SVariable (LoggingFor lang)
extVar Library
l Library
n VSType (LoggingFor lang)
_ = LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang))
-> LoggingFor lang (Variable (LoggingFor lang))
-> SVariable (LoggingFor lang)
forall a b. (a -> b) -> a -> b
$ Variable (LoggingFor lang)
-> LoggingFor lang (Variable (LoggingFor lang))
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Variable (LoggingFor lang)
-> LoggingFor lang (Variable (LoggingFor lang)))
-> Variable (LoggingFor lang)
-> LoggingFor lang (Variable (LoggingFor lang))
forall a b. (a -> b) -> a -> b
$ Library -> Doc
text Library
l Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
dot Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Library -> Doc
text Library
n
instance OOVariableSym (LoggingFor lang) where
classVar :: Library -> VSType (LoggingFor lang) -> SVariable (LoggingFor lang)
classVar = Library -> VSType (LoggingFor lang) -> SVariable (LoggingFor lang)
forall (r :: * -> *).
VariableSym r =>
Library -> VSType r -> SVariable r
var
classConst :: Library -> VSType (LoggingFor lang) -> SVariable (LoggingFor lang)
classConst = Library -> VSType (LoggingFor lang) -> SVariable (LoggingFor lang)
forall (r :: * -> *).
VariableSym r =>
Library -> VSType r -> SVariable r
constant
classVarAccess :: VSType (LoggingFor lang)
-> SVariable (LoggingFor lang) -> SVariable (LoggingFor lang)
classVarAccess VSType (LoggingFor lang)
cls SVariable (LoggingFor lang)
vr = do
LoggingFor lang TypeData
cls' <- VSType (LoggingFor lang)
cls
LoggingFor lang Doc
vr' <- StateT ValueState Identity (LoggingFor lang Doc)
SVariable (LoggingFor lang)
vr
let clsDoc :: Doc
clsDoc = (TypeData -> Doc
typeDoc (TypeData -> Doc)
-> (LoggingFor lang TypeData -> TypeData)
-> LoggingFor lang TypeData
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LoggingFor lang TypeData -> TypeData
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC) LoggingFor lang TypeData
cls'
vrDoc :: Doc
vrDoc = LoggingFor lang Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor lang Doc
vr'
LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc) -> Doc -> LoggingFor lang Doc
forall a b. (a -> b) -> a -> b
$ Doc
clsDoc Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
dot Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
vrDoc
extClassVarAccess :: VSType (LoggingFor lang)
-> SVariable (LoggingFor lang) -> SVariable (LoggingFor lang)
extClassVarAccess = VSType (LoggingFor lang)
-> SVariable (LoggingFor lang) -> SVariable (LoggingFor lang)
forall (r :: * -> *).
OOVariableSym r =>
VSType r -> SVariable r -> SVariable r
classVarAccess
instanceVarAccess :: SValue (LoggingFor lang)
-> SVariable (LoggingFor lang) -> SVariable (LoggingFor lang)
instanceVarAccess SValue (LoggingFor lang)
ob SVariable (LoggingFor lang)
vr = do
LoggingFor lang Doc
ob' <- StateT ValueState Identity (LoggingFor lang Doc)
SValue (LoggingFor lang)
ob
LoggingFor lang Doc
vr' <- StateT ValueState Identity (LoggingFor lang Doc)
SVariable (LoggingFor lang)
vr
LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc) -> Doc -> LoggingFor lang Doc
forall a b. (a -> b) -> a -> b
$ LoggingFor lang Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor lang Doc
ob' Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
dot Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> LoggingFor lang Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor lang Doc
vr'
instance SelfSym (LoggingFor CodeInfoOO) where
self :: SVariable (LoggingFor CodeInfoOO)
self = LoggingFor CodeInfoOO (Variable (LoggingFor CodeInfoOO))
-> SVariable (LoggingFor CodeInfoOO)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor CodeInfoOO (Variable (LoggingFor CodeInfoOO))
-> SVariable (LoggingFor CodeInfoOO))
-> LoggingFor CodeInfoOO (Variable (LoggingFor CodeInfoOO))
-> SVariable (LoggingFor CodeInfoOO)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor CodeInfoOO Doc
forall a. a -> LoggingFor CodeInfoOO a
forall (m :: * -> *) a. Monad m => a -> m a
return Doc
empty
instance InstanceVarSelfSym (LoggingFor CodeInfoOO) where
instanceVarSelf :: SVariable (LoggingFor CodeInfoOO)
-> SVariable (LoggingFor CodeInfoOO)
instanceVarSelf SVariable (LoggingFor CodeInfoOO)
_ = LoggingFor CodeInfoOO (Variable (LoggingFor CodeInfoOO))
-> SVariable (LoggingFor CodeInfoOO)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor CodeInfoOO (Variable (LoggingFor CodeInfoOO))
-> SVariable (LoggingFor CodeInfoOO))
-> LoggingFor CodeInfoOO (Variable (LoggingFor CodeInfoOO))
-> SVariable (LoggingFor CodeInfoOO)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor CodeInfoOO Doc
forall a. a -> LoggingFor CodeInfoOO a
forall (m :: * -> *) a. Monad m => a -> m a
return Doc
empty
instance SelfSym (LoggingFor JavaCode) where
self :: SVariable (LoggingFor JavaCode)
self = LoggingFor JavaCode (Variable (LoggingFor JavaCode))
-> SVariable (LoggingFor JavaCode)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor JavaCode (Variable (LoggingFor JavaCode))
-> SVariable (LoggingFor JavaCode))
-> LoggingFor JavaCode (Variable (LoggingFor JavaCode))
-> SVariable (LoggingFor JavaCode)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor JavaCode Doc
forall a. a -> LoggingFor JavaCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor JavaCode Doc) -> Doc -> LoggingFor JavaCode Doc
forall a b. (a -> b) -> a -> b
$ Library -> Doc
text Library
"this"
instance InstanceVarSelfSym (LoggingFor JavaCode) where
instanceVarSelf :: SVariable (LoggingFor JavaCode) -> SVariable (LoggingFor JavaCode)
instanceVarSelf SVariable (LoggingFor JavaCode)
vr = do
LoggingFor JavaCode Doc
vr' <- StateT ValueState Identity (LoggingFor JavaCode Doc)
SVariable (LoggingFor JavaCode)
vr
LoggingFor JavaCode Doc
self' <- forall (r :: * -> *). SelfSym r => SVariable r
self @(LoggingFor JavaCode)
LoggingFor JavaCode Doc
-> StateT ValueState Identity (LoggingFor JavaCode Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor JavaCode Doc
-> StateT ValueState Identity (LoggingFor JavaCode Doc))
-> LoggingFor JavaCode Doc
-> StateT ValueState Identity (LoggingFor JavaCode Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor JavaCode Doc
forall a. a -> LoggingFor JavaCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor JavaCode Doc) -> Doc -> LoggingFor JavaCode Doc
forall a b. (a -> b) -> a -> b
$ LoggingFor JavaCode Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor JavaCode Doc
self' Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
dot Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> LoggingFor JavaCode Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor JavaCode Doc
vr'
instance SelfSym (LoggingFor CSharpCode) where
self :: SVariable (LoggingFor CSharpCode)
self = LoggingFor CSharpCode (Variable (LoggingFor CSharpCode))
-> SVariable (LoggingFor CSharpCode)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor CSharpCode (Variable (LoggingFor CSharpCode))
-> SVariable (LoggingFor CSharpCode))
-> LoggingFor CSharpCode (Variable (LoggingFor CSharpCode))
-> SVariable (LoggingFor CSharpCode)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor CSharpCode Doc
forall a. a -> LoggingFor CSharpCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor CSharpCode Doc)
-> Doc -> LoggingFor CSharpCode Doc
forall a b. (a -> b) -> a -> b
$ Library -> Doc
text Library
"this"
instance InstanceVarSelfSym (LoggingFor CSharpCode) where
instanceVarSelf :: SVariable (LoggingFor CSharpCode)
-> SVariable (LoggingFor CSharpCode)
instanceVarSelf SVariable (LoggingFor CSharpCode)
vr = do
LoggingFor CSharpCode Doc
vr' <- StateT ValueState Identity (LoggingFor CSharpCode Doc)
SVariable (LoggingFor CSharpCode)
vr
LoggingFor CSharpCode Doc
self' <- forall (r :: * -> *). SelfSym r => SVariable r
self @(LoggingFor CSharpCode)
LoggingFor CSharpCode Doc
-> StateT ValueState Identity (LoggingFor CSharpCode Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor CSharpCode Doc
-> StateT ValueState Identity (LoggingFor CSharpCode Doc))
-> LoggingFor CSharpCode Doc
-> StateT ValueState Identity (LoggingFor CSharpCode Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor CSharpCode Doc
forall a. a -> LoggingFor CSharpCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor CSharpCode Doc)
-> Doc -> LoggingFor CSharpCode Doc
forall a b. (a -> b) -> a -> b
$ LoggingFor CSharpCode Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor CSharpCode Doc
self' Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
dot Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> LoggingFor CSharpCode Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor CSharpCode Doc
vr'
instance SelfSym (LoggingFor (CppCode CppSrcCode CppHdrCode)) where
self :: SVariable (LoggingFor (CppCode CppSrcCode CppHdrCode))
self = LoggingFor
(CppCode CppSrcCode CppHdrCode)
(Variable (LoggingFor (CppCode CppSrcCode CppHdrCode)))
-> SVariable (LoggingFor (CppCode CppSrcCode CppHdrCode))
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor
(CppCode CppSrcCode CppHdrCode)
(Variable (LoggingFor (CppCode CppSrcCode CppHdrCode)))
-> SVariable (LoggingFor (CppCode CppSrcCode CppHdrCode)))
-> LoggingFor
(CppCode CppSrcCode CppHdrCode)
(Variable (LoggingFor (CppCode CppSrcCode CppHdrCode)))
-> SVariable (LoggingFor (CppCode CppSrcCode CppHdrCode))
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
forall a. a -> LoggingFor (CppCode CppSrcCode CppHdrCode) a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor (CppCode CppSrcCode CppHdrCode) Doc)
-> Doc -> LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
forall a b. (a -> b) -> a -> b
$ Library -> Doc
text Library
"self"
instance InstanceVarSelfSym (LoggingFor (CppCode CppSrcCode CppHdrCode)) where
instanceVarSelf :: SVariable (LoggingFor (CppCode CppSrcCode CppHdrCode))
-> SVariable (LoggingFor (CppCode CppSrcCode CppHdrCode))
instanceVarSelf SVariable (LoggingFor (CppCode CppSrcCode CppHdrCode))
vr = do
LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
vr' <- StateT
ValueState
Identity
(LoggingFor (CppCode CppSrcCode CppHdrCode) Doc)
SVariable (LoggingFor (CppCode CppSrcCode CppHdrCode))
vr
LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
self' <- forall (r :: * -> *). SelfSym r => SVariable r
self @(LoggingFor (CppCode CppSrcCode CppHdrCode))
LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
-> StateT
ValueState
Identity
(LoggingFor (CppCode CppSrcCode CppHdrCode) Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
-> StateT
ValueState
Identity
(LoggingFor (CppCode CppSrcCode CppHdrCode) Doc))
-> LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
-> StateT
ValueState
Identity
(LoggingFor (CppCode CppSrcCode CppHdrCode) Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
forall a. a -> LoggingFor (CppCode CppSrcCode CppHdrCode) a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor (CppCode CppSrcCode CppHdrCode) Doc)
-> Doc -> LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
forall a b. (a -> b) -> a -> b
$ LoggingFor (CppCode CppSrcCode CppHdrCode) Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
self' Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Library -> Doc
text Library
"->" Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> LoggingFor (CppCode CppSrcCode CppHdrCode) Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor (CppCode CppSrcCode CppHdrCode) Doc
vr'
instance SelfSym (LoggingFor PythonCode) where
self :: SVariable (LoggingFor PythonCode)
self = LoggingFor PythonCode (Variable (LoggingFor PythonCode))
-> SVariable (LoggingFor PythonCode)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor PythonCode (Variable (LoggingFor PythonCode))
-> SVariable (LoggingFor PythonCode))
-> LoggingFor PythonCode (Variable (LoggingFor PythonCode))
-> SVariable (LoggingFor PythonCode)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor PythonCode Doc
forall a. a -> LoggingFor PythonCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor PythonCode Doc)
-> Doc -> LoggingFor PythonCode Doc
forall a b. (a -> b) -> a -> b
$ Library -> Doc
text Library
"self"
instance InstanceVarSelfSym (LoggingFor PythonCode) where
instanceVarSelf :: SVariable (LoggingFor PythonCode)
-> SVariable (LoggingFor PythonCode)
instanceVarSelf SVariable (LoggingFor PythonCode)
vr = do
LoggingFor PythonCode Doc
vr' <- StateT ValueState Identity (LoggingFor PythonCode Doc)
SVariable (LoggingFor PythonCode)
vr
LoggingFor PythonCode Doc
self' <- forall (r :: * -> *). SelfSym r => SVariable r
self @(LoggingFor PythonCode)
LoggingFor PythonCode Doc
-> StateT ValueState Identity (LoggingFor PythonCode Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor PythonCode Doc
-> StateT ValueState Identity (LoggingFor PythonCode Doc))
-> LoggingFor PythonCode Doc
-> StateT ValueState Identity (LoggingFor PythonCode Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor PythonCode Doc
forall a. a -> LoggingFor PythonCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor PythonCode Doc)
-> Doc -> LoggingFor PythonCode Doc
forall a b. (a -> b) -> a -> b
$ LoggingFor PythonCode Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor PythonCode Doc
self' Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
dot Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> LoggingFor PythonCode Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor PythonCode Doc
vr'
instance SelfSym (LoggingFor SwiftCode) where
self :: SVariable (LoggingFor SwiftCode)
self = LoggingFor SwiftCode (Variable (LoggingFor SwiftCode))
-> SVariable (LoggingFor SwiftCode)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor SwiftCode (Variable (LoggingFor SwiftCode))
-> SVariable (LoggingFor SwiftCode))
-> LoggingFor SwiftCode (Variable (LoggingFor SwiftCode))
-> SVariable (LoggingFor SwiftCode)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor SwiftCode Doc
forall a. a -> LoggingFor SwiftCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor SwiftCode Doc)
-> Doc -> LoggingFor SwiftCode Doc
forall a b. (a -> b) -> a -> b
$ Library -> Doc
text Library
"self"
instance InstanceVarSelfSym (LoggingFor SwiftCode) where
instanceVarSelf :: SVariable (LoggingFor SwiftCode)
-> SVariable (LoggingFor SwiftCode)
instanceVarSelf SVariable (LoggingFor SwiftCode)
vr = do
LoggingFor SwiftCode Doc
vr' <- StateT ValueState Identity (LoggingFor SwiftCode Doc)
SVariable (LoggingFor SwiftCode)
vr
LoggingFor SwiftCode Doc
self' <- forall (r :: * -> *). SelfSym r => SVariable r
self @(LoggingFor SwiftCode)
LoggingFor SwiftCode Doc
-> StateT ValueState Identity (LoggingFor SwiftCode Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor SwiftCode Doc
-> StateT ValueState Identity (LoggingFor SwiftCode Doc))
-> LoggingFor SwiftCode Doc
-> StateT ValueState Identity (LoggingFor SwiftCode Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor SwiftCode Doc
forall a. a -> LoggingFor SwiftCode a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor SwiftCode Doc)
-> Doc -> LoggingFor SwiftCode Doc
forall a b. (a -> b) -> a -> b
$ LoggingFor SwiftCode Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor SwiftCode Doc
self' Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
dot Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> LoggingFor SwiftCode Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor SwiftCode Doc
vr'
instance ValueSym (LoggingFor lang) where
type Value (LoggingFor lang) = Doc
valueType :: LoggingFor lang (Value (LoggingFor lang))
-> LoggingFor lang TypeData
valueType = Library -> LoggingFor lang Doc -> LoggingFor lang TypeData
forall a. HasCallStack => Library -> a
error Library
"Not implemented"
instance TypeSym (LoggingFor lang) where
bool :: VSType (LoggingFor lang)
bool = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
bool
int :: VSType (LoggingFor lang)
int = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
int
float :: VSType (LoggingFor lang)
float = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
float
double :: VSType (LoggingFor lang)
double = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
double
char :: VSType (LoggingFor lang)
char = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
char
string :: VSType (LoggingFor lang)
string = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
string
infile :: VSType (LoggingFor lang)
infile = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
infile
outfile :: VSType (LoggingFor lang)
outfile = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
outfile
listType :: VSType (LoggingFor lang) -> VSType (LoggingFor lang)
listType = VSType (LoggingFor lang) -> VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
listType
setType :: VSType (LoggingFor lang) -> VSType (LoggingFor lang)
setType = VSType (LoggingFor lang) -> VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
setType
arrayType :: VSType (LoggingFor lang) -> VSType (LoggingFor lang)
arrayType = VSType (LoggingFor lang) -> VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
arrayType
listInnerType :: VSType (LoggingFor lang) -> VSType (LoggingFor lang)
listInnerType = VSType (LoggingFor lang) -> VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r -> VSType r
listInnerType
funcType :: [VSType (LoggingFor lang)]
-> VSType (LoggingFor lang) -> VSType (LoggingFor lang)
funcType = [VSType (LoggingFor lang)]
-> VSType (LoggingFor lang) -> VSType (LoggingFor lang)
forall (r :: * -> *).
TypeSym r =>
[VSType r] -> VSType r -> VSType r
funcType
void :: VSType (LoggingFor lang)
void = VSType (LoggingFor lang)
forall (r :: * -> *). TypeSym r => VSType r
void
instance OOTypeSym (LoggingFor lang) where
obj :: Library -> VSType (LoggingFor lang)
obj Library
nm = CodeType -> Library -> VSType (LoggingFor lang)
forall (lang :: * -> *).
CodeType -> Library -> VSType (LoggingFor lang)
typeFromData (Library -> CodeType
Object Library
nm) (Library
"Object<" Library -> Library -> Library
forall a. [a] -> [a] -> [a]
++ Library
nm Library -> Library -> Library
forall a. [a] -> [a] -> [a]
++ Library
">")
typeFromData :: CodeType -> String -> VSType (LoggingFor lang)
typeFromData :: forall (lang :: * -> *).
CodeType -> Library -> VSType (LoggingFor lang)
typeFromData CodeType
tp Library
str = LoggingFor lang TypeData
-> StateT ValueState Identity (LoggingFor lang TypeData)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang TypeData
-> StateT ValueState Identity (LoggingFor lang TypeData))
-> LoggingFor lang TypeData
-> StateT ValueState Identity (LoggingFor lang TypeData)
forall a b. (a -> b) -> a -> b
$ TypeData -> LoggingFor lang TypeData
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (TypeData -> LoggingFor lang TypeData)
-> TypeData -> LoggingFor lang TypeData
forall a b. (a -> b) -> a -> b
$ CodeType -> Library -> Doc -> TypeData
td CodeType
tp Library
str (Library -> Doc
text Library
str)
instance Literal (LoggingFor lang) where
litTrue :: SValue (LoggingFor lang)
litTrue = Library -> SValue (LoggingFor lang)
forall (r :: * -> *). Literal r => Library -> SValue r
litString Library
"True"
litFalse :: SValue (LoggingFor lang)
litFalse = Library -> SValue (LoggingFor lang)
forall (r :: * -> *). Literal r => Library -> SValue r
litString Library
"False"
litChar :: Char -> SValue (LoggingFor lang)
litChar = LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> (Char -> LoggingFor lang Doc)
-> Char
-> StateT ValueState Identity (LoggingFor lang Doc)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc)
-> (Char -> Doc) -> Char -> LoggingFor lang Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Doc
P.char
litDouble :: Double -> SValue (LoggingFor lang)
litDouble = LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> (Double -> LoggingFor lang Doc)
-> Double
-> StateT ValueState Identity (LoggingFor lang Doc)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc)
-> (Double -> Doc) -> Double -> LoggingFor lang Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Doc
P.double
litFloat :: Float -> SValue (LoggingFor lang)
litFloat = LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> (Float -> LoggingFor lang Doc)
-> Float
-> StateT ValueState Identity (LoggingFor lang Doc)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc)
-> (Float -> Doc) -> Float -> LoggingFor lang Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Float -> Doc
P.float
litInt :: Integer -> SValue (LoggingFor lang)
litInt = LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> (Integer -> LoggingFor lang Doc)
-> Integer
-> StateT ValueState Identity (LoggingFor lang Doc)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc)
-> (Integer -> Doc) -> Integer -> LoggingFor lang Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Integer -> Doc
P.integer
litString :: Library -> SValue (LoggingFor lang)
litString = LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> (Library -> LoggingFor lang Doc)
-> Library
-> StateT ValueState Identity (LoggingFor lang Doc)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc)
-> (Library -> Doc) -> Library -> LoggingFor lang Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Library -> Doc
text
litArray :: VSType (LoggingFor lang)
-> [SValue (LoggingFor lang)] -> SValue (LoggingFor lang)
litArray VSType (LoggingFor lang)
_ [SValue (LoggingFor lang)]
vs = do
[LoggingFor lang Doc]
vs' <- [StateT ValueState Identity (LoggingFor lang Doc)]
-> StateT ValueState Identity [LoggingFor lang Doc]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [StateT ValueState Identity (LoggingFor lang Doc)]
[SValue (LoggingFor lang)]
vs
let docs :: [Doc]
docs = (LoggingFor lang Doc -> Doc) -> [LoggingFor lang Doc] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map LoggingFor lang Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC [LoggingFor lang Doc]
vs'
LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc) -> Doc -> LoggingFor lang Doc
forall a b. (a -> b) -> a -> b
$ Doc -> Doc
brackets (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
hcat ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ Doc -> [Doc] -> [Doc]
punctuate (Doc
comma Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
space) [Doc]
docs
litList :: VSType (LoggingFor lang)
-> [SValue (LoggingFor lang)] -> SValue (LoggingFor lang)
litList = VSType (LoggingFor lang)
-> [SValue (LoggingFor lang)] -> SValue (LoggingFor lang)
forall (r :: * -> *).
Literal r =>
VSType r -> [SValue r] -> SValue r
litArray
litSet :: VSType (LoggingFor lang)
-> [SValue (LoggingFor lang)] -> SValue (LoggingFor lang)
litSet VSType (LoggingFor lang)
_ [SValue (LoggingFor lang)]
vs = do
[LoggingFor lang Doc]
vs' <- [StateT ValueState Identity (LoggingFor lang Doc)]
-> StateT ValueState Identity [LoggingFor lang Doc]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence [StateT ValueState Identity (LoggingFor lang Doc)]
[SValue (LoggingFor lang)]
vs
let docs :: [Doc]
docs = (LoggingFor lang Doc -> Doc) -> [LoggingFor lang Doc] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map LoggingFor lang Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC [LoggingFor lang Doc]
vs'
LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc) -> Doc -> LoggingFor lang Doc
forall a b. (a -> b) -> a -> b
$ Doc -> Doc
braces (Doc -> Doc) -> Doc -> Doc
forall a b. (a -> b) -> a -> b
$ [Doc] -> Doc
hcat ([Doc] -> Doc) -> [Doc] -> Doc
forall a b. (a -> b) -> a -> b
$ Doc -> [Doc] -> [Doc]
punctuate (Doc
comma Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc
space) [Doc]
docs
instance IndexTranslator (LoggingFor lang) where
intToIndex :: SValue (LoggingFor lang) -> SValue (LoggingFor lang)
intToIndex = VS (LoggingFor lang Doc) -> VS (LoggingFor lang Doc)
SValue (LoggingFor lang) -> SValue (LoggingFor lang)
forall a. a -> a
id
indexToInt :: SValue (LoggingFor lang) -> SValue (LoggingFor lang)
indexToInt = VS (LoggingFor lang Doc) -> VS (LoggingFor lang Doc)
SValue (LoggingFor lang) -> SValue (LoggingFor lang)
forall a. a -> a
id
instance Array (LoggingFor lang) where
arrayElem :: SValue (LoggingFor lang)
-> SVariable (LoggingFor lang) -> SVariable (LoggingFor lang)
arrayElem SValue (LoggingFor lang)
idx' SVariable (LoggingFor lang)
vr' = do
LoggingFor lang Doc
idx <- StateT ValueState Identity (LoggingFor lang Doc)
SValue (LoggingFor lang)
idx'
LoggingFor lang Doc
vr <- StateT ValueState Identity (LoggingFor lang Doc)
SVariable (LoggingFor lang)
vr'
LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a. a -> StateT ValueState Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc))
-> LoggingFor lang Doc
-> StateT ValueState Identity (LoggingFor lang Doc)
forall a b. (a -> b) -> a -> b
$ Doc -> LoggingFor lang Doc
forall a. a -> LoggingFor lang a
forall (m :: * -> *) a. Monad m => a -> m a
return (Doc -> LoggingFor lang Doc) -> Doc -> LoggingFor lang Doc
forall a b. (a -> b) -> a -> b
$ LoggingFor lang Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor lang Doc
idx Doc -> Doc -> Doc
forall a. Semigroup a => a -> a -> a
<> Doc -> Doc
brackets (LoggingFor lang Doc -> Doc
forall (lang :: * -> *) a. LoggingFor lang a -> a
unLC LoggingFor lang Doc
vr)
arrayLength :: SValue (LoggingFor lang) -> SValue (LoggingFor lang)
arrayLength = StateT ValueState Identity (LoggingFor lang Doc)
-> StateT ValueState Identity (LoggingFor lang Doc)
SValue (LoggingFor lang) -> SValue (LoggingFor lang)
forall a. HasCallStack => a
undefined
arrayCopy :: SValue (LoggingFor lang) -> SValue (LoggingFor lang)
arrayCopy = StateT ValueState Identity (LoggingFor lang Doc)
-> StateT ValueState Identity (LoggingFor lang Doc)
SValue (LoggingFor lang) -> SValue (LoggingFor lang)
forall a. HasCallStack => a
undefined
instance VariableElim (LoggingFor lang) where
variableName :: LoggingFor lang (Variable (LoggingFor lang)) -> Library
variableName = LoggingFor lang Doc -> Library
LoggingFor lang (Variable (LoggingFor lang)) -> Library
forall a. HasCallStack => a
undefined
variableType :: LoggingFor lang (Variable (LoggingFor lang))
-> LoggingFor lang TypeData
variableType = LoggingFor lang Doc -> LoggingFor lang TypeData
LoggingFor lang (Variable (LoggingFor lang))
-> LoggingFor lang TypeData
forall a. HasCallStack => a
undefined
instance VariableValue (LoggingFor lang) where
valueOf :: SVariable (LoggingFor lang) -> SValue (LoggingFor lang)
valueOf = VS (LoggingFor lang Doc) -> VS (LoggingFor lang Doc)
SVariable (LoggingFor lang) -> SValue (LoggingFor lang)
forall a. a -> a
id