2012-04-03 9 views
19

Tôi đang đọc một kiểu dữ liệu sau:': ..' có nghĩa là gì trong Haskell?

data Ne 
    = NVar Id 
    | Ne :.. (Clos Term) 
    | NSplit Ne (Bind (Bind (Clos Term))) 
    | NCase Ne (Clos [(Label, Term)]) 
    | NForce Ne 
    | NUnfold Ne (Bind (Clos Term)) 
    deriving (Show, Eq) 

là gì: .. trong khai báo thành viên thứ hai?

Trả lời

20

Tên của hàm tạo có thể là chữ số-alpha bắt đầu bằng chữ hoa hoặc ký hiệu bắt đầu bằng dấu hai chấm. Trong trường hợp thứ hai, toán tử sẽ được sử dụng phần mềm giống như các hàm infix.

Vì vậy :.. là một constructor ghi vào cho các loại Ne, trong đó có một đối số kiểu Ne (toán hạng bên trái) và một trong những loại Clos Term (toán hạng bên phải).

12

:.. là một trong các hàm tạo cho kiểu dữ liệu đại số Ne. Tên hàm tạo bao gồm dấu câu và bắt đầu bằng : trở thành toán tử kết hợp. Hãy thử điều này:

module Main where 

data List a = Nil 
      | a :.. (List a) 
      deriving Show 

main = print (1 :.. (2 :.. Nil))