2015-02-22 33 views
5

Tôi có kiến ​​thức cơ bản về Haskell (vì vậy hãy tha thứ cho tôi nếu câu hỏi của tôi có vẻ tầm thường đối với người bán hàng ở đây) và gần đây đã xem xét cú pháp của Haskell. Trong Haskell 2010 report chỉ có một nơi mà từ khóa "gõ" được sử dụng:Quy tắc ngữ pháp cho mã Haskell này là gì?

topdecl ::= "type" simpletype "=" type 

Và như có thể được nhìn thấy, luôn luôn có một "=" là bắt buộc. Trong một tập tin Haskell, tôi thấy đoạn mã này:

type Key m :: * 

lấy từ TrieMap.hs dòng 61.

mà không tuân thủ các quy tắc. Tôi nghi ngờ đây là một phần mở rộng của GHC hoặc một cái gì đó tương tự . Ai đó có thể chỉ ra cho tôi ngữ pháp nào quy tắc đoạn mã này tuân theo? BTW, tôi không tìm thấy các quy tắc ngữ pháp cho các phần mở rộng và phải đoán nhiều trong số chúng, có tài liệu nào đó ở đâu đó không?

Trả lời

7

Đó là số associated type family declaration, một phần của tiện ích mở rộng TypeFamilies.

Về cơ bản, nó được sử dụng bên trong một khai báo lớp để cho biết rằng lớp đó có một loại liên quan đến mỗi cá thể của nó.

Tôi không nhớ bất kỳ địa điểm nào đã đặt ngữ pháp BNF độc đáo cho tiện ích mở rộng, mặc dù tôi đã từng tìm thấy GHC's Happy grammar trong kho lưu trữ của nó.

+1

Cảm ơn! Tôi nghĩ từ ngữ pháp của Happy, tôi có thể tìm ra những gì đang diễn ra, nhưng những ngữ pháp LALR này rất đau đớn. Rất ngạc nhiên khi một ngôn ngữ được thiết kế bởi các học giả không có ngữ pháp BNF cho các phần mở rộng của nó! – Wickoo

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