Мне нужно обернуть голову вокруг государственной монады в haskell, и у меня есть некоторые проблемы с этим. Задача состоит в реализации функции countConcat, которая объединяет строку с государственной монадой и функцией extractCC, которая получает результат этой функции.String concatenation with haskell state monad
Так extractCC ((return 0) >>= countConcat "a" >>= countConcat "b" >>= countConcat "c")
уступит (3, «ABC»)
Насколько я понимаю countConcat бы вид функции манипулятора и extractCC должна содержать какую-то runState, верно?
Любые подсказки или источники, которые меня достают в правильном направлении, высоко ценятся. (I've был через вики и раздел learnyouahaskell, но все еще чувствовал себя довольно глупо с этим)
Попробуйте написать без использования государства первого, то есть как функция 'String -> (Int, String) -> (Int, String) '. Затем снова посмотрите на объяснение состояния, чтобы увидеть, как эта функция отображается в монаде. Также начальным состоянием будет '(0," ")' (в первом 'return'). –
Спасибо за ввод, я уже пробовал моделировать функцию без состояния, что было довольно легко. Моя проблема более подходит для подписи countConcat и реализации оператора bin для работы с цепочкой состояний. – floAr