2011-09-19 41 views
7

Tôi chỉ tình cờ gặp gói OneTuple khi tấn công. Tôi muốn biết mục đích của nó, tôi chắc chắn tác giả đã không tạo ra nó chỉ vì niềm vui của nó. Vì vậy, khi điều này có thể hữu ích? Nó khá rõ ràng những gì nó làm, nhưng không phải khi người ta sẽ sử dụng nó.Khi nào thì muốn sử dụng OneTuple?

Vì vậy, bất kỳ ai biết bất kỳ ví dụ thú vị nào khi bạn có thể hưởng lợi từ điều này? Hoặc có lẽ cho thấy vẻ đẹp toán học đằng sau nó?

+1

"Tôi chắc chắn tác giả đã không tạo ra nó chỉ vì niềm vui của nó" - bạn có thể đánh giá thấp tính hài hước của cộng đồng Haskell ở đây. – MatrixFrog

+0

Con ếch nói gì. Xem danh mục gói acme để biết ví dụ về các gói không có lý do thực sự cho hiện tại. –

Trả lời

3

Nó gần giống như Identity đơn nguyên, mà thường được sử dụng như là cơ sở của một chồng đơn nguyên biến, ngoại trừ việc kể từ OneTuple sử dụng data thay vì newtype nó có giá trị dưới bổ sung.

Thật thú vị vì nó có ý nghĩa là ví dụ tầm thường nhất của hầu hết các loại lớp mà nó triển khai. Tuy nhiên, tôi không thấy nhiều việc sử dụng thực tế cho nó.

+2

Tôi chỉ thấy sử dụng thực tế trong việc tạo ra một lớp bổ sung của indirection, ví dụ để an toàn thunk bên trong từ đang được đánh giá. – fuz

2

Tôi nghĩ đó là trò đùa, như gói don't. Điều đó nói rằng, OneTuple sẽ thêm một giá trị mới vào bất kỳ loại nào (ngược với Maybe, bổ sung hai: NothingJust undefined hoặc undefined tùy thuộc vào cách thuyền của bạn chuyển động). Vì vậy, nếu nó bao giờ biến ra bạn cần điều đó, bạn biết đi đâu ...

+0

'không' có vẻ khá hữu ích cho mục đích gỡ lỗi - ví dụ nếu bạn muốn" bình luận "một số thao tác đơn điệu. – fuz

+2

Tôi sử dụng toán tử '--' cho điều đó :-) – sclv

4

Giả sử bạn có một kiểu chữ (hơi ngớ ngẩn) hoạt động trên bộ dữ liệu. Bạn có một phiên bản cho (a,a), một phiên bản cho (a,a,a). Bạn cũng muốn một cá thể cho một giá trị duy nhất. Nhưng bạn không thể chỉ tạo một thể hiện cho a vì nó sẽ chồng chéo lên mọi thứ khác! Tuy nhiên, bạn có thể tạo một phiên bản cho OneTuple a.

Bây giờ typeclass là một chút vô ích, nhưng nó dễ dàng để tưởng tượng một typeclass gần giống như nó nhưng hữu ích hơn. Trong thực tế, đây chính là việc sử dụng các Only trong thư viện mysql bos': http://hackage.haskell.org/packages/archive/mysql-simple/0.2.0.2/doc/html/Database-MySQL-Simple-QueryResults.html

3

này chắc chắn là không nhất một trò đùa, giống như việc thực hiện bản sắc đơn nguyên không phải là một trò đùa. Không giống như loại đồng bằng a, bạn nhận được tất cả các phiên bản hữu ích và bạn nhận được phần bổ sung dưới cùng, điều này mang đến bộ tấu đơn lẻ gần hơn với ngữ nghĩa của các loại bộ dữ liệu khác.

Một trường hợp sử dụng cho điều này, giống như đơn nguyên danh tính, khái quát hóa. Bạn có một hàm ứng dụng/đơn điệu, trong đó có một loại functor đa hình. Ví dụ: nhiều gói hữu ích như điều tra viên hỗ trợ hoạt động trên một đơn vị do người dùng chọn. Các ngữ nghĩa hơi khác nhau của OneTuple (so với Identity) có thể rất hữu ích, khi bạn có phụ thuộc dữ liệu phức tạp hoặc muốn tận dụng sự lười biếng bổ sung, mà Identity không cung cấp cho bạn.

Các vấn đề liên quan