2012-05-11 29 views

Trả lời

16
+10

Được thăng hạng, nhưng với một lời nhắc: ':' * được * cho phép trong các tên toán tử. Nếu đó là ký tự đầu tiên thì toán tử đặt tên cho hàm tạo, nếu không thì nó sẽ đặt tên cho hàm như bình thường. – dave4420

+0

Tôi không biết về điều đó! –

+0

Điều này hoàn toàn điên rồ! Thật tuyệt khi sử dụng bất kỳ ký hiệu Unicode nào có thể, nhưng tiếc là chúng thường rất khó gõ trên bàn phím hiện tại. – Qqwy

27

Từ Haskell 2010 Report §2.4:

ký điều hành được hình thành từ một hoặc nhiều ký tự biểu tượng ...

§2.2 định nghĩa nhân vật biểu tượng như là bất kỳ !#$%&*+./<=>[email protected]\^|-~: hoặc "bất kỳ [ không ascii] Biểu tượng Unicode hoặc dấu chấm câu ".

+2

Điều thú vị là bạn có thể sử dụng Unicode tùy ý. Vì vậy, ví dụ, λ hoặc ⊗ sẽ là các toán tử Haskell hợp lệ? –

+12

Không, 'λ' là một ký tự Unicode, không phải là ký hiệu Unicode hoặc ký tự dấu chấm câu Unicode. Vì vậy, bạn không thể sử dụng nó như một phần của tên toán tử (nhưng bạn có thể sử dụng nó như một phần của một định danh thông thường). – dave4420

+2

Tôi hy vọng bạn có thể sử dụng '⊗' làm toán tử Haskell, nhưng tôi không biết chắc chắn. – dave4420

48

Từ haskell report, đây là cú pháp cho các ký hiệu phép:

special -> (|) | , | ; | [ | ] | `| { | } 
symbol  -> ascSymbol | uniSymbol<special | _ | : | " | '> 
ascSymbol -> ! | # | $ | % | & | * | + | . |/| < | = | > | ? | @ 
       \ |^| | | - | ~ 
uniSymbol -> any Unicode symbol or punctuation 

Vì vậy, biểu tượng là biểu tượng ascii hoặc biểu tượng unicode trừ từ những người trong special | _ | : | " | ', mà được dành riêng (ở đây a | b có nghĩa là "nó có thể a hoặc b "và a<b> có nghĩa là" có thể là mọi thứ trong a ngoại trừ b "). Một vài đoạn văn dưới đây, báo cáo đưa ra định nghĩa hoàn chỉnh cho các nhà khai thác Haskell:

varsym  -> (symbol {symbol | :})<reservedop | dashes> 
consym  -> (: {symbol | :})<reservedop> 
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | => 

ký tự điều hành được hình thành từ một hoặc nhiều nhân vật biểu tượng, như định nghĩa ở trên, và được giải nghĩa từ vựng phân biệt thành hai không gian tên (Mục 1.4):

  • Ký hiệu toán tử bắt đầu bằng dấu hai chấm là hàm tạo.
  • Ký hiệu toán tử bắt đầu bằng bất kỳ ký tự nào khác là số nhận dạng thông thường.

Lưu ý rằng dấu hai chấm của chính nó ":", được dành riêng để sử dụng làm công cụ xây dựng danh sách Haskell; điều này làm cho đồng phục xử lý của nó với các phần khác của cú pháp danh sách, chẳng hạn như "[]" và "[a, b]" .

Ngoài cú pháp đặc biệt cho phủ định tiền tố, tất cả các toán tử là , mặc dù mỗi toán tử infix có thể được sử dụng trong phần để thu hút toán tử được áp dụng một phần (xem Phần 3.5). Tất cả các toán tử infix tiêu chuẩn chỉ là các biểu tượng được xác định trước và có thể được phục hồi.

+6

Có lẽ nên trích dẫn báo cáo [haskell2010] (http://www.haskell.org/onlinereport/haskell2010/haskellch2.html#x7-180002.4) thay vì báo cáo haskell98 những ngày này (mặc dù trong trường hợp này họ nói cùng một điều , theo như tôi thấy). –

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