CurryInfo: currydoc-5.0.0 / CurryDoc.Data.CurryDoc

classes: Info
 
documentation: Info
 
name: Info
 CurryDoc.Data.CurryDoc
operations: Info
 curryDocDeclName getTypesigComments instTypeNames isCurryDocClassDecl isCurryDocFuncDecl isCurryDocTypeDecl
sourcecode: Info
 
{- |
     Author  : Kai-Oliver Prott
     Version : March 2025

     Datatype and operations for Abstract CurryDoc
-}
module CurryDoc.Data.CurryDoc where

import CurryDoc.Info.Header
import CurryDoc.Info.Comments
import CurryDoc.Data.AnaInfo

import AbstractCurry.Types
import AbstractCurry.Select ( tconsArgsOfType )

import Data.Maybe ( catMaybes )

-- | CurryDoc mName mhead exports imports
data CurryDoc = CurryDoc MName ModuleHeader [ExportEntry CurryDocDecl]
                         [MName]
  deriving (Show)

-- | Documented Curry declarations
data CurryDocDecl
  = CurryDocTypeDecl     QName [CTVarIName] CTypeExpr [Comment]
  | CurryDocDataDecl     QName [CTVarIName] [CurryDocInstanceDecl]
                         Bool [CurryDocCons] [Comment]
  | CurryDocNewtypeDecl  QName [CTVarIName] [CurryDocInstanceDecl]
                         (Maybe CurryDocCons) [Comment]
  | CurryDocClassDecl    QName CContext [CTVarIName] [CurryDocFunDep] [CurryDocDecl] [Comment]
  | CurryDocFunctionDecl QName CQualTypeExpr (Maybe CurryDocTypeSig)
                         AnalysisInfo [Comment]
  deriving (Show)

-- | Documented Curry constructors
data CurryDocCons
  = CurryDocConstr QName [CTypeExpr]                 AnalysisInfo [Comment]
  | CurryDocConsOp QName CTypeExpr CTypeExpr         AnalysisInfo [Comment]
  | CurryDocRecord QName [CTypeExpr] [CurryDocField] AnalysisInfo [Comment]
  deriving (Show)

-- | Documented Curry type signatures
data CurryDocTypeSig = CurryDocTypeSig QName CContext
                                       [(CTypeExpr, [Comment])] [Comment]
  deriving (Show)

-- | Documented Curry instances
data CurryDocInstanceDecl = CurryDocInstanceDecl QName CContext [CTypeExpr]
                                                 [CurryDocDecl] [Comment]
  deriving (Show)

-- | Documented Curry Record fields
data CurryDocField = CurryDocField QName CTypeExpr AnalysisInfo [Comment]
  deriving (Show)

-- | Documented Curry functional dependencies
data CurryDocFunDep = CurryDocFunDep CFunDep
  deriving (Show)

isCurryDocFuncDecl :: CurryDocDecl -> Bool
isCurryDocFuncDecl d = case d of
  CurryDocFunctionDecl _ _ _ _ _ -> True
  _                              -> False

isCurryDocClassDecl :: CurryDocDecl -> Bool
isCurryDocClassDecl d = case d of
  CurryDocClassDecl _ _ _ _ _ _ -> True
  _                             -> False

isCurryDocTypeDecl :: CurryDocDecl -> Bool
isCurryDocTypeDecl d = case d of
  CurryDocDataDecl    _ _ _ _ _ _ -> True
  CurryDocNewtypeDecl _ _ _ _ _   -> True
  CurryDocTypeDecl    _ _ _ _     -> True
  _                               -> False

getTypesigComments :: CurryDocTypeSig -> [Comment]
getTypesigComments (CurryDocTypeSig _ _ _ cs) = cs

instTypeNames :: CurryDocInstanceDecl -> [QName]
instTypeNames (CurryDocInstanceDecl _ _ ts _ _)  
 = map fst $ catMaybes $ map tconsArgsOfType ts
 
curryDocDeclName :: CurryDocDecl -> QName
curryDocDeclName (CurryDocTypeDecl     n _ _ _    ) = n
curryDocDeclName (CurryDocDataDecl     n _ _ _ _ _) = n
curryDocDeclName (CurryDocNewtypeDecl  n _ _ _ _  ) = n
curryDocDeclName (CurryDocClassDecl    n _ _ _ _ _) = n
curryDocDeclName (CurryDocFunctionDecl n _ _ _ _  ) = n
types: Info
 CurryDoc CurryDocCons CurryDocDecl CurryDocField CurryDocFunDep CurryDocInstanceDecl CurryDocTypeSig
unsafe: Info
 unsafe due to modules CASS.Registry Analysis.NondetOps System.IO.Unsafe Analysis.UnsafeModule