ideas-0.6: src/Service/Submit.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)
--
-- Diagnose a term submitted by a student. Deprecated (see diagnose service).
--
-----------------------------------------------------------------------------
module Service.Submit (submit, Result(..), getResultState) where
import Common.Transformation
import Common.Context
import qualified Service.Diagnose as Diagnose
import Service.Diagnose (Diagnosis, diagnose)
import Service.TypedAbstractService
-- Note that in the typed setting there is no syntax error
data Result a = Buggy [Rule (Context a)]
| NotEquivalent
| Ok [Rule (Context a)] (State a) -- equivalent
| Detour [Rule (Context a)] (State a) -- equivalent
| Unknown (State a) -- equivalent
fromDiagnose :: Diagnosis a -> Result a
fromDiagnose diagnose =
case diagnose of
Diagnose.Buggy r -> Buggy [r]
Diagnose.NotEquivalent -> NotEquivalent
Diagnose.Similar _ s -> Ok [] s
Diagnose.Expected _ s r -> Ok [r] s
Diagnose.Detour _ s r -> Detour [r] s
Diagnose.Correct _ s -> Unknown s
submit :: State a -> a -> Result a
submit state new = fromDiagnose (diagnose state new)
getResultState :: Result a -> Maybe (State a)
getResultState result =
case result of
Ok _ st -> return st
Detour _ st -> return st
Unknown st -> return st
_ -> Nothing