Monadik kavrayışları kullanarak aşağıdaki f
, g
ve h
işlevlerini göz önünde bulundurun. f
, g
ve h
tüm imzaya sahipScala'nın monadik zincirleme deneyini deneyin
for {
x <- List (11, 22, 33, 44, 55)
y <- f (x)
z <- g (y)
a <- h (z)
} yield a
ise:
Int => Option [ Int ]
sonra amaçlı anlama ince derler. Ben Try [ Int ]
tarafından Option [ Int ]
yerine Ancak eğer Scala'nın tip inferencer hattı aşağıdaki hata iletisiyle
y <- f (x)
şikayetçi.
error: type mismatch;
found : scala.util.Try[Int]
required: scala.collection.GenTraversableOnce[?]
y <- f (x)
Neden? Hem Option [ _ ]
ve Try [ _ ]
, monadlardır (ya da olmalıdır) ve kabataslak olarak düzgün çalışmalıdır.
Burada daha kısa bir demo 'için {x <- Liste (1,2,3); y <- Bazı (x)} verim y' iyidir, oysa {x <- Liste (1,2,3); y <- deneyin {x}} verim y 'yukarıda belirtilen bir hata üretir. – Val