module Drasil.SWHSNoPCM.Requirements (
funcReqs, inReqDesc, funcReqsTables
) where
import Control.Lens ((^.))
import Language.Drasil
import qualified Language.Drasil.Development as D
import Language.Drasil.Chunk.Concept.NamedCombinators
import Drasil.DocLang (inReqWTab)
import Theory.Drasil (InstanceModel)
import Data.Drasil.Concepts.Documentation (value)
import Data.Drasil.Quantities.PhysicalProperties (mass)
import Drasil.SWHS.DataDefs (waterMass, tankVolume, balanceDecayRate)
import Drasil.SWHS.IMods (heatEInWtr)
import Drasil.SWHS.Requirements (calcValues, checkWithPhysConsts,
findMassConstruct, inReqDesc, oIDQConstruct, outputValues)
import Drasil.SWHSNoPCM.DataDefs (waterVolume)
import Drasil.SWHSNoPCM.IMods (eBalanceOnWtr)
import Drasil.SWHSNoPCM.Unitals (inputs)
funcReqsTables :: [LabelledContent]
funcReqsTables :: [LabelledContent]
funcReqsTables = [LabelledContent
inputValuesTable]
inputValues :: ConceptInstance
inputValuesTable :: LabelledContent
(ConceptInstance
inputValues, LabelledContent
inputValuesTable) = Maybe Sentence
-> [DefinedQuantityDict] -> (ConceptInstance, LabelledContent)
forall q.
(Quantity q, MayHaveUnit q) =>
Maybe Sentence -> [q] -> (ConceptInstance, LabelledContent)
inReqWTab (Sentence -> Maybe Sentence
forall a. a -> Maybe a
Just Sentence
inReqDesc) [DefinedQuantityDict]
inputs
findMass :: ConceptInstance
findMass :: ConceptInstance
findMass = ConceptInstance
-> Sentence
-> [InstanceModel]
-> [DataDefinition]
-> ConceptInstance
forall r s t.
(Referable r, HasShortName r, Referable s, HasShortName s,
Referable t, HasShortName t) =>
r -> Sentence -> [s] -> [t] -> ConceptInstance
findMassConstruct ConceptInstance
inputValues (UnitalChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
phrase UnitalChunk
mass) [InstanceModel
eBalanceOnWtr]
[DataDefinition
waterMass, DataDefinition
waterVolume, DataDefinition
tankVolume]
oIDQVals :: [Sentence]
oIDQVals :: [Sentence]
oIDQVals = ([Sentence] -> Sentence) -> [[Sentence]] -> [Sentence]
forall a b. (a -> b) -> [a] -> [b]
map [Sentence] -> Sentence
foldlSent_ [
[NPStruct -> Sentence
D.toSent (NP -> NPStruct
forall n. NounPhrase n => n -> NPStruct
pluralNP (IdeaDict -> NP
forall t. NamedIdea t => t -> NP
the IdeaDict
value)), ConceptInstance -> Sentence
forall r. (Referable r, HasShortName r) => r -> Sentence
fromSource ConceptInstance
inputValues],
[NPStruct -> Sentence
D.toSent (NP -> NPStruct
forall n. NounPhrase n => n -> NPStruct
phraseNP (UnitalChunk -> NP
forall t. NamedIdea t => t -> NP
the UnitalChunk
mass)), ConceptInstance -> Sentence
forall r. (Referable r, HasShortName r) => r -> Sentence
fromSource ConceptInstance
findMass],
[DefinedQuantityDict -> Sentence
forall c. (HasUID c, HasSymbol c) => c -> Sentence
ch (DataDefinition
balanceDecayRate DataDefinition
-> Getting DefinedQuantityDict DataDefinition DefinedQuantityDict
-> DefinedQuantityDict
forall s a. s -> Getting a s a -> a
^. Getting DefinedQuantityDict DataDefinition DefinedQuantityDict
forall d. DefinesQuantity d => Getter d DefinedQuantityDict
Getter DataDefinition DefinedQuantityDict
defLhs), DataDefinition -> Sentence
forall r. (Referable r, HasShortName r) => r -> Sentence
fromSource DataDefinition
balanceDecayRate]
]
funcReqs :: [ConceptInstance]
funcReqs :: [ConceptInstance]
funcReqs = [ConceptInstance
inputValues, ConceptInstance
findMass, ConceptInstance
checkWithPhysConsts, [Sentence] -> ConceptInstance
oIDQConstruct [Sentence]
oIDQVals,
[InstanceModel] -> ConceptInstance
calcValues [InstanceModel]
noPCMOutputs, [InstanceModel] -> ConceptInstance
outputValues [InstanceModel]
noPCMOutputs]
noPCMOutputs :: [InstanceModel]
noPCMOutputs :: [InstanceModel]
noPCMOutputs = [InstanceModel
eBalanceOnWtr, InstanceModel
heatEInWtr]