Давайте представим фиктивное подмножество Brainf*ck:
+
увеличивает счетчик
-
уменьшает счетчик
Простая программа:
program = "++++--" -- should evaluate to 2
И функция оценки состояния:
eval :: Char -> State Int Char
eval '+' = do x <- get
put (x + 1)
return 'I'
eval '-' = do x <- get
put (x - 1)
return 'D'
Как бы вы оценили программу? (Похоже на fold
для меня, но я не могу понять это, и мне кажется, что это не способ сделать это правильно...)