Có sự khác biệt giữa chữ ký loại a -> b -> a và c -> a -> c?


16

Câu hỏi này là một câu hỏi lý thuyết về các hàm Haskell có thể lấy các đối số thuộc bất kỳ loại nào. Có sự khác biệt giữa cách thức chức năng với chữ ký loại của

a -> b -> a 

c -> a -> c 

được khởi tạo? Bất kỳ trợ giúp được đánh giá cao.


6
Không, bạn chỉ cần thay đổi tên của các biến loại . Miễn là bạn không đổi tên một biến thành một biến khác (chẳng hạn như có một xung đột tên), không có vấn đề gì.
Willem Van Onsem

Phụ thuộc vào việc / làm thế nào các biến loại được ràng buộc ở nơi khác.
Bergi

Câu trả lời:


17

Không có sự khác biệt. Kể từ khi a, bcbắt đầu với một chữ thường , đây là những biến . Bạn có thể đổi tên các biến và điều này vẫn giữ nguyên, miễn là hai (hoặc nhiều) biến không " đụng độ ".

Cuộc đụng độ như vậy có thể xảy ra nếu bạn đổi tên một biến sao cho nó có cùng tên với một biến khác hoặc khi bạn đổi tên hai (hoặc nhiều) biến thành cùng một tên mới. Nếu bạn đổi tên biến thành aví dụ thành bđoạn mã đầu tiên, thì chúng ta sẽ nhận được b -> b -> b, nhưng điều đó không giống nhau, từ đó chúng ta thực thi rằng tham số thứ nhất và thứ hai là cùng loại. Trong khi trong chữ ký loại của bạn, chúng tôi có quyền tự do chọn hai loại có thể giống nhau, nhưng điều đó là không cần thiết.


16

Không. Hãy nghĩ về a -> b -> anhư This Type -> Another Type -> This Type. Sau đó cả hai phù hợp với mô hình nhất định. Tuy nhiên, một cái gì đó như a -> b -> ckhông phù hợp: This Type -> That Type -> Yet Another Typelà (nói chung) khác nhau; ngoại trừ trường hợp cạnh khi c = a, mang lại mẫu bạn quan tâm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.