我有 function smallStep :: Command -> Data -> Either StepError Data,我想bigStep :: [Command] -> Data -> Either StepError Data使用它,具有以下语义:
bigStep [] data = Right data
bigStep c:cs data = do
data' <- bigStep cs data
smallStep c data'
这并不复杂,但如果smallStep有 type Command -> Data -> Data,我会bigStep简单地实现 as bigStep commands data = foldr data smallStep commands。
当然,我也想在foldr这里使用。我该怎么做呢?foldM被提升了foldl,并且反转列表听起来不是一个非常好的主意。