나는 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)
내가하는 일을 이해하고 있지만 컴파일되지 않습니다. 나는 이유를 모른다. 오류 메시지는이 사실, 내 지식입니다 "주"때문에, 나에게
newtype State s a = State { runState :: s -> (a,s) }
로 정의 된 데이터 생성자를, 말이 안 가이드 "잘못"인가
Stack.hs:6:7: Not in scope: data constructor `State'
Stack.hs:9:10: Not in scope: data constructor `State'
, 그렇다면 어떻게 수정해야합니까?
'Control.Monad.State'는'State' 생성자를 export하지 않고'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에서 잘 실행되기 때문에 이상합니다. –