notacji do:bez_do :: (Monad m, Alternative m) => m Int -> m Int -> m Int bez_do m1 m2 = m1 >>= \x1 -> m2 >>= \x2 -> guard (x2 /= 0) >> return (x1 / x2)
z_do :: (Monad m, Alternative m) => m Int -> m Int -> m Int z_do m1 m2 = do x1 <- m1 x2 <- m2 guard (x2 /= 0) return (x1 / x2)
Scala W Scali monadą jest każda klasa, która implementuje operacje flatMap oraz unittrait M[A] { def flatMap[B](f: A => M[B]): M[B] }
def unit[A](x: A): M[A]Odpowiednikiem notacji do w Scali jest for comprehensions:def bez_for(m1 : M[Int], m2 : M[Int]) : M[Int] = m1.flatMap(x1 => m2.flatMap(x2 => unit[M](x1 + x2)))
def z_for(m1 : M[Int], m2 : M[Int]) : M[Int] = for { x1 <- m1 x2 <- m2 } yield (x1 + x2)
Przypisy
Kategoria:Programowanie funkcyjne