2013-05-03 50 views
5

Là trải nghiệm đầu tiên của mô-đun, tôi đã nhập Data.List vào GHCi của mình. (Chính xác hơn, tôi đã gõ import Data.List trên GHCi của tôi) Dường như nó hoạt động tốt vì tôi có thể sử dụng một số chức năng mà trước đây tôi chưa có như foldl' trên GHCi của mình.Haskell: Không nằm trong phạm vi: foldl '?

Tôi đã viết haha = foldl' (+) 0 [1..10] trên notepad ++ của mình, và lưu và tải sau đó GHCi nói Not in scope: foldl' mặc dù nó chỉ hoạt động tốt khi tôi nhập foldl' (+) 0 [1..10] trực tiếp trên GHCi của tôi.

Tại sao điều đó và cách tôi có thể xác định các chức năng với foldl' trên sổ ghi chú của mình?

Trả lời

12

Phạm vi trong lời nhắc GHCi không nhất thiết giống với phạm vi trong bất kỳ tệp nào bạn có thể tải từ GHCi. GHCi có khái niệm về phạm vi hiện tại của riêng mình, thường bao gồm sự suy yếu của bất kỳ tệp nào bạn đã tải cùng với bất kỳ mô-đun nào khác mà bạn thêm hoặc bất kỳ thứ gì bạn nhập một cách rõ ràng. (Nó cũng cư xử khác đi nếu tải một tập tin mà không bị thay đổi kể từ khi nó được biên soạn trước, mà vẫn còn bối rối cho tôi ...)

Dù sao, bạn chỉ cần nhập Data.List trong tập tin mã chính nó, ví dụ:

module Main where 

import Data.List 

haha = foldl' (+) 0 [1..10] 

Sau khi thực hiện việc đó, tải tệp sẽ dẫn đến nhập một cách hiệu quả tại dấu nhắc GHCi, vì nó có thể nhìn thấy ở mức cao của mô-đun được tải.

+0

Cảm ơn bạn rất nhiều vì đã trả lời nhanh! – Tengu

+0

Nhân tiện, bạn có thể sử dụng ': load * Foo' để tải GHCI từ nguồn, ngay cả khi có các đối tượng được biên dịch trong thư mục hiện tại. – Carl

+4

Tôi biết nó không tạo ra nhiều sự khác biệt, nhưng tôi sẽ chỉ nhập các chức năng mà tôi quan tâm, ví dụ. 'import Data.List (foldl ')' – chamini2

Các vấn đề liên quan