{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}
module Cubix.Language.Lua.Parametric.Common.Types where
import Data.List ( (\\) )
import Language.Haskell.TH.Syntax ( mkName )
import Data.Comp.Multi ( Node, Term, project', AnnTerm, (:-<:), All, HFunctor, project, CxtS, AnnCxtS )
import Data.Comp.Trans ( makeSumType, runCompTrans )
import Cubix.Language.Info
import Cubix.Language.Lua.Parametric.Full.Types as L
import Cubix.Language.Parametric.Derive
import Cubix.Language.Parametric.InjF
import Cubix.Language.Parametric.Syntax hiding (ExpL)
import Cubix.Language.Parametric.Syntax qualified as P
data LuaLocalVarInit e l where
LuaLocalVarInit :: e [ExpL] -> LuaLocalVarInit e LocalVarInitL
data LuaLhs e l where
LuaLhs :: e [L.VarL] -> LuaLhs e LhsL
data LuaRhs e l where
LuaRhs :: e [ExpL] -> LuaRhs e RhsL
data LuaBlockEnd e l where
LuaBlockEnd :: e (Maybe [ExpL]) -> LuaBlockEnd e BlockEndL
data LuaSpecialFunArg e l where
LuaTableArg :: e L.TableL -> LuaSpecialFunArg e FunctionArgumentsL
LuaStringArg :: String -> LuaSpecialFunArg e FunctionArgumentsL
LuaReceiverAndTableArg :: e L.PrefixExpL -> e L.TableL -> LuaSpecialFunArg e FunctionArgumentsL
LuaReceiverAndStringArg :: e L.PrefixExpL -> String -> LuaSpecialFunArg e FunctionArgumentsL
deriveAll [''LuaLocalVarInit, ''LuaLhs, ''LuaRhs, ''LuaBlockEnd, ''LuaSpecialFunArg]
createSortInclusionTypes
[''P.IdentL, ''P.AssignL, ''P.BlockL, ''L.StatL, ''P.SingleLocalVarDeclL, ''P.FunctionCallL, ''L.ExpL, ''L.PrefixExpL, ''L.PrefixExpL]
[''L.NameL, ''L.StatL, ''L.BlockL, ''P.BlockItemL, ''L.StatL, ''L.FunCallL, ''P.PositionalArgExpL, ''P.FunctionExpL, ''ReceiverL]