我有 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
,并且反转列表听起来不是一个非常好的主意。