Монада состояния и Learnyouahaskell.com

Я читал Learn You a Haskell's guide on the state monad , но у меня возникли проблемы с его пониманием, так как пример со стеком не смог скомпилировать. В руководстве он использовал следующий фрагмент кода:

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'

Это не имеет для меня смысла, поскольку «Состояние», насколько мне известно, на самом деле является конструктором данных, определенным как

newtype State s a = State { runState :: s -> (a,s) }

Является ли руководство «неправильным», и если да, то как мне исправить Это?

12
задан Undreren 14 March 2012 в 08:08
поделиться