Scalaz имеет point
(в scalaz.syntax.applicative
), а также имеет псевдоним pure
(так что вы могли бы заменить point
с pure
ниже):
import scalaz._, Scalaz._
1.point[Option] // Option[Int] = Some(1)
1.point[List] // List[Int] = List(1)
Это немного сложнее монады с несколькими параметрами типа, в этом случае вам нужно использовать тип лямбда или псевдоним типа.
1.point[({ type λ[α] = String \/ α })#λ] // \/[String,Int] = \/-(1)
type ErrorOr[A] = String \/ A
1.point[ErrorOr] // ErrorOr[Int] = \/-(1)
1.point[({ type λ[α] = Reader[Int, α] })#λ]
Вы могли бы упростить лямбды типа, используя плагин kind projector компилятора:
1.point[String \/ ?]
1.point[Reader[Int, ?]]