Я относительно новичок в scala последствиях, но если бы я хотел быть в состоянии сделать 5.??
, я бы сделал:
class MyInt(int: Int) {
// Useless, just to make a point
def ?? : Int = int * 100
}
implicit def toMyInt(int: Int): MyInt =
MyInt(int)
Мой вопрос таков: как скаляр может делать 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 = /* ... */