ideas-0.6: src/Domain/Math/Numeric/Exercises.hs
-----------------------------------------------------------------------------
-- Copyright 2010, 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 Domain.Math.Numeric.Exercises
( naturalExercise, integerExercise
, rationalExercise, fractionExercise
) where
import Common.Exercise
import Common.Strategy
import Common.View
import Domain.Math.Expr
import Domain.Math.Numeric.Strategies
import Domain.Math.Numeric.Views
import Domain.Math.Numeric.Generators
import Domain.Math.Examples.DWO1 (calculateResults)
import Common.Context
------------------------------------------------------------
-- Exercises
numericExercise :: LabeledStrategy Expr -> Exercise Expr
numericExercise s = makeExercise
{ status = Alpha
, parser = parseExpr
, equivalence = viewEquivalent rationalView
, strategy = mapRules liftToContext s
}
naturalExercise :: Exercise Expr
naturalExercise = (numericExercise naturalStrategy)
{ description = "simplify expression (natural numbers)"
, exerciseCode = makeCode "math" "natural"
, isReady = (`belongsTo` integerNormalForm)
, examples = concat calculateResults
}
integerExercise :: Exercise Expr
integerExercise = (numericExercise integerStrategy)
{ description = "simplify expression (integers)"
, exerciseCode = makeCode "math" "integer"
, isReady = (`belongsTo` integerNormalForm)
, examples = concat calculateResults
}
rationalExercise :: Exercise Expr
rationalExercise = (numericExercise rationalStrategy)
{ description = "simplify expression (rational numbers)"
, exerciseCode = makeCode "math" "rational"
, isReady = (`belongsTo` rationalNormalForm)
, randomExercise = simpleGenerator (rationalGenerator 5)
}
fractionExercise :: Exercise Expr
fractionExercise = (numericExercise fractionStrategy)
{ description = "simplify expression (fractions)"
, exerciseCode = makeCode "math" "fraction"
, isReady = (`belongsTo` rationalNormalForm)
, randomExercise = simpleGenerator (rationalGenerator 5)
}