如何在Cats中创建自定义类型构造函数的实例?
我知道猫已经附带几乎所有Scala内置类型构造函数,我可以通过例如import cats.data._ import cats.implicits._ import cats.instances._
导入它们但我想知道如何创建我自己的隐式实例来处理monad运算符sintaxs像>> = 使用我自己的自定义类型构造函数。假设我MyType[A]
是monadic o至少有flatMap
和pure
构造函数,我想做的事情如下:
Monad[MyType].pure(x) >>= { _.fooBar }
我在instances
包的来源看到了一些像Option
这样的例子,但似乎有很多事要做,我不知道是否有一个简单的方法。
问候。
答案 0 :(得分:1)
只需为您的类型提供Monad的隐式实例,并实现所需的方法:
implicit object MyMonad extends Monad[MyType] {
def pure[A](x: A): MyType[A] = ???
def flatMap[A, B](fa: MyType[A])(f: A => MyType[B]): MyType[B] = ???
def tailRecM[A, B](a: A)(f: A => MyType[Either[A, B]]): MyType[B] = ???
}
如果您确信Monad是堆栈安全的,则可以跳过实施tailRecM
并扩展StackSafeMonad[MyType]
。