Sorunun there numaralı telefondan sorulmasını biliyorum ama düzgün bir yanıtın olduğuna inanamıyorum.Kısa devre VE IO Monad içinde
Ben bir (& &) içindeki yan etkiye gizlemek için iyi değil ama benim durumumda yan etki sadece outstide dünyada bir şey (bir dosyanın varlığını, vb değişiklik süresini kontrol kullanıcı a sormak kontrol ediyoruz anlıyorum evet/hayır quistion).
Peki, böyle bir şeye yol açma yolu nedir, bu nedenle cond1 öğesi yanlışsa, cond2 yürütülmez.
cond1, cond2 :: IO bool
main = do
cond <- liftM2 (&&) con1 con2
if cond
then result1
else result2
Ben cond <- all [con1, con2]
veya eşdeğeri gibi bir şey bekliyordum, ama bir şey bulamıyorum.
Güncelleme
Ben manuel çözümün bir sürü görebilirsiniz. Hala bu işlevin bir yerde bulunmadığına şaşıyorum. Tembelliğin değerlendirilmesinin bir avantajı sadece &&
kodunda kısa kodlama yapmak değil, zorunlu modundayken Haskell, &&
kısa devre bile yapamaz. Her ne kadar tüm çözüm bir şekilde ve değerlendirmeyi kısa devre yaptırmak için kullanıyor olsa da. Genel bir tembel liftM2
yapmanın bir yolu yok mu?
tanımlanmıştır, bu fark: xs: 've M, [] = TRUE ve daha sonra' ve M, (x geri) = do b <- x; b ve o zaman eğer xMs yanlış döndüyse false ' – ErikR
Aşağıda söylediğim gibi 'veM' monad-döngüler kitaplığında tanımlanır. Burada http://hackage.haskell.org/package/monad-loops gibi şeyler bulmayı bekler. -0.4.2.1/docs/Control-Monad-Loops.html # v: andM – Michael
@Arthur güncellemeyi görmedi. – mb14