Я иду через государственную монады here, и я пытаюсь выполнить:Ошибка конструктора данных при реализации государственной монады?
import Control.Monad.Reader
import Control.Monad.Writer
import Control.Monad.State
type Stack = [Int]
pop :: State Stack Int
pop = State $ (x : xs) -> (x, xs)
Однако я получаю следующее сообщение об ошибке:
"Data constructor not in scope:
State :: ([t0] -> (t0, [t0])) -> State Stack Int
Perhaps you meant one of these:
‘StateT’ (imported from Control.Monad.State),
variable ‘state’ (imported from Control.Monad.State)"
я упускаю что-то основное здесь?
Спасибо Алек, очень ясный - я рад, что я не буду суетливым в моей старости! –
[Связанный учебник устарел, а не упрощает.] (Http://hackage.haskell.org/package/mtl-1.0/docs/Control-Monad-State.html # t: State) Было время, когда люди беспокоились о том, что трансформаторы, наложенные на «Identity», имели затраты времени исполнения по сравнению с определением соответствующей монады напрямую, и поэтому многие библиотеки (включая mtl) отправили как монаду, так и ее трансформатор. В конце концов, аргумент об удвоении кода/бремени обслуживания против этого выиграл над аргументом производительности для него. –