Tôi hiểu lý do tại sao role system and annotations yêu cầu thông số gia đình loại (và dữ liệu) mới có vai trò nominal
.Vai trò và nhóm dữ liệu danh nghĩa
Vì vậy, tôi mong đợi khi tôi tuyên bố
data family CoordinateRepresentation ty a :: *
rằng ty
và a
sẽ nhận được nominal
vai trò. (Ví dụ thực tế của tôi là một gia đình dữ liệu liên quan, nhưng vì tôi không nghĩ rằng nó thay đổi bất cứ điều gì tôi bỏ qua thêm tiếng ồn đi kèm với điều đó.)
Điều tôi không mong đợi là khi tôi đổi nó thành
data family CoordinateRepresentation ty :: * -> *
là đối số loại thứ hai chưa được đặt tên vẫn nhận được vai trò nominal
.
Tại sao điều này? Nó có thể không an toàn có được một vai trò representational
, bởi vì không phải bất kỳ data instance CoordinateRepresentation ... = ...
phải tạo ra một nhà xây dựng mới? Làm thế nào mà nhà xây dựng đó có cơ hội sử dụng tham số của nó tại một vai trò nominal
theo cách mà trình biên dịch không thể nhìn thấy? Mặc dù đó là một hệ thống mở và có biên dịch riêng biệt, tôi vẫn không hiểu.
Ah, tôi hiểu. Tôi hy vọng rằng cú pháp thứ hai sẽ giới hạn phần "khớp mẫu" của họ kiểu đối số đầu tiên và yêu cầu kết quả '* -> *' có nghĩa là "bình thường", nhưng đó không phải là trường hợp. –