module Drasil.DblPend.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]
: (IdeaDict -> IdeaDict) -> [IdeaDict] -> [IdeaDict]
forall a b. (a -> b) -> [a] -> [b]
map IdeaDict -> IdeaDict
forall c. Idea c => c -> IdeaDict
nw [IdeaDict
rod, IdeaDict
horizontal, IdeaDict
vertical,
  IdeaDict
pendMotion, IdeaDict
horizontalPos, IdeaDict
verticalPos, IdeaDict
horizontalVel,IdeaDict
horizontalAccel, IdeaDict
verticalAccel,
  IdeaDict
verticalVel, IdeaDict
horizontalForce, IdeaDict
verticalForce, IdeaDict
firstRod, IdeaDict
secondRod, IdeaDict
firstObject, IdeaDict
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 :: IdeaDict
rod :: IdeaDict
rod = String -> NP -> IdeaDict
nc String
"rod" (String -> NP
cn' String
"rod")
horizontal :: IdeaDict
horizontal = String -> NP -> IdeaDict
nc String
"horizontal" (String -> NP
cn String
"horizontal") 
vertical :: IdeaDict
vertical = String -> NP -> IdeaDict
nc String
"vertical" (String -> NP
cn String
"vertical") 

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

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

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

progName :: CI
progName :: CI
progName = String -> NP -> String -> [IdeaDict] -> CI
commonIdeaWithDict String
"dblPendulum" (String -> NP
pn String
"Double Pendulum") String
"DblPend" [IdeaDict
physics]