Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

flatMap ignoring the result

I was wondering if there exists a function (in scala or cats) which omits the result within flatMap. E.g.

Some("ignore this").ignoreArgumentFlatMap(Some("result"))

which would be the same as

Some("ignore this").flatMap(_ => Some("result"))
like image 403
Nicolas Heimann Avatar asked Jan 29 '20 08:01

Nicolas Heimann


1 Answers

It is called >> in cats.

scala> import cats.implicits._
import cats.implicits._

scala> Option("ignore this") >> Some("result")
res14: Option[String] = Some(result)

The documentation explicitly says

Alias for fa.flatMap(_ => fb).

Unlike *>, fb is defined as a by-name parameter, allowing this method to be used in cases where computing fb is not stack safe unless suspended in a flatMap.

There's also productR or *>.

scala> Option("ignore this").productR(Some("result"))
res15: Option[String] = Some(result)

scala> Option("ignore this") *> Some("result")
res16: Option[String] = Some(result)

Like the doc said its argument is not by-name though. So it's more or less equivalent to

val x0 = Some("result")
Some("ignore this").flatMap(_ => x0)

There's productREval if you want an alternative evaluation strategy.

like image 121
Jasper-M Avatar answered Nov 05 '22 08:11

Jasper-M