2017-07-28 79 views
1

如何在Cat中创建自定义类型构造函数的实例? 我知道,猫已经带有几乎所有的Scala内置类型的构造函数,我可以通过例如​​导入它们,但我想知道如何创建我自己的隐式实例来处理monads运算符sintaxs,如>> =用我自己的自定义类型构造函数。假设我有MyType[A]是一元o至少有flatMappure构造函数,我想要做的事情,如:如何在Scala中创建自定义类型构造函数的类型类Monad [F [_]]的实例Cats

Monad[MyType].pure(x) >>= { _.fooBar } 

我在instances包的来源看像Option一些例子中看到的,但它似乎做很多事情,我不知道有没有简单的方法。

关于。

回答

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] = ??? 
} 

如果你有信心,你的单子是堆栈安全的,你可以跳过实现tailRecM和扩展StackSafeMonad[MyType]来代替。

相关问题