module Drasil.DblPendulum.Concepts where

import Language.Drasil
import Data.Drasil.Domains (physics)
import Data.Drasil.Concepts.Documentation (first, second_, object)
import Data.Drasil.Theories.Physics (newtonSLRQD)
import Language.Drasil.Chunk.Concept.NamedCombinators (compoundNC)
import Data.Drasil.Concepts.Physics (pendulum, motion, position, velocity, force, acceleration)


concepts :: [IdeaDict]
concepts :: [IdeaDict]
concepts = ModelQDef -> IdeaDict
forall c. Idea c => c -> IdeaDict
nw ModelQDef
newtonSLRQD IdeaDict -> [IdeaDict] -> [IdeaDict]
forall a. a -> [a] -> [a]
: (NamedChunk -> IdeaDict) -> [NamedChunk] -> [IdeaDict]
forall a b. (a -> b) -> [a] -> [b]
map NamedChunk -> IdeaDict
forall c. Idea c => c -> IdeaDict
nw [NamedChunk
rod, NamedChunk
horizontal, NamedChunk
vertical,
  NamedChunk
pendMotion, NamedChunk
horizontalPos, NamedChunk
verticalPos, NamedChunk
horizontalVel,NamedChunk
horizontalAccel, NamedChunk
verticalAccel,
  NamedChunk
verticalVel, NamedChunk
horizontalForce, NamedChunk
verticalForce, NamedChunk
firstRod, NamedChunk
secondRod, NamedChunk
firstObject, NamedChunk
secondObject] 
  [IdeaDict] -> [IdeaDict] -> [IdeaDict]
forall a. [a] -> [a] -> [a]
++ (ConceptChunk -> IdeaDict) -> [ConceptChunk] -> [IdeaDict]
forall a b. (a -> b) -> [a] -> [b]
map ConceptChunk -> IdeaDict
forall c. Idea c => c -> IdeaDict
nw [ConceptChunk]
defs

rod, horizontal, vertical :: NamedChunk
rod :: NamedChunk
rod = String -> NP -> NamedChunk
nc "rod" (String -> NP
cn' "rod")
horizontal :: NamedChunk
horizontal = String -> NP -> NamedChunk
nc "horizontal" (String -> NP
cn "horizontal") 
vertical :: NamedChunk
vertical = String -> NP -> NamedChunk
nc "vertical" (String -> NP
cn "vertical") 

pendMotion, horizontalPos, verticalPos, horizontalVel, verticalVel, horizontalForce, verticalForce,
  horizontalAccel, verticalAccel, firstRod, secondRod, firstObject, secondObject:: NamedChunk
pendMotion :: NamedChunk
pendMotion      = ConceptChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC ConceptChunk
pendulum ConceptChunk
motion
horizontalPos :: NamedChunk
horizontalPos   = NamedChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
horizontal ConceptChunk
position
verticalPos :: NamedChunk
verticalPos     = NamedChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
vertical ConceptChunk
position
horizontalVel :: NamedChunk
horizontalVel   = NamedChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
horizontal ConceptChunk
velocity
verticalVel :: NamedChunk
verticalVel     = NamedChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
vertical ConceptChunk
velocity
horizontalAccel :: NamedChunk
horizontalAccel = NamedChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
horizontal ConceptChunk
acceleration
verticalAccel :: NamedChunk
verticalAccel   = NamedChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
vertical ConceptChunk
acceleration
horizontalForce :: NamedChunk
horizontalForce = NamedChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
horizontal ConceptChunk
force
verticalForce :: NamedChunk
verticalForce   = NamedChunk -> ConceptChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
vertical ConceptChunk
force
firstRod :: NamedChunk
firstRod        = NamedChunk -> NamedChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
first NamedChunk
rod
secondRod :: NamedChunk
secondRod       = NamedChunk -> NamedChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
second_ NamedChunk
rod
firstObject :: NamedChunk
firstObject     = NamedChunk -> NamedChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
first NamedChunk
object
secondObject :: NamedChunk
secondObject    = NamedChunk -> NamedChunk -> NamedChunk
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> NamedChunk
compoundNC NamedChunk
second_ NamedChunk
object

defs :: [ConceptChunk]
defs :: [ConceptChunk]
defs = [ConceptChunk
arcLen]

arcLen :: ConceptChunk
arcLen :: ConceptChunk
arcLen = String -> NP -> String -> ConceptChunk
dcc "arc length" (String -> NP
nounPhraseSP "arc length") "the distance between two points on a curve"

progName :: CI
progName :: CI
progName = String -> NP -> String -> [IdeaDict] -> CI
commonIdeaWithDict "pendulumTitle" (String -> NP
pn "Pendulum") "DblPendulum" [IdeaDict
physics]