[Haskell-cafe] Confused about missing data constructor

Adam Miezianko adam at theorylounge.org
Tue Nov 23 19:58:45 EST 2010

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

-- 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
-- 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.

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-
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

Adam Miezianko

More information about the Haskell-Cafe mailing list