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, NestedTypeExpression)] |
  SumStructure [(Text, [NestedTypeExpression])] |
  EnumStructure [Text]
  deriving (Int -> Structure -> ShowS
[Structure] -> ShowS
Structure -> String
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 NestedTypeExpression =
  AppSeqNestedTypeExpression TypeString.AppSeq |
  StructureNestedTypeExpression Structure
  deriving (Int -> NestedTypeExpression -> ShowS
[NestedTypeExpression] -> ShowS
NestedTypeExpression -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NestedTypeExpression] -> ShowS
$cshowList :: [NestedTypeExpression] -> ShowS
show :: NestedTypeExpression -> String
$cshow :: NestedTypeExpression -> String
showsPrec :: Int -> NestedTypeExpression -> ShowS
$cshowsPrec :: Int -> NestedTypeExpression -> ShowS
Show)