Giáo sư của bạn có thể đang sử dụng phiên bản GHC cũ hơn. Dòng bạn đã đăng sử dụng một tính năng gần đây đã bị xóa. Các giải pháp có thể là:
Xóa Eq a =>
và viết data Shape a = Shape a
.
Như GHC cho biết, hãy cung cấp cờ -XDatatypeContexts
để bật lại tính năng đã loại bỏ.
Cụ thể hơn: Eq a =>
phần khai báo kiểu của bạn được gọi là một bối cảnh datatype. Chức năng duy nhất của nó là hạn chế kiểu của hàm tạo Shape
, do đó thay vì Shape :: a -> Shape a
bạn nhận được Shape :: Eq a => a -> Shape a
. Nó không giúp bạn tiết kiệm từ việc phải viết Eq a
trong các chữ ký loại liên quan đến Shape
s, và thực sự thậm chí sẽ yêu cầu bạn viết chúng khi bạn không cần thiết. Nó đã từng hữu ích khi các trường nghiêm ngặt trong các kiểu dữ liệu yêu cầu một ràng buộc lớp, nhưng tính năng đó đã bị loại bỏ từ lâu.
Tóm lại, việc xóa ngữ cảnh hầu như luôn là cải tiến đối với chương trình của bạn, vì vậy chúng đã bị xóa khỏi tiêu chuẩn ngôn ngữ Haskell 2011. Vì GHC 7.0.1 đã có một tùy chọn để tắt chúng và kể từ 7.2.1 nó đã được mặc định.
Nguồn
2013-09-21 16:34:13
Bản sao có thể có của [Cách sửa lỗi "Ngữ cảnh kiểu dữ liệu bất hợp pháp" (sử dụng -XDatatypeContexts)?] (Http://stackoverflow.com/questions/22622399/how-to-fix-illegal-datatype-context-use-xdatatypecontexts) – wizzup