2017-07-28 48 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]來代替。

相關問題