| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Drasil.System
Synopsis
- type Purpose = [Sentence]
- type Background = [Sentence]
- type Scope = [Sentence]
- type Motivation = [Sentence]
- data SystemMeta
- class HasSystemMeta c where
- systemMeta :: Lens' c SystemMeta
- authors :: Lens' c People
- background :: Lens' c Background
- motivation :: Lens' c Motivation
- projName :: Lens' c ProjectName
- purpose :: Lens' c Purpose
- scope :: Lens' c Scope
- systemdb :: Lens' c ChunkDB
- mkSystemMeta :: ProjectName -> People -> Purpose -> Background -> Scope -> Motivation -> ChunkDB -> SystemMeta
- data ProjectName
- class HasProjectName c where
- projectName :: Lens' c ProjectName
- projAbrv :: Lens' c String
- projRepoName :: Lens' c String
- projTitle :: Lens' c NP
- mkProjectName :: UID -> NP -> String -> (String -> String) -> ProjectName
- mkCommonProjName :: UID -> NP -> String -> ProjectName
- projTitleS :: ProjectName -> Sentence
- projAbrvS :: ProjectName -> Sentence
- introduceProjName :: ProjectName -> Sentence
- class (HasSystemMeta sys, HasProjectName sys) => ToFiles sys opts | opts -> sys where
- toFiles :: sys -> opts -> [FileLayout]
Documentation
type Background = [Sentence] Source #
Project Example background information, used in the What section of
README.
type Motivation = [Sentence] Source #
Project Example motivation.
data SystemMeta Source #
Instances
| HasChunkRefs SystemMeta Source # | |
Defined in Drasil.System.Core Methods chunkRefs :: SystemMeta -> Set UID # | |
| HasUID SystemMeta Source # | |
Defined in Drasil.System.Core Methods uid :: Getter SystemMeta UID # | |
| HasSystemMeta SystemMeta Source # | |
Defined in Drasil.System.Core Methods systemMeta :: Lens' SystemMeta SystemMeta Source # authors :: Lens' SystemMeta People Source # background :: Lens' SystemMeta Background Source # motivation :: Lens' SystemMeta Motivation Source # projName :: Lens' SystemMeta ProjectName Source # purpose :: Lens' SystemMeta Purpose Source # scope :: Lens' SystemMeta Scope Source # systemdb :: Lens' SystemMeta ChunkDB Source # | |
| HasProjectName SystemMeta Source # | |
Defined in Drasil.System.Core Methods projectName :: Lens' SystemMeta ProjectName Source # projAbrv :: Lens' SystemMeta String Source # projRepoName :: Lens' SystemMeta String Source # projTitle :: Lens' SystemMeta NP Source # | |
class HasSystemMeta c where Source #
Minimal complete definition
Methods
systemMeta :: Lens' c SystemMeta Source #
authors :: Lens' c People Source #
background :: Lens' c Background Source #
motivation :: Lens' c Motivation Source #
projName :: Lens' c ProjectName Source #
purpose :: Lens' c Purpose Source #
Instances
| HasSystemMeta SystemMeta Source # | |
Defined in Drasil.System.Core Methods systemMeta :: Lens' SystemMeta SystemMeta Source # authors :: Lens' SystemMeta People Source # background :: Lens' SystemMeta Background Source # motivation :: Lens' SystemMeta Motivation Source # projName :: Lens' SystemMeta ProjectName Source # purpose :: Lens' SystemMeta Purpose Source # scope :: Lens' SystemMeta Scope Source # systemdb :: Lens' SystemMeta ChunkDB Source # | |
mkSystemMeta :: ProjectName -> People -> Purpose -> Background -> Scope -> Motivation -> ChunkDB -> SystemMeta Source #
data ProjectName Source #
General software projects generally have at least 3 names: a human-readable title, a human-preferred abbreviation, and a preferred repository name (slug). For example, "Drasil: A Software Generation Framework", Drasil, and "drasil".
Instances
class HasProjectName c where Source #
Minimal complete definition
Methods
projectName :: Lens' c ProjectName Source #
projAbrv :: Lens' c String Source #
projRepoName :: Lens' c String Source #
Instances
| HasProjectName SystemMeta Source # | |
Defined in Drasil.System.Core Methods projectName :: Lens' SystemMeta ProjectName Source # projAbrv :: Lens' SystemMeta String Source # projRepoName :: Lens' SystemMeta String Source # projTitle :: Lens' SystemMeta NP Source # | |
| HasProjectName ProjectName Source # | |
Defined in Drasil.System.ProjectName Methods projectName :: Lens' ProjectName ProjectName Source # projAbrv :: Lens' ProjectName String Source # projRepoName :: Lens' ProjectName String Source # projTitle :: Lens' ProjectName NP Source # | |
mkProjectName :: UID -> NP -> String -> (String -> String) -> ProjectName Source #
Construct a ProjectName from a UID, title (NP), abbreviation (String),
and repository name formatter ('String -> String'). Errors if the repository
name contains characters other than alphanumeric characters or .-
Abbreviation rules: 1. Non-empty, maximum of 64 chars. 2. Only printable characters.
Repo name rules:
1. Non-empty, maximum of 64 chars.
2. Lowercase alphanumeric or - only.
mkCommonProjName :: UID -> NP -> String -> ProjectName Source #
Construct a ProjectName using a common repository name formatting rule
(lowercase, naively replace non-alphanumeric characters with s).-
projTitleS :: ProjectName -> Sentence Source #
Get the title of a ProjectName (as a Sentence).
projAbrvS :: ProjectName -> Sentence Source #
Get the human-readable abbreviation of a ProjectName (as a Sentence).
introduceProjName :: ProjectName -> Sentence Source #
Combine a ProjectName's title and abbreviation into an introductory
Sentence (e.g. "Title (Abbreviation)").
class (HasSystemMeta sys, HasProjectName sys) => ToFiles sys opts | opts -> sys where Source #
The goal of our systems is to be abstractions about human-readable software
artifacts. An instance of this typeclass (ToFiles) defines a software
generator that explains how said abstractions can be made fully concrete
(i.e., made into concrete software artifacts).
Methods
Arguments
| :: sys | The system. |
| -> opts | The generation options. |
| -> [FileLayout] | The final, rendered software artifacts. |