-- | Defines domains of knowledge for use in Drasil.
module Drasil.Metadata.Domains where

import Drasil.Database (mkUid)
import Language.Drasil (IdeaDict, idea, idea', cn')

-- | Various domains that are used in Drasil. May have an abbreviation.
compScience, softEng, mathematics, progLanguage, physics, civilEng,
  materialEng, documentc, knowledgemng :: IdeaDict
-------------------------------------------------------------------------------
--  IdeaDict     |   |      id       |       term                    |  abbreviation
-------------------------------------------------------------------------------
-- | For ideas, concepts, or terms related to Computer Science.
compScience :: IdeaDict
compScience  = UID -> NP -> String -> IdeaDict
idea  (String -> UID
mkUid String
"compScience")    (String -> NP
cn' String
"Computer Science")      String
"CS"
-- | For ideas, concepts, or terms related to Software Engineering.
softEng :: IdeaDict
softEng      = UID -> NP -> String -> IdeaDict
idea  (String -> UID
mkUid String
"softEng")        (String -> NP
cn' String
"Software Engineering")  String
"SE"
-- | For ideas, concepts, or terms related to Mathematics.
mathematics :: IdeaDict
mathematics  = UID -> NP -> IdeaDict
idea' (String -> UID
mkUid String
"mathematics")    (String -> NP
cn' String
"Mathematics")
-- | For ideas, concepts, or terms related to Programming Languages.
progLanguage :: IdeaDict
progLanguage = UID -> NP -> IdeaDict
idea' (String -> UID
mkUid String
"progLanguage")   (String -> NP
cn' String
"Programming Language")
-- | For ideas, concepts, or terms related to Physics.
physics :: IdeaDict
physics      = UID -> NP -> IdeaDict
idea' (String -> UID
mkUid String
"physics")        (String -> NP
cn' String
"Physics")
-- | For ideas, concepts, or terms related to Civil Engineering.
civilEng :: IdeaDict
civilEng     = UID -> NP -> IdeaDict
idea' (String -> UID
mkUid String
"civilEng")       (String -> NP
cn' String
"Civil Engineering")
-- | For ideas, concepts, or terms related to Material Engineering.
materialEng :: IdeaDict
materialEng  = UID -> NP -> IdeaDict
idea' (String -> UID
mkUid String
"materialEng")    (String -> NP
cn' String
"Material Engineering")
-- | For ideas, concepts, or terms related to Documents.
documentc :: IdeaDict
documentc    = UID -> NP -> String -> IdeaDict
idea  (String -> UID
mkUid String
"documentc")      (String -> NP
cn' String
"Document")              String
"Doc"
-- | For ideas, concepts, or terms related to Knowledge Management.
knowledgemng :: IdeaDict
knowledgemng = UID -> NP -> IdeaDict
idea' (String -> UID
mkUid String
"knowledgemng")   (String -> NP
cn' String
"Knowledge Management")