私はLearn You a Haskell's guide on the state monadを読んでいましたが、スタックの例がコンパイルできなかったので、理解できませんでした。私はそれを行うことになっているものを理解しますが、それはコンパイルされません状態モナドとlearnyouahaskell.com
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) }
として定義されたデータコンストラクタは、「間違っている」ガイドですもしそうなら、私はそれをどのように修正するのですか?
'Control.Monad.State'は' State'コンストラクタをエクスポートせず、 'state'(小文字の' s')を使用します。 – Vitus
@Vitusニース、私は[その機能](http://hackage.haskell.org/packages/archive/transformers/latest/doc/html/Control-Monad-Trans-State-Lazy.html#v)を知らなかった:州)が輸出されました。私はあなたがコメントではなく答えとして書くべきだと思う。 – danr
@Vitus:彼のコードは実際にコンパイルされ、WindowsのGHCI 6.12.3でうまく動作するので、それは奇妙です。 –