ideas-1.0: src/Main/IDEAS.hs
-----------------------------------------------------------------------------
-- Copyright 2011, 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)
--
-----------------------------------------------------------------------------
module Main.IDEAS (useIDEAS) where
import Common.Exercise
import Common.Id
import Common.Utils (Some(..))
import Control.Arrow
import Main.Options
import Service.DomainReasoner
import Service.ServiceList
import qualified Domain.LinearAlgebra as LA
import qualified Domain.LinearAlgebra.Checks as LA
import qualified Domain.Logic as Logic
import qualified Domain.Math.ExerciseList as Math
import qualified Domain.RelationAlgebra as RA
useIDEAS :: DomainReasoner a -> IO a
useIDEAS action = runDomainReasoner $ do
-- version information
setVersion shortVersion
setFullVersion fullVersion
-- exercises
addExercises exercises
addAliases aliases
-- services
addServices serviceList
addExerciseService exerciselistS
-- views
addViews Math.viewList
-- feedback scripts
flags <- liftIO serviceOptions
setScriptDir (scriptDir flags)
addScripts scripts
-- domain checks
addTestSuite $ do
sequence_ Math.testSuiteList
LA.checks
-- do the rest
action
exercises :: [Some Exercise]
exercises =
[ -- logic and relation-algebra
Some Logic.dnfExercise
, Some Logic.dnfUnicodeExercise
-- , Some Logic.proofExercise
, Some RA.cnfExercise
-- linear algebra
, Some LA.gramSchmidtExercise
, Some LA.linearSystemExercise
, Some LA.gaussianElimExercise
, Some LA.systemWithMatrixExercise
-- regular expressions
-- , some RE.regexpExercise
] ++ Math.exerciseList
aliases :: [(Id, Id)]
aliases = 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")
]
scripts :: [(Id, FilePath)]
scripts =
[ (getId Logic.dnfExercise, "logic.txt")
, (getId Logic.dnfUnicodeExercise, "logic.txt")
] ++ Math.scriptList