'İsteğe bağlı' bir van Laarhoven temsili var mı


15

Birçok optik türü van Laarhoven temsiline sahiptir.

Örneğin, a Lenstipi Lens s t a b şu şekilde temsil edilebilir:

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

Benzer şekilde, a Traversal, aşağıdakiler için Functorkısıtlamayı değiştirerek benzer bir şekilde temsil edilebilir Applicative:

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

Monocle ve Arrow gibi çeşitli optik çerçeveleri denilen türü tanımlar Optional.

Monocle Optik hiyerarşi içinde Optional arasındaki uyan LensveTraversal

Anladığım kadarıyla: Bir Eğer Traversalbir gibidir Lensolabileceğini birçoğuna sıfır hedefleri, daha sonra bir Optionalbir gibidir Lensolabileceğini sıfır bire hedefler.

Monocle'da, Optionalbir çift işlev olarak tanımlanır:

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

Monocle kaynak kodundaki yorumlar , Optional"zayıf PLensve zayıf olarak PPrism" göstermenin de mümkün olduğunu göstermektedir

OptionalVan Laarhoven fonksiyonunu temsil etmek mümkün müdür ?

Yanıtlar:


10

Functor / Uygulamalı / Monad hiyerarşisi daha hassas olsaydı bunu temsil etmenin bir yolu olurdu. Özellikle:

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

AffineSınıf hiyerarşisinde düzgün bir şekilde yazıldıysa , türün muhtemelen mercek kitaplığında adlandırılacağını unutmayın .


1
Bu, Functor Hiyerarşisini sıfırdan yazdığım ve bu nedenle onunla ne istersem yapabileceğim "sadece eğlence için" Scala Optik Kütüphanesi olan kullanım durumum için tamamen iyi. Bunun ben de bir arasında başka tip bir sınıf olsaydı düşündürmektedir doğru düşünme mıyım Functorve Applicativebirlikte liftA2, ancak hiçbir saf, daha sonra bununla bir optik tanımlarsınız birçok birinden hedefleri? Bunun bir adı var mı?
Joe

1
Bunu düşündürüyor. Optiğin ne olacağı hakkında hiçbir fikrim yok.
Carl

4
@Joe Bu ara sınıf Apply"semigroupoids" paketinde çağrılır . hackage.haskell.org/package/semigroupoids-5.3.3/docs/…
danidiaz

2
... ve lenspaketteki ilgili optik denirTraversal1
Benjamin Hodgson

@Carl Bunun type Optional s t a bgerçekten bu optik için doğru temsil olduğunu ve tüm uygun yasaların geçerli olduğunu nasıl doğrulayabiliriz ? Bu büyülü bir numara gibi görünüyor. Neden oldu Pointed, değil Copointedmi? Başka bir optik için doğru profunctor temsilini nasıl tahmin edebiliriz?
winitzki
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.