2012-03-04 32 views
12

tôi cập nhật GHC hôm nay và chương trình nhỏ của tôi ngừng làm việc:Ngắt cập nhật GHC 7.4 haskell98?

https://github.com/BrisFunctional/misere-oxo/blob/master/OXO/misere.hs

GHC tại là phiên bản 7.4.1-2 và từ những gì tôi cố gắng hiểu nó bây giờ mặc định để haskell2010 tiêu chuẩn, thay vì haskell98. (Như tôi có thể nhìn thấy từ đầu ra của danh sách GHC-pkg):

haskell2010-1.1.0.1 
(haskell98-2.0.0.1) 

Vì vậy, tôi đã thay đổi "Danh sách nhập khẩu" của tôi để "nhập khẩu Data.List" mà tôi nghĩ là vấn đề duy nhất nhưng bây giờ tôi nhận được như sau :

misere.hs:1:1: Not in scope: `System.Environment.withArgs' 

nơi nào xuất phát từ khi tôi thậm chí không bao giờ nhập hệ thống.Môi trường? Bất kỳ gợi ý nào? Cảm ơn

EDIT: Tôi đã cập nhật phiên bản trên github để phản ánh lỗi này. và thực sự sử dụng Data.List ghc biên dịch tập tin một cách hoàn hảo, do đó, nó runhaskell tạo ra vấn đề này ..

+1

Bạn đã thử biên dịch bằng 'ghc -XHaskell98' chưa? – nominolo

+0

tùy chọn đó không tồn tại trên ghc của tôi, tôi đã thực sự tìm kiếm thứ gì đó tương tự .. –

Trả lời

14

Bạn không cần phải chỉ thay đổi List để Data.List, mà còn Random-System.Random và nhập getArgs từ System.Environment (nhưng vào lúc này, các mã sử dụng không getArgs hay bất cứ điều gì từ System.Random, vì vậy trong thời gian này, bạn cũng có thể loại bỏ những nhập khẩu).

Mô-đun không phân cấp cũ chỉ có thể truy cập từ gói haskell98, không còn tương thích với base nữa. Điều đó có nghĩa là sử dụng mô-đun haskell98 cũng yêu cầu ẩn rõ ràng base trên dòng lệnh hoặc không liệt kê base trong trường phụ thuộc của tệp .cabal.

Tôi là một chút ngạc nhiên bởi các thông báo lỗi, tôi mong chờ nó nói

Could not find module `System' 
It is a member of the hidden package `haskell98-2.0.0.1'. 

nhưng sự khác biệt đó có thể là một điều không minh bạch của runhaskell.

+0

Rất tiếc phiên bản đã được trên liên kết không phải là cùng tôi đã thực sự làm việc trên, tôi đã đẩy phiên bản hiện tại trên github và đó được cho tôi lỗi hiển thị trước. –

+0

Thật lạ lùng. Tôi không gặp phải lỗi nào khi chạy phiên bản mới hoặc với runhaskell hoặc trực tiếp từ trình bao, và không có lý do gì cho lỗi đó trong tệp. Báo cáo 'runhaskell --version' là gì? Không phải là tôi mong đợi bất cứ điều gì, nhưng 'runghc 7.4.1', nhưng tôi muốn chắc chắn. –

+0

Có phiên bản chính xác, tôi đã thử trên một máy khác với phiên bản trước của GHC, và mọi thứ hoạt động tốt ... Có lẽ tôi sẽ thử cài đặt lại tất cả các gói liên quan đến haskell trên Archlinux của tôi và xem nó có hoạt động không . –

2

Đầu tiên, tôi nghĩ bạn sử dụng System.Environment.withArgs vì getArgs, sử dụng withArgs. Hackage.Haskell page for System.Environment

Hãy thử nhập withArgs, và có thể toàn bộ System.Environment.

Thứ hai, có thể là trường hợp List được sử dụng để có nhiều hơn Data.List hiện có. Bạn có thể muốn bao gồm toàn bộ Prelude thay vì chỉ Data.List.

Và để trả lời câu hỏi trong tiêu đề, mọi cập nhật của GHC mở rộng Haskell98. Và một số ngôn ngữ pragma thậm chí phanh một số chi tiết cụ thể Haskell98. Nhưng hầu hết các thay đổi trong thư viện đều gây ra vấn đề và không phải GHC tự cập nhật.

Hy vọng rằng tôi đã cho bạn đủ để giải quyết vấn đề.

+0

Như tôi đã viết ở trên những điều này không phải là vấn đề nữa, và chương trình biên dịch tốt, lỗi đó đến từ runhaskell .. –

6

Nếu chương trình của bạn là tinh khiết Haskell98 bạn có thể sử dụng invokation GHC sau:

ghc -package haskell98 -hide-package base 

Về lâu dài, tuy nhiên, nó sẽ là tốt hơn nếu bạn nâng cấp ít nhất đến tên mô-đun thứ bậc. Sử dụng Hoogle để tìm hiểu tên của mô-đun. Ví dụ: http://www.haskell.org/hoogle/?hoogle=withArgs liệt kê System.Environment làm mô-đun xuất.

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