Я читал Learn You Руководство Haskell по монаде состояния , но у меня возникли проблемы с его пониманием, так как пример стека не мог скомпилироваться. В руководстве он использовал следующий фрагмент кода:
import Control.Monad.State
type Stack = [Int]
pop :: State Stack Int
pop = State $ \(x:xs) -> (x,xs)
push :: Int -> State Stack ()
push a = State $ \xs -> ((),a:xs)
Хотя я понимаю, что он должен делать, он не скомпилируется. Понятия не имею почему. Сообщение об ошибке:
Stack.hs:6:7: Not in scope: data constructor `State'
Stack.hs:9:10: Not in scope: data constructor `State'
Это не имеет смысла для меня, так как "State", насколько мне известно, на самом деле конструктор данных, определенный как
newtype State s a = State { runState :: s -> (a,s) }
Является ли руководство "неправильным", и если да, то как мне это исправить?