Tôi đã đọc Learn You a Haskell's guide on the state monad, nhưng tôi đã không hiểu được vì ví dụ ngăn xếp không thể biên dịch được. Trong hướng dẫn, anh đã sử dụng đoạn mã sau đây:Đơn vị tiểu bang và 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)
Trong khi tôi hiểu những gì nó phải làm, nó sẽ không biên dịch. Tôi không biết tại sao. Các thông báo lỗi là:
Stack.hs:6:7: Not in scope: data constructor `State'
Stack.hs:9:10: Not in scope: data constructor `State'
Điều này làm cho không có ý nghĩa với tôi, vì "Nhà nước" là, theo tôi biết, trên thực tế một nhà xây dựng dữ liệu, định nghĩa là
newtype State s a = State { runState :: s -> (a,s) }
Là cơ quan chỉ "sai" và nếu có, làm cách nào để khắc phục?
'Control.Monad.State' không xuất phương thức khởi tạo' State', sử dụng 'state' (với chữ thường' s'). – Vitus
@Vitus Đẹp, tôi không biết [chức năng đó] (http://hackage.haskell.org/packages/archive/transformers/latest/doc/html/Control-Monad-Trans-State-Lazy.html#v : state) đã được xuất. Tôi nghĩ bạn nên viết nó như một câu trả lời chứ không phải là một bình luận. – danr
@Vitus: thật kỳ lạ, bởi vì mã của anh ấy thực sự biên dịch và chạy tốt trên GHCI 6.12.3 của tôi trên các cửa sổ. –