2014-11-17 17 views
8

changes işlevi, Frameworks t => Behavior t a -> Moment t (Event t (Future a)) tipindedir. Future özetidir ve onu kullanan tek bir işlev vardır (reactimate').Neden "dönüşler" döndürülüyor "Olay t (Gelecek a)"

Ancak, kolayca aşağıdaki işlevi yazabilirsiniz:

changes' :: Frameworks t => Behavior t a -> Moment t (Event t a) 
changes' b = fmap (fmap const b <@>) (changes b) 

normal (non Future) olay olsun.

Bu işlevde bir sorun mu var? Değilse, orijinal changes işlevinin neden daha kısıtlayıcı bir türü var?

cevap

4

changes işlevi, tanımladığınız changes' işlevinden farklı değerler döndürür.

zaman t0 değiştirilebilir olur stepper (veya accumB) tarafından tanımlanan bir davranışı göz önünde bulundurun: önemli nokta şudur. Davranış şu anda hangi değere sahip? Yanıt, bu davranış tüm zamanlar için yeni değer üzerinde değişiklik, t> t0 ve daha eski zaman t0 zamanında eski değerine sahip olmasıdır. Başka bir deyişle, changes' işlevi, değerleri değişiklik sırasındaki Davranış'ın eski değerleri olan bir olayı döndürür. Buna karşılık, changes işlevi yeni ("gelecek") değerlerini döndürür. recursion ile ilgili çeşitli nedenlerle, türünde yeni değerler reactimate' aşamasına kadar erişilememesi için sarılmıştır.

DÜZENLEME: Tobias gösterim için bir resim çekti:

+0

mantıklı. Göstermek için bir [resim] (http://i.imgur.com/tVRDv2r.png) çizdim. –

+0

Cevaben buna bağlı. :-) –

İlgili konular