2016-04-22 58 views
6

Tôi đang trải qua some Haskell documentation, và tìm thấy báo cáo kết quảLàm thế nào để sử dụng loại nhà xây dựng theo hình thức ghi vào

Bạn có thể khai báo một constructor (cho cả chủng loại và số liệu) là một nhà điều hành ghi, và điều này có thể làm cho mã của bạn dễ đọc hơn nhiều.

tôi có thể sử dụng constructor dữ liệu ở dạng trung tố như dưới đây:

Prelude> data List a = Empty | a :-> (List a) deriving Show 
Prelude> 
Prelude> let var1 = 10 :-> Empty 
Prelude> let var2 = 20 :-> var1 
Prelude> let var3 = 30 :-> var2 
Prelude> 
Prelude> var1 
10 :-> Empty 
Prelude> 
Prelude> var2 
20 :-> (10 :-> Empty) 
Prelude> 
Prelude> var3 
30 :-> (20 :-> (10 :-> Empty)) 

Câu hỏi của tôi là làm thế nào để sử dụng loại nhà xây dựng theo hình thức ghi vào, ai đó có thể cho tôi một ví dụ để hiểu được điều này?

+0

'Int \ 'Hoặc \' chuỗi'? –

Trả lời

7
> :set -XTypeOperators 
> data a :-> b = C (a -> b) 
> :t C id 
C id :: b :-> b 

Hãy nhớ rằng tên của nó phải bắt đầu với : (xấp xỉ, : được coi là "hoa").

Nếu không, hãy sử dụng backticks, như trong a `T` b.

4

Để mở rộng về câu trả lời @ chi, với phiên bản gần đây GHC, cú pháp của TypeOperators đã thay đổi một chút: tên constructor loại mà nếu không sẽ ghi vào kiểu biến tên (tức là những biểu tượng mà không có một : hàng đầu) vẫn đang phân loại là loại constructor tên, có nghĩa là các công trình đoạn mã sau và xác định một ghi vào loại constructor +:

{-# language TypeOperators #-} 

data a + b = L a | R b 
Các vấn đề liên quan