มีตัวแทนของ Van Laarhoven ของ `ตัวเลือก '


15

เลนส์หลายประเภทมีการแสดงของ van Laarhoven

ตัวอย่างเช่นLensประเภทLens s t a b สามารถแสดงเป็น:

 Functor f => (a -> f b) -> s -> f t

ในทำนองเดียวกันTraversalสามารถแสดงในลักษณะที่คล้ายกันสลับFunctorข้อ จำกัด สำหรับApplicative:

 Applicative f => (a -> f b) -> s -> f t

กรอบเลนส์หลายประการเช่นMonocleและลูกศรOptionalกำหนดประเภทที่เรียกว่า

ในการสืบทอดของ Monocle Optics นั้น Optionalเหมาะสมระหว่างLensและTraversal

ตามที่ฉันเข้าใจแล้ว: หาก a Traversalเป็นเช่นLensนั้นอาจมีเป้าหมายเป็นศูนย์ถึงหลายเป้าหมายดังนั้นสิ่งนั้นOptionalก็เหมือนเช่นLensนั้นที่มีเป้าหมายเป็นศูนย์ถึงหนึ่งเป้าหมาย

ใน Monocle Optionalหมายถึงคู่ของฟังก์ชั่น:

getOrModify :: s -> Either t a 
set :: (b, s) -> t

ความคิดเห็นในซอร์สโค้ด Monocleแนะนำว่าอาจเป็นไปได้ที่จะแสดงว่าOptional"เป็นที่อ่อนแอPLensและอ่อนแอPPrism"

เป็นไปได้ไหมที่จะใช้แทนOptionalฟังก์ชั่น van Laarhoven?

คำตอบ:


10

จะมีวิธีที่จะเป็นตัวแทนหากลำดับชั้นของ Functor / Applicative / Monad มีความละเอียดยิ่งขึ้น โดยเฉพาะอย่างยิ่ง:

class Functor f => Pointed f where
    pure :: a -> f a

type Optional s t a b = forall f. Pointed f => (a -> f b) -> s -> f t

โปรดทราบว่าอาจมีการตั้งชื่อประเภทนี้Affineไว้ในไลบรารีเลนส์ถ้าเป็นลำดับชั้นอย่างประณีต


1
นี่คือสิ่งที่ดีอย่างสมบูรณ์สำหรับกรณีการใช้งานของฉันซึ่งเป็นห้องสมุด "Scala Optics" ที่สนุก "ฉันได้เขียน Functor Hierarchy จากศูนย์แล้วจึงสามารถทำสิ่งที่ฉันชอบได้ ฉันคิดถูกหรือเปล่าว่าสิ่งนี้ชี้ให้เห็นว่าถ้าฉันมีคลาสประเภทอื่นระหว่างFunctorและApplicativeกับliftA2แต่ไม่มีความบริสุทธิ์นั่นจะกำหนดออปติกที่มีเป้าหมายหนึ่งถึงหลายเป้าหมายหรือไม่ สิ่งนี้มีชื่อหรือไม่?
โจ

1
มันแนะนำว่า ฉันไม่รู้ว่าจะเรียกว่าใยแก้วนำแสงอะไร
คาร์ล

4
@ Joe ชั้นกลางนั้นเรียกว่าApplyในแพ็คเกจ "semigroupoids" hackage.haskell.org/package/semigroupoids-5.3.3/docs/…
danidiaz

2
... และแก้วนำแสงที่เกี่ยวข้องในlensแพ็คเกจเรียกว่าTraversal1
Benjamin Hodgson

@Carl เราจะตรวจสอบได้อย่างไรว่านี่type Optional s t a bเป็นการนำเสนอที่ถูกต้องสำหรับจักษุนั้นและกฎหมายที่เหมาะสมทั้งหมดถือ? ดูเหมือนว่าจะมีเล่ห์เหลี่ยม ทำไมมันPointedและไม่พูดCopointed? สำหรับอีกหนึ่งออปติกที่ให้มาเราจะเดาได้อย่างไรว่าการเป็นตัวแทนของศาสตราจารย์ที่ถูกต้อง?
winitzki
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.