Banyak jenis optik memiliki representasi van Laarhoven.
Misalnya, Lens
tipe Lens s t a b
dapat direpresentasikan sebagai:
Functor f => (a -> f b) -> s -> f t
Demikian pula a Traversal
, dapat direpresentasikan dengan cara yang sama, menukar Functor
kendala untuk Applicative
:
Applicative f => (a -> f b) -> s -> f t
Beberapa kerangka kerja optik, seperti Monocle dan Arrow menentukan jenis yang disebut Optional
.
Dalam Optik Monocle, heirarki Optional
cocok untuk Lens
danTraversal
Seperti yang saya pahami: Jika a Traversal
seperti a Lens
yang mungkin memiliki nol hingga banyak target, maka a Optional
seperti a Lens
yang mungkin memiliki nol ke satu target.
Di Monocle, Optional
didefinisikan sebagai sepasang fungsi:
getOrModify :: s -> Either t a
set :: (b, s) -> t
Komentar dalam kode sumber Monocle menunjukkan bahwa mungkin juga untuk mewakili Optional
"sebagai yang lebih lemah PLens
dan lebih lemah PPrism
"
Apakah mungkin untuk mewakili Optional
fungsi van Laarhoven?
Functor
danApplicative
denganliftA2
, tetapi tidak murni, maka itu akan menentukan optik dengan satu ke banyak target? Apakah ini punya nama?Apply
dalam paket "semigroupoids". hackage.haskell.org/package/semigroupoids-5.3.3/docs/…lens
paket disebutTraversal1
type Optional s t a b
memang representasi yang tepat untuk optik itu, dan bahwa semua hukum yang sesuai berlaku? Ini seperti trik sulap. Mengapa ituPointed
dan tidak, katakanlahCopointed
,? Untuk optik lain yang diberikan, bagaimana kita bisa menebak representasi profunctor yang benar?