2013-09-17 37 views
10

Các nhược điểm cho ScopedTypeVariables, nếu có? Tại sao nó không được bật theo mặc định? Liệu nó dẫn đến suy luận tồi tệ hơn? Có trường hợp cạnh nào không? Việc triển khai GHC có khó khăn hơn không?Nhược điểm đối với ScopedTypeVariables

+1

Nó không được bật theo mặc định vì lý do tương tự mà mọi tiện ích khác không được bật theo mặc định - nó không phải là một phần của tiêu chuẩn Haskell. –

+0

Nếu đó là bất lợi duy nhất cho phần mở rộng, hãy thay đổi điều này thành câu trả lời và tôi sẽ chấp nhận nó. Tôi biết rằng nó không nằm trong tiêu chuẩn, nhưng tôi không muốn thiên vị câu hỏi. –

+3

Tôi chỉ có thể nghĩ về các ưu điểm với 'ScopedTypeVariables', ngoại trừ một biến chứng nhỏ của trình kiểm tra loại. – augustss

Trả lời

8

Nó không được bật theo mặc định vì cùng một lý do mà mọi tiện ích mở rộng khác không được bật theo mặc định - nó không phải là một phần của tiêu chuẩn Haskell.

Như đã nói - điều này đòi hỏi nhiều logic hơn trong trình kiểm tra loại nhưng tôi không nghĩ rằng bất kỳ ai coi nó là gánh nặng.

10

Nó cũng vì nó thay đổi ngữ nghĩa của một chương trình (kết hợp với các phần mở rộng khác). Hãy xem xét

{-# LANGUAGE RankNTypes #-} 
foo :: forall a . (a -> a) -> (a -> a) 
foo = bar 
    where 
    bar :: a -> a 
    bar = id 

Nó biên dịch tốt, nhưng với ScopedTypeVariables thậm chí không biên dịch được.

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