Có ý tưởng về số what the Comonad typeclass is in Haskell, tôi đã nghe về Comonad Store. Nhưng nhìn vào Control.Comonad.Store.Lazy, tôi thực sự không hiểu. Nó có nghĩa là gì? Nó là gì? Tôi đã nghe nói rằng Store = CoState, dual của State Monad. Điều đó nghĩa là gì?Cửa hàng comonad là gì?
Trả lời
Sẽ dễ dàng hơn nhiều nếu bạn xem định nghĩa của StoreT itself.
Bạn có thể coi đó là "địa điểm" trong cấu trúc lớn hơn. Ví dụ: lens chỉ là a -> Store b a
; bạn nhận được giá trị của trường b và một hàm b -> a
để đặt giá trị mới trở lại ngữ cảnh lớn hơn.
Xét nó trong hình thức đơn giản, không biến thế của nó:
data Store s a = Store (s -> a) s
instance Functor (Store s) where
fmap f (Store g s) = Store (f . g) s
instance Extend (Store s) where
duplicate (Store f s) = Store (Store f) s
instance Comonad (Store s) where
extract (Store f s) = f s
tức duplicate
thay đổi s -> a
thành một s -> Store s a
mà chỉ trả về "cập nhật" diễn ra sau khi thay thế các giá trị, và extract
phục hồi bản gốc một bằng cách đặt giá trị trở lại cấu trúc lớn hơn.
Theo như mối quan hệ của nó đối với Nhà nước đi, bạn có thể nhìn vào nó như thế này:
type State s a = s -> (a, s)
type Store s a = (s -> a, s)
Với định nghĩa sau đây của cửa hàng,
data Store s a = Store { peek :: s -> a, pos :: s }
Tôi thích nghĩ về một Store
như một nhà kho lớn chứa đầy các giá trị loại a
. Mỗi giá trị loại a
được bỏ vào vị trí được gắn nhãn bằng giá trị chỉ mục của loại s
. Cuối cùng có một xe nâng đỗ tại vị trí pos
. Xe nâng có thể được sử dụng để extract
giá trị loại a
từ cửa hàng bằng cách kéo giá trị ra khỏi vị trí đỗ xe. Bạn có thể sử dụng seek
để chuyển xe nâng đến vị trí tuyệt đối mới hoặc sử dụng seeks
để di chuyển xe nâng đến vị trí tương đối mới. Để cập nhật tất cả các giá trị của việc sử dụng cửa hàng fmap
. Cuối cùng, extend f
tương tự như fmap
ngoại trừ thay vì f :: a -> a'
, chúng tôi có f :: Store s a -> a'
cho phép chức năng cập nhật không chỉ có quyền truy cập vào giá trị đang được cập nhật mà còn cấp quyền truy cập vào vị trí của giá trị và quyền truy cập vào giá trị của mọi thứ khác trong cửa hàng. Nói cách khác, extend
sử dụng giá trị cộng với ngữ cảnh xung quanh để thực hiện cập nhật.
Tương tự tính toán sẽ là suy nghĩ của một đĩa cứng lớn với các giá trị được lưu trữ ở các vị trí khác nhau, cộng với một đầu đậu ở một vị trí cụ thể.
- 1. Cửa hàng tham chiếu là gì?
- 2. bộ đệm cửa hàng là gì?
- 3. Cửa hàng phiên được gọi là gì?
- 4. Ví dụ Comonad trong Scala
- 5. Cửa hàng thư mục mac os/Library là gì?
- 6. Cửa sổ Android là gì?
- 7. Cách sử dụng tốt nhất của các cửa hàng tài liệu là gì?
- 8. Lợi ích của Cửa hàng khóa-giá trị trên Bigtable là gì?
- 9. Điều Tìm kiếm hình ảnh SF này trên cửa hàng trực tuyến của tôi là gì?
- 10. Câu hỏi Javascript - "cửa sổ" là gì?
- 11. Điều khiển không cửa sổ là gì?
- 12. Cập nhật cửa sổ TCP là gì?
- 13. Cửa sổ lambda của LinqPad là gì?
- 14. Cassandra là cửa hàng phiên dưới tải nặng
- 15. 'Ngân hàng' đăng ký nghĩa là gì?
- 16. "Dòng đơn đặt hàng" là gì?
- 17. Cửa hàng Android SQLite
- 18. Đá quý giỏ hàng tốt cho Rails là gì?
- 19. Grid.ShowGridLines trong cửa sổ ứng dụng cửa hàng
- 20. URL cửa hàng trong mysql
- 21. Cửa hàng chứng chỉ Windows
- 22. Trạng thái đóng cửa hiện tại trong Java là gì?
- 23. Window.jQuery và cửa sổ. $ Có nghĩa là gì?
- 24. Cách xử lý chính xác cửa sổ WPF là gì?
- 25. Đóng cửa PHP trong các câu lệnh IF là gì?
- 26. Điều gì là đặc biệt về đóng cửa?
- 27. Thuật toán cửa sổ trượt là gì? Ví dụ?
- 28. lstat() thay thế trong cửa sổ là gì?
- 29. Tương đương fadvise/madvise trên cửa sổ là gì?
- 30. Cách hiệu quả để kết hợp hai Cửa hàng liên tục dữ liệu lõi iOS là gì?
Chỉ cần mở rộng kết nối giữa Nhà nước và Cửa hàng, tất cả các đơn vị phát sinh từ thành phần của các functors phụ. Nó thường được biết rằng các functors '(r -> _)' (aka Reader) và '(_, r)' (cũng làm việc lộn xộn, nhưng không phù hợp với cách trình bày thông thường của State trong Haskell, và không thể là một Ví dụ Functor trong Haskell) là adjoint, và nếu bạn soạn chúng một cách ('s -> (_, s)') bạn sẽ nhận được một đơn nguyên, và nếu bạn soạn chúng theo cách khác ('(s -> _, s) ') bạn sẽ nhận được một comonad. – copumpkin
@copumpkin: Đó là '(_, r)' không thể là Functor, phải không? '(r, _)' chỉ là 'instance Functor ((,) r)'. – ehird
Vâng, xin lỗi, tôi đã chỉnh sửa sai ý kiến cha mẹ đó :) – copumpkin