module Drasil.SWHSNoPCM.DataDefs where --exports all of it

import Language.Drasil
import Theory.Drasil (DataDefinition, ddENoRefs)

import Drasil.SWHS.Assumptions (assumpVCN)
import Drasil.SWHS.DataDefs (balanceDecayRate, balanceDecayRateQD, tankVolume, 
  tankVolumeQD, waterMass, waterMassQD)
import Drasil.SWHS.Unitals (tankVol, wVol)

qDefs :: [SimpleQDef]
qDefs :: [SimpleQDef]
qDefs = [SimpleQDef
waterMassQD, SimpleQDef
waterVolumeQD, SimpleQDef
tankVolumeQD, SimpleQDef
balanceDecayRateQD]

dataDefs :: [DataDefinition] 
dataDefs :: [DataDefinition]
dataDefs = [DataDefinition
waterMass, DataDefinition
waterVolume, DataDefinition
tankVolume, DataDefinition
balanceDecayRate]

waterVolumeQD :: SimpleQDef
waterVolumeQD :: SimpleQDef
waterVolumeQD = forall c e. (Quantity c, MayHaveUnit c) => c -> e -> QDefinition e
mkQuantDef UnitalChunk
wVol Expr
waterVolumeEqn

waterVolumeEqn :: Expr
waterVolumeEqn :: Expr
waterVolumeEqn = forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
tankVol

waterVolumeNotes :: Sentence
waterVolumeNotes :: Sentence
waterVolumeNotes = [Sentence] -> Sentence
foldlSent [String -> Sentence
S String
"Based on" Sentence -> Sentence -> Sentence
+:+. forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> Sentence
refS ConceptInstance
assumpVCN, forall c. (HasUID c, HasSymbol c) => c -> Sentence
ch UnitalChunk
tankVol,
  String -> Sentence
S String
"is defined in", forall r.
(HasUID r, HasRefAddress r, HasShortName r) =>
r -> Sentence
refS DataDefinition
tankVolume]

waterVolume :: DataDefinition
waterVolume :: DataDefinition
waterVolume = SimpleQDef
-> Maybe Derivation -> String -> [Sentence] -> DataDefinition
ddENoRefs SimpleQDef
waterVolumeQD forall a. Maybe a
Nothing String
"waterVolume_nopcm" 
  [Sentence
waterVolumeNotes]