Scalaz如何能够做"A / B",我如何做我自己的"B.??"或"A <??> B"



我对scala implicits相对陌生,但如果我想做5.??,我会做:

class MyInt(int: Int) {
// Useless, just to make a point
def ?? : Int = int * 100
}
implicit def toMyInt(int: Int): MyInt =
MyInt(int)

我的问题是:scalaz怎么能做A / B,我怎么能做与上面相同的事情,添加我自己的运算符(但要处理类型(
关于我想玩什么和做什么的一点上下文:

abstract class Err(val message: String) { /* ... */ }
sealed trait MaybeErr[+E <: Err, +T] { /* ... */ }

我能得到的最接近的:

type ??[+T] = MaybeErr[Err, T]
type <??>[+E <: Err, +T] = MaybeErr[E, T]
def div1(t: Int, b: Int): ??[Int] = /* ... */
def div2(t: Int, b: Int): <??>[OtherErr, Int] = /* ... */

我想做的事:

// T.?? = MaybeErr[Err, T]
// E <??> T = MaybeErr[E, T]
def div1(t: Int, b: Int): Int.?? = /* ... */
def div2(t: Int, b: Int): OtherErr <??> Int = /* ... */

scalaz怎么能做A / B,我怎么能做与上面相同的事情

任何二进制类型构造函数C[A, B]都可以用中缀形式A C B(或者C:[A, B]作为以:冒号结尾的类型构造函数的B C: A(编写,请参阅Scala 2.13语言规范的3.10infix Types部分。

您可以在core/src/main/scala/scalaz/Either.scala:中看到/的定义

sealed abstract class /[A, B] extends Product with Serializable

相关内容

  • 没有找到相关文章

最新更新