2013-04-09 21 views
10

Tôi đã vô tình phát hiện ra rằng đây là một mã một cách hoàn hảo biên soạn:Tại sao các lớp học có thể được sử dụng làm thông số kiểu và những gì cho?

class SomeClass a 

someValue :: Maybe (SomeClass a) 
someValue = undefined 

Tôi chỉ quen thấy các lớp học trong những hạn chế loại, vì vậy tôi không hiểu tại sao mã này typechecks và mục đích của những gì sử dụng các lớp như vậy.

Tôi đang sử dụng GHC 7.6.2.

+0

Bạn có bật bất kỳ tiện ích mở rộng GHC nào không? Với các loại ràng buộc được bật, tôi hy vọng bạn sẽ nhận được loại không phù hợp, tức là 'Có thể :: * -> *' so với 'SomeClass :: * -> Constraint'. Các lớp và loại chia sẻ cùng một không gian tên nếu bộ nhớ phục vụ cho tôi, và đó là một lỗi kiểu tốt nhất, vì vậy tôi không chắc chắn tại sao nó sẽ được trình biên dịch chấp nhận. –

+0

@ C.A.McCann No. Không. Chỉ cần một 'nấc thang' đơn giản của một tệp có nội dung như trong câu hỏi. –

+0

Vì tò mò, điều gì sẽ xảy ra nếu bạn thay thế 'undefined' bằng 'Nothing'? –

Trả lời

11

Đó là một lỗi trong GHC-7.6.2. Nó phải là một lỗi loại. Vui lòng báo cáo.

+4

Biến thành đã được sửa: http://hackage.haskell.org/trac/ghc/ticket/7825#comment:1 –

3

Lỗi.

A.hs: 3: 21: Lớp 'SomeClass' được sử dụng như một loại

In the type signature for `someValue': 
+0

Quên đề cập đến. Tôi đang sử dụng GHC 7.6.2 –

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