VB
Таким образом, pure положит ( f a b ) в аппликативный функтор?
Size: a a a
VB
A
VB
A
VB
AP
A
AP
AP
A
AP
AP
<*>
не гарантирует порядокAP
>>=
— гарантируетA
f :: World -> [State World ()]
f currentWorld = do
whatToDo <- possibleActions
let updatedWorld = execState whatToDo currentWorld
if gotResult updatedWorld
then pure whatToDo
else (whatToDo >>) <$> f updatedWorld
A
>>=
— гарантируетA
AP
AP
>>
AP
Applicative
для Writer
, при котором порядок записи будет обратным, легко. Потому что <*>
не запрещаетAP