{-# LANGUAGE TypeFamilies #-}
module HaScalaM.Instances.Show where

import Prelude hiding (seq)

import HaScalaM.Classes.Type
import HaScalaM.Types.Base
import HaScalaM.Types.Enums
import HaScalaM.Types.Pat
import HaScalaM.Types.Ref
import HaScalaM.Types.Stat
import HaScalaM.Types.Term
import HaScalaM.Types.Type
import HaScalaM.Types.Tilde
import Data.List (findIndices)


--------------------------------------------------------------------------- A --

instance ( m ~ SmMod
         , n ~ SmName
         , t' ~ SmType'
         , ac ~ SmArgClauseT m t
         , i ~ SmInit m n t' t ac
         ) => Show (SmAnnotM m n t' t ac i)
    where show :: SmAnnotM m n t' t ac i -> String
show (SmAnnotM i
i) = String
"Mod.Annot(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ i -> String
forall a. Show a => a -> String
show i
i String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- C --

instance ( p ~ SmPat
         , t ~ SmTerm
         ) => Show (SmCaseCT p t)
    where show :: SmCaseCT p t -> String
show (SmCaseC p
p Maybe t
c t
b) = String
"Case(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
p String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t -> String
forall t. Show t => Maybe t -> String
opt Maybe t
c String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance t' ~ SmType' => Show (SmType'CaseCT t')
    where show :: SmType'CaseCT t' -> String
show (SmType'CaseT'C t'
p t'
b) = String
"TypeCase(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
p String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ( m ~ SmMod
         , n ~ SmName
         , t' ~ SmType'
         , t ~ SmTerm
         , p ~ SmParamT m n t' t
         , pc ~ SmParamClauseT m n p t' t
         ) => Show (SmCtorPrimary m n p t' t pc)
    where show :: SmCtorPrimary m n p t' t pc -> String
show (SmCtorPrimary [m]
ms n
n [pc]
pcs) = String
"Ctor.Primary(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [pc] -> String
forall t. Show t => [t] -> String
seq [pc]
pcs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- E --

instance Show SmEnumerator
    where show :: SmEnumerator -> String
show (ECaseGenerator (SmCaseGeneratorE p
p b
b)) = String
"Enumerator.CaseGenerator(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
p String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ b -> String
forall a. Show a => a -> String
show b
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (EGenerator (SmGeneratorE p
p b
b)) = String
"Enumerator.Generator(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
p String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ b -> String
forall a. Show a => a -> String
show b
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (EGuard (SmGuardE b
b)) = String
"Enumerator.Guard(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ b -> String
forall a. Show a => a -> String
show b
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (EVal (SmValE p
p b
b)) = String
"Enumerator.Val(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
p String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ b -> String
forall a. Show a => a -> String
show b
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- F --

instance t' ~ SmType' => Show (FuncParamClause' t')
    where show :: FuncParamClause' t' -> String
show (FuncParamClause' [t']
vs) = String
"Type.FuncParamClause(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'] -> String
forall t. Show t => [t] -> String
lst [t']
vs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- I --

instance ( n ~ SmName
         , t' ~ SmType'
         , ac ~ SmArgClauseT m t
         ) => Show (SmInit m n t' t ac)
    where show :: SmInit m n t' t ac -> String
show (SmInit t'
tpe n
name [ac]
acs) = String
"Init(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
name String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [ac] -> String
forall t. Show t => [t] -> String
seq [ac]
acs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance Show SmImportee
    where show :: SmImportee -> String
show (SmGivenI t'
tpe) = String
"Importee.Given(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show SmImportee
SmGivenAllI = String
"Importee.GivenAll()"
          show (SmNameI n
n) = String
"Importee.Name(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmRenameI n
m n
n) = String
"Importee.Rename(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
m String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmUnimportI n
n) = String
"Importee.Unimport(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show SmImportee
SmWildcardI = String
"Importee.Wildcard()"

instance Show (SmImporter r i)
    where show :: SmImporter r i -> String
show (SmImporter r
r [i]
is) = String
"Importer(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ r -> String
forall a. Show a => a -> String
show r
r String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [i] -> String
forall t. Show t => [t] -> String
lst [i]
is String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- L --

instance Show SmLit
    where show :: SmLit -> String
show (SmBooleanL Bool
v) = String
"Lit.Boolean (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Bool -> String
forall a. Show a => a -> String
show Bool
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmByteL Int8
v) = String
"Lit.Byte(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int8 -> String
forall a. Show a => a -> String
show Int8
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmCharL Char
v) = String
"Lit.Char(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Char -> String
forall a. Show a => a -> String
show Char
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmDoubleL Double
v) = String
"Lit.Double(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmFloatL Float
v) = String
"Lit.Float(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Float -> String
forall a. Show a => a -> String
show Float
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmIntL Int
v) = String
"Lit.Int(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmLongL Int64
v) = String
"Lit.Long(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int64 -> String
forall a. Show a => a -> String
show Int64
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show  SmLit
SmNullL = String
"Lit.Null()"
          show (SmShortL Int16
v) = String
"Lit.Short(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int16 -> String
forall a. Show a => a -> String
show Int16
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmStringL String
v) = String
"Lit.String(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (SmSymbolL Symbol
v) = String
"Lit.Symbol(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Symbol -> String
forall a. Show a => a -> String
show Symbol
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show SmLit
SmUnitL = String
"Lit.Unit()"

--------------------------------------------------------------------------- M --

instance ( i ~ SmInit m n t' t ac
         , r ~ SmRef_
         ) => Show SmMod
    where show :: SmMod -> String
show (MAnnot (SmAnnotM i
i)) = String
"Mod.Annot(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ i -> String
forall a. Show a => a -> String
show i
i String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (MMod SmModM
SmAbstractM) = String
"Mod.Abstract()"
          show (MMod SmModM
SmCaseM) = String
"Mod.Case()"
          show (MMod SmModM
SmCovariantM) = String
"Mod.Covariant()"
          show (MMod SmModM
SmContravariantM) = String
"Mod.Contravariant()"
          show (MMod SmModM
SmErasedM) = String
"Mod.Erased()"
          show (MMod SmModM
SmFinalM) = String
"Mod.Final()"
          show (MMod SmModM
SmImplicitM) = String
"Mod.Implicit()"
          show (MMod SmModM
SmInfixM) = String
"Mod.Infix()"
          show (MMod SmModM
SmInlineM) = String
"Mod.Inline()"
          show (MMod SmModM
SmLazyM) = String
"Mod.Lazy()"
          show (MMod SmModM
SmOpaqueM) = String
"Mod.Opaque()"
          show (MMod SmModM
SmOpenM) = String
"Mod.Open()"
          show (MMod SmModM
SmOverrideM) = String
"Mod.Override()"
          show (MAccess (SmPrivateM r
r)) = String
"Mod.Private(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ r -> String
forall a. Show a => a -> String
show r
r String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (MAccess (SmProtectedM r
r)) = String
"Mod.Protected(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ r -> String
forall a. Show a => a -> String
show r
r String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (MMod SmModM
SmSealedM) = String
"Mod.Sealed()"
          show (MMod SmModM
SmSuperM) = String
"Mod.Super()"
          show (MMod SmModM
SmTransparentM) = String
"Mod.Transparent()"
          show (MMod SmModM
SmUsingM) = String
"Mod.Using()"
          show (MMod SmModM
SmValParamM) = String
"Mod.ValParam()"
          show (MMod SmModM
SmVarParamM) = String
"Mod.VarParam()"

--------------------------------------------------------------------------- N --

instance Show SmName
    where show :: SmName -> String
show (NName SmNameN
SmAnonymousN) = String
"Name.Anonymous()"
          show (NName (SmIndeterminateN String
v)) = String
"Name.Indeterminate(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (NName SmNameN
SmPlaceholderN) = String
"Name.Placeholder()"
          show (NName SmNameN
SmThisN) = String
"Name.This()"
          show (NAnonymous SmAnonymousRT
SmAnonymousRT) = String
"Term.Anonymous()"
          show (NTName SmNameT
n) = SmNameT -> String
forall a. Show a => a -> String
show SmNameT
n
          show (NT'Name SmNameT'
n') = SmNameT' -> String
forall a. Show a => a -> String
show SmNameT'
n'


instance Show SmNameT
    where show :: SmNameT -> String
show (SmNameT String
v) = String
"Term.Name(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance Show SmNameT'
    where show :: SmNameT' -> String
show (SmNameT' String
v) = String
"Type.Name(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- P --

instance Show (SmParamClauseGroup m n p p' t' b' t pc pc')
    where show :: SmParamClauseGroup m n p p' t' b' t pc pc' -> String
show (SmParamClauseGroup pc'
t'pc [pc]
pcs) = String
"Member.ParamClauseGroup" String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [pc] -> String
forall t. Show t => [t] -> String
lst [pc]
pcs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance Show SmPat
    where show :: SmPat -> String
show (PLit (SmBooleanL Bool
v)) = String
"Lit.Boolean(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Bool -> String
forall a. Show a => a -> String
show Bool
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit (SmByteL Int8
v)) = String
"Lit.Byte(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int8 -> String
forall a. Show a => a -> String
show Int8
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit (SmCharL Char
v)) = String
"Lit.Char(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Char -> String
forall a. Show a => a -> String
show Char
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit (SmDoubleL Double
v)) = String
"Lit.Double(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit (SmFloatL Float
v)) = String
"Lit.Float(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Float -> String
forall a. Show a => a -> String
show Float
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit (SmIntL Int
v)) = String
"Lit.Int(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit (SmLongL Int64
v)) = String
"Lit.Long(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int64 -> String
forall a. Show a => a -> String
show Int64
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit SmLit
SmNullL) = String
"Lit.Null()"
          show (PLit (SmShortL Int16
v)) = String
"Lit.Short(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int16 -> String
forall a. Show a => a -> String
show Int16
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit (SmStringL String
v)) = String
"Lit.String(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit (SmSymbolL Symbol
v)) = String
"Lit.Symbol(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Symbol -> String
forall a. Show a => a -> String
show Symbol
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PLit SmLit
SmUnitL) = String
"Lit.Unit()"
          show (PPat (SmAlternativeP p
lhs p
rhs)) = String
"Pat.Alternative(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PPat (SmBindP p
lhs p
rhs)) = String
"Pat.Bind(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PExtract (SmExtractP t
f ac
ac)) = String
"Pat.Extract(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
f String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ac -> String
forall a. Show a => a -> String
show ac
ac String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PExtractInfix (SmExtractInfixP p
lhs tn
op ac
ac)) = String
"Pat.ExtractInfix(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
op String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ac -> String
forall a. Show a => a -> String
show ac
ac String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PPat (SmGivenP t'
tpe)) = String
"Pat.Given(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PPat (SmInterpolateP tn
n [l]
ls [p]
as)) = String
"Pat.Interpolate(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [l] -> String
forall t. Show t => [t] -> String
lst [l]
ls String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PMacro (SmMacroP t
b)) = String
"Pat.Macro(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PPat (SmRepeatedP tn
n)) = String
"Pat.Repeated(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PPat (SmNameP tn
n)) = tn -> String
forall a. Show a => a -> String
show tn
n
          show (PPat (SmSelectP (SmSelectRT t
q tn
n))) = String
"Term.Select(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
q String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PPat SmPatP
SmSeqWildcardP) = String
"Pat.SeqWildcard()"
          show (PTuple (SmTupleP [p]
as)) = String
"Pat.Tuple(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PPat (SmTypedP p
lhs t'
rhs)) = String
"Pat.Typed(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PVar (SmVarP tn
n)) = String
"Pat.Var(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (PPat SmPatP
SmWildcardP) = String
"Pat.Wildcard()"
          show (PPat (SmXmlP [l]
ls [p]
as)) = String
"Pat.Xml(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [l] -> String
forall t. Show t => [t] -> String
lst [l]
ls String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance Show (SmArgClauseP p)
    where show :: SmArgClauseP p -> String
show (SmArgClauseP [p]
vs) = String
"Pat.ArgClause(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
vs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance ( m ~ SmMod
         , n ~ SmName
         , t' ~ SmType'
         , t ~ SmTerm
         ) => Show (SmParamT m n t' t)
    where show :: SmParamT m n t' t -> String
show (SmParamT [m]
ms n
n Maybe t'
dt Maybe t
d) = String
"Term.Param(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall t. Show t => Maybe t -> String
opt Maybe t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t -> String
forall t. Show t => Maybe t -> String
opt Maybe t
d String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance ( m ~ SmMod
         , t' ~ SmType'
         , n ~ SmName
         , t ~ SmTerm
         , p ~ SmParamT m n t' t
         ) => Show (SmParamClauseT m n p t' t)
    where show :: SmParamClauseT m n p t' t -> String
show (SmParamClauseT [p]
ps Maybe m
m) = String
"Term.ParamClause(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe m -> String
forall t. Show t => Maybe t -> String
opt Maybe m
m String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance ( m ~ SmMod
         , n ~ SmName
         , t' ~ SmType'
         , b' ~ SmBounds' t'
         , p' ~ SmParamT' m n t' b'
         , pc' ~ SmParamClauseT' m n p' t' b'
         ) => Show (SmParamT' m n t' b')
    where show :: SmParamT' m n t' b' -> String
show (SmParamT' [m]
ms n
n pc'
t'pc b'
tb [t']
vbs [t']
cbs) = String
"Type.Param(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ b' -> String
forall a. Show a => a -> String
show b'
tb String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'] -> String
forall t. Show t => [t] -> String
lst [t']
vbs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'] -> String
forall t. Show t => [t] -> String
lst [t']
cbs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance ( m ~ SmMod
         , n ~ SmName
         , t' ~ SmType'
         , b' ~ SmBounds' t'
         , p' ~ SmParamT' m n t' b'
         ) => Show (SmParamClauseT' m n p' t' b')
     where show :: SmParamClauseT' m n p' t' b' -> String
show (SmParamClauseT' [p']
p's) = String
"Type.ParamClause(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p'] -> String
forall t. Show t => [t] -> String
lst [p']
p's String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- R --

instance Show SmRef_
    where show :: SmRef_ -> String
show (RImportee SmImportee
i) = SmImportee -> String
forall a. Show a => a -> String
show SmImportee
i
          show (RInit SmInit m n t' t ac
i) = SmInit m n t' t ac -> String
forall a. Show a => a -> String
show SmInit m n t' t ac
i
          show (RName SmName
n) = SmName -> String
forall a. Show a => a -> String
show SmName
n
          show (R_TRef SmRef
r) = SmRef -> String
forall a. Show a => a -> String
show SmRef
r
          show (R_T'Ref SmRef'
r) = SmRef' -> String
forall a. Show a => a -> String
show SmRef'
r


instance Show SmRef
    where show :: SmRef -> String
show (RTAnonymous SmAnonymousRT
SmAnonymousRT) = String
"Term.Anonymous()"
          show (RTRef (SmApplyUnaryRT n
n t
t)) = String
"Term.ApplyUnary(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
t String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (RTName SmNameT
n) = SmNameT -> String
forall a. Show a => a -> String
show SmNameT
n
          show (RTSelect (SmSelectRT t
q tn
n)) = String
"Term.Select(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
q String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (RTRef (SmSuperRT n
m n
n)) = String
"Term.Super(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
m String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (RTRef (SmThisRT n
n)) = String
"Term.This(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance Show SmRef'
    where show :: SmRef' -> String
show (RT'Name SmNameT'
n) = SmNameT' -> String
forall a. Show a => a -> String
show SmNameT'
n
          show (RT'Ref (SmProjectRT' t'
q t'n
n)) = String
"Type.Project(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
q String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (RT'Ref (SmSelectRT' r
q t'n
n)) = String
"Type.Select(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ r -> String
forall a. Show a => a -> String
show r
q String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (RT'Ref (SmSingletonRT' r
r)) = String
"Type.Singleton(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ r -> String
forall a. Show a => a -> String
show r
r String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- S --

instance ( n ~ SmName
         , t' ~ SmType'
         ) => Show (SmSelf n t')
    where show :: SmSelf n t' -> String
show (SmSelf n
n Maybe t'
dt) = String
"Self(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall t. Show t => Maybe t -> String
opt Maybe t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance Show SmStat
    where
    show :: SmStat -> String
show (S'' String
s) = String
s
    show (SCtorSecondary (SmCtorSecondaryS [m]
ms n
n [pc]
pcs i
i [s]
ss)) = String
"Ctor.Secondary(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [pc] -> String
forall t. Show t => [t] -> String
seq [pc]
pcs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [s] -> String
forall a. Show a => a -> String
show [s]
ss String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SDef' (SmDef'S [m]
ms tn
tn [g]
gs t'
dt)) = String
"Decl.Def(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
tn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [g] -> String
forall t. Show t => [t] -> String
lst [g]
gs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SGiven' (SmGiven'S [m]
ms tn
tn Maybe g
g t'
dt)) = String
"Decl.Given(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
tn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe g -> String
forall t. Show t => Maybe t -> String
opt Maybe g
g String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SType' (SmType'S [m]
ms t'n
t'n pc'
t'pc b'
b')) = String
"Decl.Type(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
t'n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ b' -> String
forall a. Show a => a -> String
show b'
b' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SVal' (SmVal'S [m]
ms [p]
ps t'
dt)) = String
"Decl.Val(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SVar' (SmVar'S [m]
ms [p]
ps t'
dt)) = String
"Decl.Var(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SClass (SmClassS [m]
ms t'n
t'n pc'
t'pc c
c e
e)) = String
"Defn.Class(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
t'n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ c -> String
forall a. Show a => a -> String
show c
c String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ e -> String
forall a. Show a => a -> String
show e
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SDef (SmDefS [m]
ms tn
tn [g]
gs Maybe t'
dt t
b)) = String
"Defn.Def(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
tn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [g] -> String
forall t. Show t => [t] -> String
lst [g]
gs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall t. Show t => Maybe t -> String
opt Maybe t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SEnum (SmEnumS [m]
ms t'n
t'n pc'
t'pc c
c e
e)) = String
"Defn.Enum(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
t'n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ c -> String
forall a. Show a => a -> String
show c
c String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ e -> String
forall a. Show a => a -> String
show e
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SEnumCase (SmEnumCaseS [m]
ms tn
tn pc'
t'pc c
c [i]
is)) = String
"Defn.EnumCase(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
tn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ c -> String
forall a. Show a => a -> String
show c
c String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [i] -> String
forall t. Show t => [t] -> String
lst [i]
is String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SExtensionGroup (SmExtensionGroupS Maybe g
g s
b)) = String
"Defn.ExtensionGroup(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe g -> String
forall t. Show t => Maybe t -> String
opt Maybe g
g String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ s -> String
forall a. Show a => a -> String
show s
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SGiven (SmGivenS [m]
ms n
n Maybe g
g e
e)) = String
"Defn.Given(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe g -> String
forall t. Show t => Maybe t -> String
opt Maybe g
g String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ e -> String
forall a. Show a => a -> String
show e
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SGivenAlias (SmGivenAliasS [m]
ms n
n Maybe g
g t'
dt t
b)) = String
"Defn.GivenAlias(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe g -> String
forall t. Show t => Maybe t -> String
opt Maybe g
g String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SMacro (SmMacroS [m]
ms tn
tn [g]
gs Maybe t'
dt t
b)) = String
"Defn.Macro(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
tn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [g] -> String
forall t. Show t => [t] -> String
lst [g]
gs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall t. Show t => Maybe t -> String
opt Maybe t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SObject (SmObjectS [m]
ms tn
tn e
e)) = String
"Defn.Object(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
tn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ e -> String
forall a. Show a => a -> String
show e
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SRepeatedEnumCase  (SmRepeatedEnumCase [m]
ms [tn]
tns)) = String
"Defn.RepeatedEnumCase(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [tn] -> String
forall t. Show t => [t] -> String
lst [tn]
tns String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (STrait (SmTraitS [m]
ms t'n
t'n pc'
t'pc c
c e
e)) = String
"Defn.Trait(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
t'n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ c -> String
forall a. Show a => a -> String
show c
c String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ e -> String
forall a. Show a => a -> String
show e
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SType (SmTypeS [m]
ms t'n
t'n pc'
t'pc t'
b b'
b')) = String
"Defn.Type(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
t'n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ b' -> String
forall a. Show a => a -> String
show b'
b' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SVal (SmValS [m]
ms [p]
ps Maybe t'
dt t
rhs)) = String
"Defn.Val(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall a. Show a => a -> String
show Maybe t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SVar (SmVarS [m]
ms [p]
ps Maybe t'
dt t
rhs)) = String
"Defn.Var(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [p] -> String
forall t. Show t => [t] -> String
lst [p]
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall a. Show a => a -> String
show Maybe t'
dt String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SImpExp (SmExportS [t]
is)) = String
"Export(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t] -> String
forall t. Show t => [t] -> String
lst [t]
is String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SImpExp (SmImportS [t]
is)) = String
"Import(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t] -> String
forall t. Show t => [t] -> String
lst [t]
is String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SPkg (SmPkgS r
r [s]
ss)) = String
"Pkg(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ r -> String
forall a. Show a => a -> String
show r
r String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [s] -> String
forall t. Show t => [t] -> String
lst [s]
ss String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (SPkgObject (SmPkgObjectS [m]
ms tn
tn e
e)) = String
"Pkg.Object(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
tn String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ e -> String
forall a. Show a => a -> String
show e
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (STerm SmTerm
t) = SmTerm -> String
forall a. Show a => a -> String
show SmTerm
t


instance Show (SmSource s)
    where show :: SmSource s -> String
show (SmSource [s]
ss) = String
"Source(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [s] -> String
forall t. Show t => [t] -> String
lst [s]
ss String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance Show Symbol
    where show :: Symbol -> String
show (Symbol String
v) = String
"Symbol(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------- T --

instance Show (SmTemplate m n t' t ac i p s)
    where show :: SmTemplate m n t' t ac i p s -> String
show (SmTemplate [s]
es [i]
is p
s [s]
ss [t']
t's) = String
"Template(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [s] -> String
forall t. Show t => [t] -> String
lst [s]
es String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [i] -> String
forall t. Show t => [t] -> String
lst [i]
is String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
s String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [s] -> String
forall t. Show t => [t] -> String
lst [s]
ss String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'] -> String
forall t. Show t => [t] -> String
lst [t']
t's String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance Show SmTerm
    where
    show :: SmTerm -> String
show (T'' String
s) = String
s
    show (TLit (SmBooleanL Bool
v)) = String
"Lit.Boolean(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Bool -> String
forall a. Show a => a -> String
show Bool
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit (SmByteL Int8
v)) = String
"Lit.Byte(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int8 -> String
forall a. Show a => a -> String
show Int8
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit (SmCharL Char
v)) = String
"Lit.Char(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Char -> String
forall a. Show a => a -> String
show Char
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit (SmDoubleL Double
v)) = String
"Lit.Double(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit (SmFloatL Float
v)) = String
"Lit.Float(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Float -> String
forall a. Show a => a -> String
show Float
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit (SmIntL Int
v)) = String
"Lit.Int(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit (SmLongL Int64
v)) = String
"Lit.Long(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int64 -> String
forall a. Show a => a -> String
show Int64
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit SmLit
SmNullL) = String
"Lit.Null()"
    show (TLit (SmShortL Int16
v)) = String
"Lit.Short(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int16 -> String
forall a. Show a => a -> String
show Int16
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit (SmStringL String
v)) = String
"Lit.String(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit (SmSymbolL Symbol
v)) = String
"Lit.Symbol(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Symbol -> String
forall a. Show a => a -> String
show Symbol
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TLit SmLit
SmUnitL) = String
"Lit.Unit()"
    show (TTerm (SmAnnotateT t
e [a]
as)) = String
"Term.Annotate(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [a] -> String
forall t. Show t => [t] -> String
lst [a]
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmAnonymousFunctionT t
b)) = String
"Term.AnonymousFunction(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TApply (SmApplyT t
f ac
ac)) = String
"Term.Apply(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
f String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ac -> String
forall a. Show a => a -> String
show ac
ac String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TApply (SmApplyUsingT t
f ac
ac)) = String
"Term.ApplyUsing(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
f String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ac -> String
forall a. Show a => a -> String
show ac
ac String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TApplyInfix (SmApplyInfixT t
lhs tn
op ac'
t'ac ac
ac)) = String
"Term.ApplyInfix(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
op String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ac' -> String
forall a. Show a => a -> String
show ac'
t'ac String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ac -> String
forall a. Show a => a -> String
show ac
ac String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TApplyType' (SmApplyType'T t
f ac'
t'ac)) = String
"Term.ApplyType(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
f String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ac' -> String
forall a. Show a => a -> String
show ac'
t'ac String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmAscribeT t
expr t'
tpe)) = String
"Term.Ascribe(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
expr String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TAssign (SmAssignT t
lhs t
rhs)) = String
"Term.Assign(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TBlock (SmBlockT [s]
ss)) = String
"Term.Block(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [s] -> String
forall t. Show t => [t] -> String
lst [s]
ss String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TContextFunction (SmContextFunctionT pc
pc t
b)) = String
"Term.ContextFunction(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc -> String
forall a. Show a => a -> String
show pc
pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TDo (SmDoT t
b t
e)) = String
"Term.Do(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmEndMarkerT tn
n)) = String
"Term.EndMarker(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmEtaT t
e)) = String
"Term.Eta(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TFor (SmForT [e]
es t
b)) = String
"Term.For(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [e] -> String
forall t. Show t => [t] -> String
lst [e]
es String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TForYield (SmForYieldT [e]
es t
b)) = String
"Term.ForYield(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [e] -> String
forall t. Show t => [t] -> String
lst [e]
es String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TFunction (SmFunctionT pc
pc t
b)) = String
"Term.Function(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc -> String
forall a. Show a => a -> String
show pc
pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TIf (SmIfT t
c t
t t
e [m]
ms)) = String
"Term.If(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
c String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
t String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmInterpolateT tn
n [l]
ls [t]
as)) = String
"Term.Interpolate(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [l] -> String
forall t. Show t => [t] -> String
lst [l]
ls String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t] -> String
forall t. Show t => [t] -> String
lst [t]
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TMatch (SmMatchT t
e [ct]
cs)) = String
"Term.Match(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [ct] -> String
forall t. Show t => [t] -> String
lst [ct]
cs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmNewT i
i)) = String
"Term.New(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ i -> String
forall a. Show a => a -> String
show i
i String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TNewAnonymous (SmNewAnonymousT e
e)) = String
"Term.NewAnonymous(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ e -> String
forall a. Show a => a -> String
show e
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TPartialFunction (SmPartialFunctionT [ct]
cs)) = String
"Term.PartialFunction(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [ct] -> String
forall t. Show t => [t] -> String
lst [ct]
cs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm SmTermT
SmPlaceholder) = String
"Term.Placeholder()"
    show (TPolyFunction (SmPolyFunctionT pc'
t'pc t
b)) = String
"Term.PolyFunction(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmQuotedMacroExprT t
b)) = String
"Term.QuotedMacroExpr(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmQuotedMacroType'T t'
tpe)) = String
"Term.QuotedMacroType(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmRepeatedT t
e)) = String
"Term.Repeated(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmReturnT t
e)) = String
"Term.Return(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmSplicedMacroExprT t
b)) = String
"Term.SplicedMacroExpr(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmSplicedMacroPatT p
p)) = String
"Term.SplicedMacroPat(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ p -> String
forall a. Show a => a -> String
show p
p String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmThrowT t
e)) = String
"Term.Throw(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTry (SmTryT t
e [ct]
cs Maybe t
f)) = String
"Term.Try(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [ct] -> String
forall t. Show t => [t] -> String
lst [ct]
cs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t -> String
forall t. Show t => Maybe t -> String
opt Maybe t
f String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmTryWithHandlerT t
e t
c t
f)) = String
"Term.TryWithHandler(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
c String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
f String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTuple (SmTupleT [t]
as)) = String
"Term.Tuple(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t] -> String
forall t. Show t => [t] -> String
lst [t]
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TWhile (SmWhileT t
e t
b)) = String
"Term.While(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TTerm (SmXmlT [l]
ls [t]
as)) = String
"Term.Xml(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [l] -> String
forall t. Show t => [t] -> String
lst [l]
ls String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t] -> String
forall t. Show t => [t] -> String
lst [t]
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TRef (RTAnonymous SmAnonymousRT
SmAnonymousRT)) = String
"Term.Anonymous()"
    show (TRef (RTRef (SmApplyUnaryRT n
n t
t))) = String
"Term.ApplyUnary(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
t String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TRef (RTName SmNameT
n)) = SmNameT -> String
forall a. Show a => a -> String
show SmNameT
n
    show (TRef (RTSelect (SmSelectRT t
q tn
n))) = String
"Term.Select(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
q String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ tn -> String
forall a. Show a => a -> String
show tn
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TRef (RTRef (SmSuperRT n
m n
n))) = String
"Term.Super(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
m String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
    show (TRef (RTRef (SmThisRT n
n))) = String
"Term.This(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ n -> String
forall a. Show a => a -> String
show n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

instance ( m ~ SmMod
         , t ~ SmTerm
         ) => Show (SmArgClauseT m t)
    where show :: SmArgClauseT m t -> String
show (SmArgClauseT [t]
vs Maybe m
mod) = String
"Term.ArgClause(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t] -> String
forall t. Show t => [t] -> String
lst [t]
vs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe m -> String
forall t. Show t => Maybe t -> String
opt Maybe m
mod String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance Show SmType'
    where show :: SmType' -> String
show (T'Lit (SmBooleanL Bool
v)) = String
"Lit.Boolean(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Bool -> String
forall a. Show a => a -> String
show Bool
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit (SmByteL Int8
v)) = String
"Lit.Byte(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int8 -> String
forall a. Show a => a -> String
show Int8
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit (SmCharL Char
v)) = String
"Lit.Char(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Char -> String
forall a. Show a => a -> String
show Char
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit (SmDoubleL Double
v)) = String
"Lit.Double(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Double -> String
forall a. Show a => a -> String
show Double
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit (SmFloatL Float
v)) = String
"Lit.Float(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Float -> String
forall a. Show a => a -> String
show Float
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit (SmIntL Int
v)) = String
"Lit.Int(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit (SmLongL Int64
v)) = String
"Lit.Long(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int64 -> String
forall a. Show a => a -> String
show Int64
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit SmLit
SmNullL) = String
"Lit.Null()"
          show (T'Lit (SmShortL Int16
v)) = String
"Lit.Short(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int16 -> String
forall a. Show a => a -> String
show Int16
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit (SmStringL String
v)) = String
"Lit.String(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ ShowS
forall a. Show a => a -> String
show String
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit (SmSymbolL Symbol
v)) = String
"Lit.Symbol(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Symbol -> String
forall a. Show a => a -> String
show Symbol
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lit SmLit
SmUnitL) = String
"Lit.Unit()"
          show (T'Type' (SmAndT' t'
lhs t'
rhs)) = String
"Type.And(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmAnnotateT' t'
tpe [a]
as)) = String
"Type.Annotate(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [a] -> String
forall t. Show t => [t] -> String
lst [a]
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmAnonymousLambdaT' t'
v)) = String
"Type.AnonymousLambda(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' SmType'T'
SmAnonymousNameT') = String
"Type.AnonymousName()"
          show (T'Type' (SmAnonymousParamT' Maybe m
m)) = String
"Type.AnonymousParam(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe m -> String
forall t. Show t => Maybe t -> String
opt Maybe m
m String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Apply (SmApplyT' t'
tpe ac'
ac)) = String
"Type.Apply(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ ac' -> String
forall a. Show a => a -> String
show ac'
ac String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'ApplyInfix (SmApplyInfixT' t'
lhs t'n
op t'
rhs)) = String
"Type.ApplyInfix(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
op String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmBlockT' [t'd]
t'ds t'
tpe)) = String
"Type.Block(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'd] -> String
forall t. Show t => [t] -> String
lst [t'd]
t'ds String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmByNameT' t'
tpe)) = String
"Type.ByName(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'ContextFunction (SmContextFunctionT' FuncParamClause' t'
pc t'
res)) = String
"Type.ContextFunction(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ FuncParamClause' t' -> String
forall a. Show a => a -> String
show FuncParamClause' t'
pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
res String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Existential (SmExistentialT' t'
tpe [s]
ss)) = String
"Type.Existential(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [s] -> String
forall t. Show t => [t] -> String
lst [s]
ss String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Function (SmFunctionT' FuncParamClause' t'
pc t'
res)) = String
"Type.Function(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ FuncParamClause' t' -> String
forall a. Show a => a -> String
show FuncParamClause' t'
pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
res String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmImplicitFunctionT' [t']
ps t'
res)) = String
"Type.ImplicitFunction(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'] -> String
forall t. Show t => [t] -> String
lst [t']
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'] -> String
forall a. Show a => a -> String
show [t']
ps String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Lambda (SmLambdaT' pc'
t'pc t'
tpe)) = String
"Type.Lambda(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Macro (SmMacroT' t
b)) = String
"Type.Macro(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Match (SmMatchT' t'
tpe [ct]
cs)) = String
"Type.Match(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [ct] -> String
forall t. Show t => [t] -> String
lst [ct]
cs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmMethodT' [pc]
pcs t'
tpe)) = String
"Type.Method(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [pc] -> String
forall t. Show t => [t] -> String
seq [pc]
pcs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmOrT' t'
lhs t'
rhs)) = String
"Type.Or(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'PolyFunction (SmPolyFunctionT' pc'
t'pc t'
b)) = String
"Type.PolyFunction(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Refine (SmRefineT' Maybe t'
tpe [s]
ss)) = String
"Type.Refine(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall a. Show a => a -> String
show Maybe t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [s] -> String
forall t. Show t => [t] -> String
lst [s]
ss String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmRepeatedT' t'
tpe)) = String
"Type.Repeated(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
tpe String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' SmType'T'
SmPatWildcardT') = String
"Type.PatWildcard()"
          show (T'Tuple (SmTupleT' [t']
as)) = String
"Type.Tuple(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'] -> String
forall t. Show t => [t] -> String
lst [t']
as String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Var (SmVarT' t'n
v)) = String
"Type.Var(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmWithT' t'
lhs t'
rhs)) = String
"Type.With(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
lhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
rhs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Type' (SmWildcardT' b'
b')) = String
"Type.Wildcard(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ b' -> String
forall a. Show a => a -> String
show b'
b' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Ref (RT'Name SmNameT'
n')) = SmNameT' -> String
forall a. Show a => a -> String
show SmNameT'
n'
          show (T'Ref (RT'Ref (SmProjectRT' t'
q t'n
n))) = String
"Type.Project(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
q String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Ref (RT'Ref (SmSelectRT' r
q t'n
n))) = String
"Type.Select(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ r -> String
forall a. Show a => a -> String
show r
q String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'Ref (RT'Ref (SmSingletonRT' r
r))) = String
"Type.Singleton(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ r -> String
forall a. Show a => a -> String
show r
r String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance t' ~ SmType' => Show (SmArgClauseT' t')
    where show :: SmArgClauseT' t' -> String
show (SmArgClauseT' [t']
vs) = String
"Type.ArgClause(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t'] -> String
forall t. Show t => [t] -> String
lst [t']
vs String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance t' ~ SmType' => Show (SmBounds' t')
    where show :: SmBounds' t' -> String
show (SmBounds' Maybe t'
lo Maybe t'
hi) = String
"Type.Bounds(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall t. Show t => Maybe t -> String
opt Maybe t'
lo String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Maybe t' -> String
forall t. Show t => Maybe t -> String
opt Maybe t'
hi String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"


instance ( m ~ SmMod
         , n ~ SmName
         , t'n ~ SmNameT'
         , p' ~ SmParamT' m n t' b'
         , t' ~ SmType'
         , b' ~ SmBounds' t'
         , pc' ~ SmParamClauseT' m n p' t' b'
         ) => Show (SmType'Def m n t'n p' t' b' pc')
    where show :: SmType'Def m n t'n p' t' b' pc' -> String
show (T'DType' (SmType'S [m]
ms t'n
t'n pc'
t'pc b'
b')) = String
"Decl.Type(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
t'n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ b' -> String
forall a. Show a => a -> String
show b'
b' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
          show (T'DType (SmTypeS [m]
ms t'n
t'n pc'
t'pc t'
b b'
b')) = String
"Defn.Type(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [m] -> String
forall t. Show t => [t] -> String
lst [m]
ms String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t'n -> String
forall a. Show a => a -> String
show t'n
t'n String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ pc' -> String
forall a. Show a => a -> String
show pc'
t'pc String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ t' -> String
forall a. Show a => a -> String
show t'
b String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
", " String -> ShowS
forall a. [a] -> [a] -> [a]
++ b' -> String
forall a. Show a => a -> String
show b'
b' String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

--------------------------------------------------------------------------------

csv :: Show t => [t] -> String
csv :: forall t. Show t => [t] -> String
csv [t]
ls = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [ t -> String
forall a. Show a => a -> String
show t
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
c | (t
v,Int
i) <- [(t, Int)]
ps, let c :: String
c = if Int
i Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< [t] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [t]
ls then String
", " else String
"" ]
    where ps :: [(t, Int)]
ps = [t] -> [Int] -> [(t, Int)]
forall a b. [a] -> [b] -> [(a, b)]
zip [t]
ls ((t -> Bool) -> [t] -> [Int]
forall a. (a -> Bool) -> [a] -> [Int]
findIndices (Bool -> t -> Bool
forall a b. a -> b -> a
const Bool
True) [t]
ls)

lst :: Show t => [t] -> String
lst :: forall t. Show t => [t] -> String
lst [] = String
"Nil"
lst [t]
ls = String
"List(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t] -> String
forall t. Show t => [t] -> String
csv [t]
ls String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

seq :: Show t => [t] -> String
seq :: forall t. Show t => [t] -> String
seq [] = String
"Seq()"
seq [t]
ls = String
"Seq(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ [t] -> String
forall t. Show t => [t] -> String
csv [t]
ls String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"

opt :: Show t => Maybe t -> String
opt :: forall t. Show t => Maybe t -> String
opt (Just t
v) = String
"Some(" String -> ShowS
forall a. [a] -> [a] -> [a]
++ t -> String
forall a. Show a => a -> String
show t
v String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
")"
opt Maybe t
_ = String
"None"