2015-02-21 19 views
9

Sum được xác định trong cơ sở 4.7.0.2 không có trường hợp Functor. Tại sao?Tại sao Tổng và Sản phẩm không phải là Functors

Ví dụ: các loại được xác định trong gói semigroupsFunctor, ApplicativeMonad trên ví dụ: Min, hoạt động giống như tính xác thực - có ý nghĩa với tôi.

Trả lời

7

Tôi tin rằng lý do chính không phải là Functor trường hợp là bạn chưa gửi đánh giá mã để làm như vậy. Bạn có thể gửi vé trên Trac, sau đó gửi đánh giá mã trên Phabricator. Luồng công việc Phabricator ưa thích (sử dụng Arcanist), cùng với các chi tiết khác, có thể được tìm thấy here.

Trong khi bạn đang thực hiện điều đó, bạn có thể cũng nên tạo các phiên bản đó là ApplicativeMonad. Bạn cũng nên thêm FoldableTraversable trường hợp cho chúng trong lần lượt Data.FoldableData.Traversable.

Nếu bạn muốn tôi đoán lý do tại sao không ai khác đã làm điều này:

Trong khi SumProduct có thể giữ những thứ của bất kỳ loại, Monoid trường hợp chỉ có ý nghĩa cho Num trường. Các loại fmap do đó cảm thấy một chút kỳ quặc chung chung. Điều này, tuy nhiên, không thực sự là một lý do chính đáng để không làm cho chúng Functor trường hợp.

+1

Trường hợp sử dụng của tôi cho 'Functor' là ví dụ: 'fromIntegral <$> s'. Và tôi đoán việc thay đổi thứ gì đó trong 'base' không chỉ là gửi một bản vá: https://wiki.haskell.org/Library_submissions – phadej

+1

@phadej, điều tôi muốn nói là bạn đúng; bạn cần gửi email danh sách thư viện. Nhưng nó gần như chắc chắn sẽ được chấp thuận. Có một cái nhìn tổng quát rằng nếu có chính xác một cách hợp lý để tạo một kiểu một thể hiện của một lớp, thì điều đó nên được thực hiện tại điểm định nghĩa để tránh các trẻ mồ côi. – dfeuer

+0

Tôi đặt cược này là cố ý. Nó đi ngược lại tinh thần của 'Functor' nếu nó chỉ có ý nghĩa để kết thúc với một thể hiện' Num' bên trong và không có cách nào để thể hiện sự hạn chế đó với lớp 'Functor' mà' base' đi kèm. –

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