module Domain.Models.TypeCentricDoc
where

import Domain.Prelude hiding (Product, Sum, Enum)
import qualified Domain.Models.TypeString as TypeString


type Doc =
  [(Text, Structure)]

data Structure =
  ProductStructure [(Text, TypeString.AppSeq)] |
  SumStructure [(Text, SumTypeExpression)] |
  EnumStructure [Text]
  deriving (Int -> Structure -> ShowS
[Structure] -> ShowS
Structure -> String
(Int -> Structure -> ShowS)
-> (Structure -> String)
-> ([Structure] -> ShowS)
-> Show Structure
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Structure] -> ShowS
$cshowList :: [Structure] -> ShowS
show :: Structure -> String
$cshow :: Structure -> String
showsPrec :: Int -> Structure -> ShowS
$cshowsPrec :: Int -> Structure -> ShowS
Show)

data SumTypeExpression =
  SequenceSumTypeExpression [TypeString.AppSeq] |
  StringSumTypeExpression TypeString.CommaSeq
  deriving (Int -> SumTypeExpression -> ShowS
[SumTypeExpression] -> ShowS
SumTypeExpression -> String
(Int -> SumTypeExpression -> ShowS)
-> (SumTypeExpression -> String)
-> ([SumTypeExpression] -> ShowS)
-> Show SumTypeExpression
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SumTypeExpression] -> ShowS
$cshowList :: [SumTypeExpression] -> ShowS
show :: SumTypeExpression -> String
$cshow :: SumTypeExpression -> String
showsPrec :: Int -> SumTypeExpression -> ShowS
$cshowsPrec :: Int -> SumTypeExpression -> ShowS
Show)