Packages

t

scala.tools.nsc.transform.patmat.Interface

MatchMonadInterface

trait MatchMonadInterface extends AnyRef

Interface with user-defined match monad? if there's a __match in scope, we use this as the match strategy, assuming it conforms to MatchStrategy as defined below:

type Matcher[P[_], M[+_], A] = {
  def flatMap[B](f: P[A] => M[B]): M[B]
  def orElse[B >: A](alternative: => M[B]): M[B]
}

abstract class MatchStrategy[P[_], M[+_]] {
  // runs the matcher on the given input
  def runOrElse[T, U](in: P[T])(matcher: P[T] => M[U]): P[U]

  def zero: M[Nothing]
  def one[T](x: P[T]): M[T]
  def guard[T](cond: P[Boolean], then: => P[T]): M[T]
}

P and M are derived from one's signature (def one[T](x: P[T]): M[T])

if no __match is found, we assume the following implementation (and generate optimized code accordingly)

object __match extends MatchStrategy[({type Id[x] = x})#Id, Option] {
  def zero = None
  def one[T](x: T) = Some(x)
  // NOTE: guard's return type must be of the shape M[T], where M is the monad in which the pattern match should be interpreted
  def guard[T](cond: Boolean, then: => T): Option[T] = if(cond) Some(then) else None
  def runOrElse[T, U](x: T)(f: T => Option[U]): U = f(x) getOrElse (throw new MatchError(x))
}
Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. MatchMonadInterface
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Abstract Value Members

  1. abstract val typer: (analyzer)#Typer

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  9. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  10. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  11. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  12. val matchOwner: Global.Symbol
  13. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  15. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  16. def pureType(tp: Global.Type): Global.Type
  17. def reportMissingCases(pos: Global.Position, counterExamples: List[String]): Unit
  18. def reportUnreachable(pos: Global.Position): Unit
  19. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  20. def toString(): String
    Definition Classes
    AnyRef → Any
  21. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  22. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  23. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )

Inherited from AnyRef

Inherited from Any

Ungrouped