On Tue, Nov 23, 2010 at 6:58 PM, Adam Miezianko <[email protected]> wrote: > I'm working through Learn You a Haskell for Great Good [1] and getting > a compiler error while playing around with some of the code. I have > this: > > -- BEGIN state.hs > import Control.Monad.State > > type Stack = [Int] > > pop :: State Stack Int > pop = State $ \(x:xs) -> (x,xs) > > push :: Int -> State Stack () > push x = State $ \xs -> ((), x:xs) > > stackManip :: State Stack Int > stackManip = do > push 3 > pop > pop > -- END state.hs > > But when I try to load it into ghci I get the following errors: > > Prelude> :load "/home/admi/.pe/state.hs" > [1 of 1] Compiling Main ( /home/admi/.pe/state.hs, interpreted ) > > /home/admi/.pe/state.hs:6:6: Not in scope: data constructor `State' > > /home/admi/.pe/state.hs:9:9: Not in scope: data constructor `State' > Failed, modules loaded: none. > Prelude> > > Now, I'm not exactly sure how to read the documentation for > Control.Monad.State [2] but it seems that newtype State s a = State > {...} defines a constructor, or am I wrong on that point too? So, > what am I missing here? In case it matters, I am using mtl-2.0.1.0 > and ghci 6.12.3. > > [1] http://learnyouahaskell.com/for-a-few-monads-more > [2] http://cvs.haskell.org/Hugs/pages/libraries/mtl/Control-Monad-State.html >
It looks like your documentation doesn't match the library you're using. The documentation for mtl-2.x is here: http://hackage.haskell.org/package/mtl Starting in version 2.0, the mtl package no longer exports a constructor called 'State' - but there is a function 'state' which servers the same purpose. However you might be better served using the 'modify' function. I hope that helps, Antoine > -- > Adam Miezianko > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
