Một cách để suy nghĩ về nó là Ord a
và Num a
là đầu vào bổ sung cho các chức năng. Chúng là kiểu đầu vào đặc biệt mặc dù: từ điển. Khi bạn sử dụng chức năng này với một loại cụ thể a
, cũng phải có từ điển có sẵn cho các hoạt động Ord
và Num
trên loại a
.
Bất kỳ chức năng nào sử dụng chức năng có đầu vào từ điển cũng phải có cùng đầu vào từ điển.
foo :: (Num a, Ord a) => a -> t
foo x = loop x someFunc someT
Tuy nhiên, bạn không phải chuyển các từ điển này một cách rõ ràng.Haskell sẽ chăm sóc điều đó cho bạn, giả sử có một từ điển có sẵn. Bạn có thể tạo một từ điển với một ví dụ về kiểu chữ typeclass.
instance Num MyType with
x + y = ...
x - y = ...
...
này tạo ra một từ điển cho Num
hoạt động trên MyType
, do đó MyType
thể được sử dụng bất cứ nơi nào mà Num a
là một đầu vào cần thiết (giả sử nó đáp ứng các yêu cầu khác, tất nhiên).
Nguồn
2012-02-04 21:44:19
Điều đáng nói là mặc dù chúng tôi gọi chúng là "từ điển", chúng là các bảng băm chứ không phải là các bản ghi hàm. Chúng giống như các bảng v trong các ngôn ngữ hướng đối tượng, ngoại trừ chúng không gắn liền với các giá trị. – hammar