taşıma hata ile Prizma adlı ben bu oldukça kolay kullanarak Optik temsil edebilirObjektif/
string2int :: String -> Maybe Int
int2string :: Int -> String
dönüşüm fonksiyonları bir çift var diyelim. Ben başarısızlık nedenini temsil etmek istiyorum
stringIntPrism :: Prism String Int
Ancak, iki ayrı fonksiyonlar şeklinde bu tutmak gerekiyordu. biz her zaman bir başarısızlık bir derlemesi başarısız olduğunu varsayabiliriz çünkü bu basit örnekte Maybe
için
string2int :: String -> Validation [ParseError] Int
int2string :: Int -> String`
böylece biz aslında bu bir Ya ya Doğrulama türünü kullanarak kodlamak zorunda değilsiniz, gayet olumlu.
Ancak benim prizma ayrıştırma ek olarak, ben olabilir, öyle ki bir araya bunlar mümkün oluşturma olmak ideal olacaktır
isOver18 :: Int -> Validation [AgeError] Int
isUnder55 :: Int -> Validation [AgeError] Int
bazı doğrulama, gerçekleştirmek istediğiniz, hayal
ageField = isUnder55 . isOver18 . string2Int :: ValidationPrism [e] String Int
Bu, elle inşa etmek için oldukça önemsizdir, ancak bu zaten bunu yapan Lensler/Optikler alanında gizlenen bir şey olabileceği gibi ortak bir kavram gibi görünüyor. Bunu işleyen mevcut bir soyutlama var mı?
tl;
keyfi funktor üzerinde parametreleştirilebilecek kısmi mercek/prizma/iso uygulanması yerine Belki doğrudan bağlı olmak standart bir yolu var mı dr
?.Haskell notasyonu yukarıda daha düz olduğundan beri kullandım, ancak aslında bunu uygulamak için Scala'da Monocle kullanıyorum. Bununla birlikte, ekmett's Lens kütüphanesine özgü bir cevapla mükemmel bir şekilde mutlu olurdum.
Benzer bir soru hakkında bir şekilde bir geri dönüş tartışmasını hatırlıyorum. İçinde, Edward Kmett [kavramından bahsetti] (https: //www.reddit.Normal merceklerle birleştirilebilir halde kalarak hata bilgisini rapor edebilecek "coindexed prizmalar" ın com/r/haskell/comments/34igpj/hypothetical_lens_xml_parsing_that_documents/cqv346w). Görünüşe göre, tip çıkarım sorunları nedeniyle mercek çerçevesine sığdırmak zordu, bu yüzden uygulanmadılar. – danidiaz
Sanırım bir Traversal kavramı burada uygun olacaktır. –