2012-08-22 15 views
30

Các HList package được dựa trên những gì là bây giờ cổ công nghệ Haskell. Câu hỏi đơn giản là: đưa ra tất cả các tính năng mới tuyệt vời của giá trị phát triển Haskell/GHC 8 năm qua, liệu một HList "hiện đại" có được xây dựng rất khác nhau không? Tôi nhận ra rằng câu trả lời ở đây có thể là không, đối với trường hợp cụ thể của HList, công nghệ được sử dụng sau đó vẫn tạo ra giải pháp thanh lịch nhất."Hiện đại" HList?

Tôi đã đọc nhiều tài liệu được ghi trên trang extensible records, đối thủ cạnh tranh thực sự duy nhất (nghĩa là đối thủ được triển khai dưới dạng thư viện có sẵn trên hackage) là records package. Hoặc có thiếu liên kết từ extensible records?

Trả lời

11

Câu hỏi cho bất kỳ gói nào trong số này là phạm vi mục tiêu của nó. HList thực sự là 5 cách triển khai khác nhau của các nhãn, hai loại bình đẳng, hai kiểu đúc, hai bản ghi/RecordP và biến thể so với lựa chọn TIC. Tất cả đều giống nhau nhưng khác nhau về mức độ dễ sử dụng, tính di động và tiện ích mở rộng được sử dụng.

Tính năng GHC mới hơn (GADT, loại liên kết, loại ràng buộc, loại đa hình, loại singleton) có thể cho phép giảm giá giao dịch hơi khác nhau. Đặc biệt các loại singleton có thể cho phép nhãn tốt hơn, và các loại đa hình có thể cho phép một Typeable/Data/Generics thanh lịch hơn.

Các "kỷ lục" gói bạn liên kết đến phụ thuộc vào "loại" gói phần mềm đó tuyên bố:.

"Haskell không có người hỗ trợ cho subkinds và đa hình subkind Tuy nhiên, gói này có thể được sử dụng để thi đua subkinds thuộc loại * và biến phụ. "

Nhưng điều này không còn đúng nhờ quảng bá loại dữ liệu cho các loại trong phiên bản GHC mới. Vì vậy, gói tháng 1 năm 2012 này có thể đã lỗi thời.

Đối với hồ sơ, có lẽ hệ thống mới sẽ rút ra từ vòng kính đa hình mới nhất: lens và/hoặc lens-family.

+2

Tôi đã thảo luận về mối quan hệ giữa ống kính và hồ sơ mở rộng với Russell (O'Connor) chỉ sáng nay - và nó không rõ ràng. Ống kính là tuyệt vời cho abstracting get/set của một lĩnh vực duy nhất trong một tổng hợp, nhưng ít giỏi đại diện cho tổng hợp chính nó. Trong bất kỳ trường hợp nào, có vẻ như tôi nên gắn bó với HList (bây giờ), và sau đó cố gắng tìm ra số lượng biến thể nào tôi nên chọn để xử lý vấn đề này (đang dịch một số mã O'Caml sử dụng đa hình biến thể VÀ loại hàng VÀ Functors vào Haskell). –

+2

Gần đây tôi đã tạo ra một điều lấy cảm hứng từ HList: đưa ra một điều được chỉ mục-coproduct (TIP) và {handler cho một trong các trường hợp} nó trả về {kết quả của trình xử lý} hoặc {TIP với một kiểu nhỏ hơn} . Xử lý chuỗi cùng với> => giảm trường hợp TIP theo từng trường hợp. Tôi nghĩ vào thời điểm nó sắp xếp mô hình phù hợp với các biến thể đa hình mô phỏng. –