2013-04-02 21 views
9

Objektif paketini kullanıyorum ve aşağıdaki sorun için kolay bir çözüm bulunması gerektiğini düşünüyorum. Sık sık buKısmi alıcıları mercek kitaplığı kullanarak oluşturma

böyle bir şey yapmak istediğim için yani bazı harita (veya herhangi At örneği) ve onun değer türü hakkında bir lens, ben, bir alıcı istiyorum

aMap :: Map Int a 
aLens :: Simple Lens a b 

g :: Getter (Map Int a) (Maybe b) 

Bu edilir olduğunu düşünelim tabii

x :: Maybe b 
x = aMap^.at 3.g.aLens 

amaçlanan semantik aksi at arama ve Nothing bunu yapmak yaparken bir Just değeri elde olmanın.

biri ayar yerine yani g yerine

newMap = at 3.traverse.aLens .~ whatever $ aMap 

ama alıyorsanız değil traverse eserler oluyor. Gözden geçirdiğim kütüphaneyi bir an önce hazırladım mı yoksa tek bir ifadede bunu başarmanın başka bir yolu var mı?

cevap

4

at ile lensler oluşturmaya çalışırken benzer bir sorunla karşılaşıyorum.

at'un ekleme/silme davranışına ihtiyaç duymuyorsanız, ix'u kullanma hakkında ne düşünüyorsunuz?

x :: Maybe b 
x = aMap ^? ix 3 . aLens 
3

Ben

x :: Maybe b 
x = aMap^.at 3 <&> (^.aLens) 
biraz kafa karıştırıcı

ve ben aradığı şeyi tam olarak değil ile gelip başardı ama işi alır ettik.

İlgili konular