As soon as I sent this, I think I hit on the answer. There's no getting away from having to write a strategy like this:
evalActualsWith :: Strategy [ActualShift] -> Strategy User
evalActualsWith strat user = do
actuals' <- strat $ actuals user
return $ user { actuals = actuals' }
But once I've written that it's a simple case of the following:
parActuals :: Strategy User
parActuals = evalActualsWith $ rparWith $ evalTraversable rseq
updateActuals :: User -> User
updateActuals user = users { actuals = newActuals } `using` parActuals
where ...
I think that's the same thing, right?
Cheers,