packages feed

ideas-math-1.0: src/Main.hs

-----------------------------------------------------------------------------
-- Copyright 2013, Open Universiteit Nederland. This file is distributed
-- under the terms of the GNU General Public License. For more information,
-- see the file "LICENSE.txt", which is included in the distribution.
-----------------------------------------------------------------------------
-- |
-- Maintainer  :  bastiaan.heeren@ou.nl
-- Stability   :  provisional
-- Portability :  portable (depends on ghc)
--
-- Main module for feedback services
--
-----------------------------------------------------------------------------
module Main (main) where

import Control.Arrow
import Ideas.Common.Exercise
import Ideas.Common.Id
import Ideas.Common.Utils (Some(..))
import Ideas.Common.Utils.TestSuite
import Ideas.Main.Default
import Ideas.Service.DomainReasoner
import Ideas.Service.ServiceList
import Ideas.Service.Types (Service)
import qualified Domain.LinearAlgebra as LA
import qualified Domain.LinearAlgebra.Checks as LA
import qualified Domain.Logic as Logic
import qualified Domain.Logic.Proofs as Logic
import qualified Domain.Math.ExerciseList as Math
import qualified Domain.RelationAlgebra as RA

main :: IO ()
main = defaultMain ideasMath

ideasMath :: DomainReasoner
ideasMath = describe "Domain reasoner for mathematics and logic" $
   (newDomainReasoner "ideas.math")
      { exercises = myExercises
      , services  = myServices
      , views     = Math.viewList
      , aliases   = myAliases
      , scripts   = myScripts
      , testSuite = myTestSuite
      }

myExercises :: [Some Exercise]
myExercises =
   [ -- logic and relation-algebra
     Some Logic.dnfExercise
   , Some Logic.dnfUnicodeExercise
   , Some Logic.proofExercise
   , Some Logic.proofUnicodeExercise
   , Some RA.cnfExercise
     -- linear algebra
   , Some LA.gramSchmidtExercise
   , Some LA.linearSystemExercise
   , Some LA.gaussianElimExercise
   , Some LA.systemWithMatrixExercise
     -- regular expressions
   -- , some RE.regexpExercise
   ] ++ Math.exerciseList

myServices :: [Service]
myServices = metaServiceList ideasMath ++ serviceList

myAliases :: [(Id, Id)]
myAliases = map (newId *** newId)
   [ ("math.coverup",             "algebra.equations.coverup")
   , ("math.lineq",               "algebra.equations.linear")
   , ("math.lineq-mixed",         "algebra.equations.linear.mixed")
   , ("math.quadreq",             "algebra.equations.quadratic")
   , ("math.quadreq-no-abc",      "algebra.equations.quadratic.no-abc")
   , ("math.quadreq-with-approx", "algebra.equations.quadratic.approximate")
   , ("math.higherdegree",        "algebra.equations.polynomial")
   , ("math.rationaleq",          "algebra.equations.rational")
   , ("math.linineq",             "algebra.inequalities.linear")
   , ("math.quadrineq",           "algebra.inequalities.quadratic")
   , ("math.ineqhigherdegree",    "algebra.inequalities.polynomial")
   , ("math.factor",              "algebra.manipulation.polynomial.factor")
   , ("math.simplifyrational",    "algebra.manipulation.rational.simplify")
   , ("math.simplifypower",       "algebra.manipulation.exponents.simplify")
   , ("math.nonnegexp",           "algebra.manipulation.exponents.nonnegative")
   , ("math.powerof",             "algebra.manipulation.exponents.powerof")
   , ("math.derivative",          "calculus.differentiation")
   , ("math.fraction",            "arithmetic.fractions")
   , ("math.calcpower",           "arithmetic.exponents")
   , ("linalg.gaussianelim",      "linearalgebra.gaussianelim")
   , ("linalg.gramschmidt",       "linearalgebra.gramschmidt")
   , ("linalg.linsystem",         "linearalgebra.linsystem")
   , ("linalg.systemwithmatrix",  "linearalgebra.systemwithmatrix")
   , ("logic.dnf",                "logic.propositional.dnf")
   , ("logic.dnf-unicode",        "logic.propositional.dnf.unicode")
   , ("relationalg.cnf",          "relationalgebra.cnf")
   -- MathDox compatibility
   , ("gaussianelimination"        , "linearalgebra.gaussianelim")
   , ("gramschmidt"                , "linearalgebra.gramschmidt")
   , ("solvelinearsystem"          , "linearalgebra.linsystem")
   , ("solvelinearsystemwithmatrix", "linearalgebra.systemwithmatrix")
   ]

myScripts :: [(Id, FilePath)]
myScripts =
   [ (getId Logic.dnfExercise,         "logic.txt")
   , (getId Logic.dnfUnicodeExercise,  "logic.txt")
   ] ++ Math.scriptList

myTestSuite :: TestSuite
myTestSuite = do
   sequence_ Math.testSuiteList
   LA.checks