packages feed

moonlight-pale-0.1.0.0: src-diagnostic/Moonlight/Pale/Diagnostic/Summary/Structural.hs

{-# LANGUAGE DerivingStrategies #-}

{-| Whole-object structural and Grothendieck summaries. -}
module Moonlight.Pale.Diagnostic.Summary.Structural
  ( StructuralSummary (..),
    GrothendieckStructuralSummary (..),
  )
where

import Data.Kind (Type)
import Moonlight.Pale.Diagnostic.Topology.Cohomology (CoboundaryNilpotenceEvidence)
import Moonlight.Pale.Diagnostic.Topology.Homotopy (NerveHomotopyProfile)
import Prelude (Bool, Double, Eq, Int, Maybe, Read, Show)

type StructuralSummary :: Type
data StructuralSummary = StructuralSummary
  { ssConnectedComponents :: Int,
    ssBettiNumbers :: [Int],
    ssCellCount :: Int,
    ssRestrictionCount :: Int,
    ssCoboundaryNilpotent :: Bool,
    ssMicrosupportSize :: Maybe Int,
    ssCriticalCellCount :: Maybe Int,
    ssNoncriticalFraction :: Maybe Double
  }
  deriving stock (Eq, Show, Read)

type GrothendieckStructuralSummary :: Type
data GrothendieckStructuralSummary = GrothendieckStructuralSummary
  { gssHomotopyProfile :: NerveHomotopyProfile,
    gssCellCount :: Int,
    gssFaceCount :: Int,
    gssObjectCount :: Int,
    gssMorphismCount :: Int,
    gssCrossContextMorphismCount :: Int,
    gssVerticalMorphismCount :: Int,
    gssDiagonalMorphismCount :: Int,
    gssCoboundaryNilpotenceEvidence :: CoboundaryNilpotenceEvidence
  }
  deriving stock (Eq, Show, Read)