Tôi là một chút nhầm lẫn như sự khác biệt giữa một loại và một loại dữ liệu trong Haskell.Sự khác biệt giữa loại và loại dữ liệu trong Haskell là gì?
Từ tài liệu tôi gặp phải, tôi có ấn tượng là các khái niệm khác nhau.
Tôi là một chút nhầm lẫn như sự khác biệt giữa một loại và một loại dữ liệu trong Haskell.Sự khác biệt giữa loại và loại dữ liệu trong Haskell là gì?
Từ tài liệu tôi gặp phải, tôi có ấn tượng là các khái niệm khác nhau.
Loại và dữ liệu loại tham khảo chính xác khái niệm tương tự.
Các Haskell từ khóa type
và data
là khác nhau, mặc dù: data
cho phép bạn giới thiệu một kiểu dữ liệu đại số mới, trong khi type
chỉ làm cho một loại từ đồng nghĩa.
Xem chi tiết Haskell wiki.
Cụm từ đôi khi được trộn lẫn, nhưng thường là "loại dữ liệu" đề cập đến loại được giới thiệu sử dụng từ khóa data
, trong đó có các hàm tạo mà bạn có thể khớp mẫu. Đây cũng được gọi là kiểu dữ liệu đại số".
Chỉ cần 'loại' là một thuật ngữ tổng quát hơn mà cũng bao gồm các loại tạo bằng newtype
, các loại chức năng và vân vân.
Vì vậy, sẽ gõ vào riêng của nó bao gồm Integer vv? – user997112
Để hoàn thành bức tranh, có 'newtype' quá Nắm bắt sự khác biệt giữa 'newtype T a = T a' và' dữ liệu T a = T a' là khó, nhưng khá quan trọng .. –
tôi thấy rằng kiểu mới trên một ví dụ.Vì vậy, sự khác biệt trong ví dụ của bạn là gì? – user997112
@ user997112 'newtype' chỉ là một kiểu thời gian biên dịch được sử dụng để tạo ra một loại từ đồng nghĩa, nhưng được xử lý như một kiểu khác. Bạn có thể bọc nó bên trong một' dữ liệu', nhưng nó sẽ thêm một số phí vào lúc chạy. nó rõ ràng với trình biên dịch mà bạn muốn sự phân biệt kiểu, mà không có chi phí thời gian chạy. Câu chuyện dài: http://www.haskell.org/haskellwiki/Newtype – Ptival