Giả sử tôi có một số chức năng chungCung cấp một cơ quan chức năng khác nhau cho một hàm tổng quát dựa trên loại
genericFunc :: a -> b
genericFunc x = doSomeHardWork
Nhưng đối với một loại đặc biệt, có một cách hiệu quả hơn mà genericFunc
thể được thực hiện.
genericFunc :: ParticularType -> b
genericFunc x = doSomeEasyWork
cách tốt nhất để kết hợp hai cơ quan chức năng vào cùng genericFunc
là gì, như vậy mà khi sử dụng trên ParticularType
, nó sẽ doSomeEasyWork
, nhưng khi được sử dụng trên các loại khác, nó sẽ doSomeHardWork
? Tôi đặc biệt loại trừ tùy chọn sử dụng tên khác hoặc các mô-đun khác.
Tôi tin rằng điều này có thể được thực hiện với một typeclass, nhưng tôi quan tâm nhiều hơn đến các giải pháp sử dụng pragmas ngôn ngữ. Tôi có một ý tưởng mơ hồ rằng điều này có thể được thực hiện với pragmas ngôn ngữ nhưng tôi không có ý tưởng làm thế nào. Điểm thưởng nếu bạn so sánh và đối chiếu các cách tiếp cận này và/hoặc bất kỳ phương pháp tiếp cận nào có thể khác.
Lấy cảm hứng mơ hồ khi nghĩ về câu hỏi này: [Nếu có gì đó không phải là danh sách] (http://stackoverflow.com/questions/ 8463777/if-something-is-a-list-in-haskell) –