Nhiều loại quang học có một đại diện van Laarhoven.
Ví dụ, một Lens
loại Lens s t a b
có thể được biểu diễn dưới dạng:
Functor f => (a -> f b) -> s -> f t
Tương tự a Traversal
, có thể được biểu diễn theo cách tương tự, hoán đổi Functor
ràng buộc cho Applicative
:
Applicative f => (a -> f b) -> s -> f t
Một số khung quang học, chẳng hạn như Monocle và Mũi tên xác định một loại được gọi Optional
.
Trong chế độ bá đạo của Monocle Optional
phù hợp giữa Lens
vàTraversal
Theo tôi hiểu: Nếu a Traversal
giống như Lens
có thể có 0 đối với nhiều mục tiêu, thì một Optional
giống như Lens
có thể có 0 đối với một mục tiêu.
Trong Monocle, Optional
được định nghĩa là một cặp hàm:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Nhận xét trong mã nguồn Monocle cho thấy rằng cũng có thể đại diện cho Optional
"càng ngày càng PLens
yếu PPrism
"
Có thể biểu diễn một Optional
hàm van Laarhoven không?
Functor
vàApplicative
vớiliftA2
, nhưng không thuần túy, thì điều đó sẽ định nghĩa một quang với một đến nhiều mục tiêu? Cái này có tên không?