module HaScalaM.Instances where
import HaScalaM.Classes
import HaScalaM.Classes.Base
import HaScalaM.Classes.Stat
import HaScalaM.Classes.Term
import HaScalaM.Classes.Type
import HaScalaM.Types.Base
import HaScalaM.Types.Tilde
instance Init m n t' t ac i => Tree (SmAnnotM m n t' t ac i)
instance ( m ~ SmMod
, n ~ SmName
, t' ~ SmType'
, t ~ SmTerm
, ac ~ SmArgClauseT m t
, i ~ SmInit m n t' t ac
, Init m n t' t ac i
) => Annot m n t' t ac i (SmAnnotM m n t' t ac i)
where init :: SmAnnotM m n t' t ac i -> i
init (SmAnnotM i
i) = i
i
instance ( ParamClauseT m n p t' t pc
, Init m n t' t ac i
, Stat s
) => Tree (SmCtorSecondaryS m n p t' t pc ac i s)
instance ( ParamClauseT m n p t' t pc
, Init m n t' t ac i
, Stat s
) => Ctor (SmCtorSecondaryS m n p t' t pc ac i s)
instance ( ParamClauseT m n p t' t pc
, Init m n t' t ac i
, Stat s
) => WithMods m (SmCtorSecondaryS m n p t' t pc ac i s)
where mods :: SmCtorSecondaryS m n p t' t pc ac i s -> [m]
mods (SmCtorSecondaryS [m]
ms n
_ [pc]
_ i
_ [s]
_) = [m]
ms
instance ( ParamClauseT m n p t' t pc
, Init m n t' t ac i
, Stat s
) => WithParamClauses m n p t' t pc (SmCtorSecondaryS m n p t' t pc ac i s)
where paramClauses :: SmCtorSecondaryS m n p t' t pc ac i s -> [pc]
paramClauses (SmCtorSecondaryS [m]
_ n
_ [pc]
pss i
_ [s]
_) = [pc]
pss
instance ( ParamClauseT m n p t' t pc
, Init m n t' t ac i
, Stat s
) => WithExprs s (SmCtorSecondaryS m n p t' t pc ac i s)
where exprs :: SmCtorSecondaryS m n p t' t pc ac i s -> [s]
exprs (SmCtorSecondaryS [m]
_ n
_ [pc]
_ i
_ [s]
ss) = [s]
ss
instance ( ParamClauseT m n p t' t pc
, Init m n t' t ac i
, Stat s
) => WithStats s (SmCtorSecondaryS m n p t' t pc ac i s)
instance ( ParamClauseT m n p t' t pc
, Init m n t' t ac i
, Stat s
) => Secondary m n p t' t pc ac i s (SmCtorSecondaryS m n p t' t pc ac i s)