Giả sử bạn có định nghĩa quy nạp tốt đẹp và bạn muốn xác định nó dưới dạng kiểu dữ liệu trong Haskell. Tuy nhiên, định nghĩa quy nạp của bạn là (như nhiều định nghĩa quy nạp) của một dạng như vậy mà các quy tắc tạo ra yêu cầu 'tiền đề' của chúng để có một cấu trúc nhất định. Ví dụ, giả sử chúng ta có định nghĩa sau đây:Loại bỏ các loại dữ liệu
- nếu
x
là một số nguyên thậm chí, sau đóT x
là một vũ khí, - nếu
x
là một số nguyên lẻ, sau đóS x
là một vũ khí.
Nếu tôi muốn xác định này (dưới dạng đĩa đơn) kiểu dữ liệu trong Haskell, tôi sẽ viết một cái gì đó giống như
data Weapon = T Int | S Int
Rõ ràng, điều này sẽ không làm việc như bây giờ bạn có thể tạo ra T 5
và S 4
, cho ví dụ. Có một cách tự nhiên để vượt qua trên các hạn chế về các đối số constructor, để tôi có thể viết một cái gì đó tương tự như mã trên mà sẽ cung cấp cho các định nghĩa chính xác?
Nhà xây dựng thông minh, chủ yếu.Cấm sử dụng 'T' và' S' trực tiếp và tạo các hàm 'newT' và' newS' để xác minh các số đã qua. –