Commit 3186e4c4 authored by Bas Lijnse's avatar Bas Lijnse

Merge branch '169-what-to-do-if-the-programmer-specified-duplicate-actions' into 'master'

Print a warning on stderr in step with duplicate actions

Closes #169

See merge request !91
parents 9024fd43 859370fa
......@@ -14,9 +14,12 @@ import iTasks.Internal.Tonic.Shares
import iTasks.Internal.Client.Override
from iTasks.SDS.Combinators.Common import sdsFocus, sdsSplit, sdsTranslate, toReadOnly, mapRead, mapReadWriteError, mapSingle
from iTasks.WF.Combinators.Common import ifStable
from iTasks.Internal.SDS import write, read, readRegister, modify
import iTasks.WF.Tasks.System
import StdList, StdBool, StdTuple
from StdFunc import o
import qualified Data.Map as DM
import qualified Data.Queue as DQ
......@@ -76,8 +79,23 @@ where
(ExceptionResult e, iworld) = (ExceptionResult e, iworld)
(DestroyedResult, iworld) = (DestroyedResult, iworld)
removeDupBy :: (a a -> Bool) [a] -> [a]
removeDupBy eq [x:xs] = [x:removeDupBy eq (filter (not o eq x) xs)]
removeDupBy _ [] = []
step :: !(Task a) ((Maybe a) -> (Maybe b)) [TaskCont a (Task b)] -> Task b | TC a & JSONDecode{|*|} a & JSONEncode{|*|} a
step (Task evala) lhsValFun conts = Task eval
step task fun c
= if (length conts <> length c)
(step` (traceValue "Duplicate actions in step") (\_->Nothing) [OnValue (ifStable \_->step` task fun conts)])
(step` task fun conts)
where
conts = removeDupBy actionEq c
actionEq (OnAction (Action a) _) (OnAction (Action b) _) = a == b
actionEq _ _ = False
step` :: !(Task a) ((Maybe a) -> (Maybe b)) [TaskCont a (Task b)] -> Task b | TC a & JSONDecode{|*|} a & JSONEncode{|*|} a
step` (Task evala) lhsValFun conts = Task eval
where
eval event evalOpts (TCInit taskId ts) iworld
# (taskIda,iworld) = getNextTaskId iworld
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment