All Downloads are FREE. Search and download functionalities are using the official Maven repository.

atto-compat-scalaz72_2.11.0.5.0.source-code.compat.scala Maven / Gradle / Ivy

There is a newer version: 0.5.3
Show newest version
package atto.compat

import atto._
import atto.parser.combinator._
import atto.syntax.parser._

import scala.language.higherKinds

import _root_.scalaz._, Scalaz._

object scalaz extends ScalazModes
                 with ScalazShims
                 with ScalazInstances

trait ScalazModes {

  implicit val ScalazEithery: Eithery[\/] =
    new Eithery[\/] {
      def  left[A, B](a: A): A \/ B = \/.left(a)
      def right[A, B](b: B): A \/ B = \/.right(b)
    }

  implicit val ScalazNelMode: NonEmptyListy[NonEmptyList] =
    new NonEmptyListy[NonEmptyList] {
      def cons[A](a: A, as: List[A]): NonEmptyList[A] = NonEmptyList(a, as: _*)
      def toList[A](as: NonEmptyList[A]): List[A] = as.stream.toList
    }

}

trait ScalazShims {

  implicit def ScalazFoldy[F[_]: Foldable] =
    new Foldy[F] {
      def toList[A](fa: F[A]) = fa.toList
    }

}

trait ScalazInstances {

  implicit val ParserMonad: Monad[Parser] =
    new Monad[Parser] {
      def point[A](a: => A): Parser[A] = ok(a)
      def bind[A,B](ma: Parser[A])(f: A => Parser[B]) = ma flatMap f
      override def map[A,B](ma: Parser[A])(f: A => B) = ma map f
    }

  implicit val ParserPlus: Plus[Parser] =
    new Plus[Parser] {
      def plus[A](a: Parser[A], b: => Parser[A]): Parser[A] = a | b
    }

  implicit def ParserMonoid[A]: Monoid[Parser[A]] =
    new Monoid[Parser[A]] {
      def append(s1: Parser[A], s2: => Parser[A]): Parser[A] = s1 | s2
      val zero: Parser[A] = err("zero")
    }

  implicit val ParseResultFunctor: Functor[ParseResult] =
    new Functor[ParseResult] {
      def map[A,B](ma: ParseResult[A])(f: A => B) =
        ma map f
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy