Parser

dupin.core.Parser
See theParser companion object
final class Parser[F[_], E, A, B] extends ParserBinCompat[F, E, A, B]

A type class that defines how to parse an instance of A to an instance of B. Can be thought of as a A => F[IorNec[E, B]] function.

Attributes

Companion:
object
Graph
Supertypes
trait ParserBinCompat[F, E, A, B]
class Object
trait Matchable
class Any

Members list

Concise view

Value members

Concrete methods

def andThen[C](p: Parser[F, E, B, C])(implicit F: Monad[F]): Parser[F, E, A, C]
def apply(a: A): F[IorNec[E, B]]
def comap[AA](f: AA => A): Parser[F, E, AA, B]

Contravariant map without path changes. Example:

Contravariant map without path changes. Example:

scala> case class User(age: Int)
scala> val user = User(1)
scala> val parser = dupin.basic.BasicParser.idFailure[Int](c => s"${c.path} is wrong")

scala> parser.comap[User](_.age).parse(user)
res0: cats.Id[cats.data.IorNec[String,Int]] = Left(Chain(. is wrong))

scala> parser.comapP[User](_.age).parse(user)
res1: cats.Id[cats.data.IorNec[String,Int]] = Left(Chain(.age is wrong))

Attributes

def comapPE[AA](p: Path, f: AA => A): Parser[F, E, AA, B]

Contravariant map with explicit path prefix.

Contravariant map with explicit path prefix.

Attributes

def compose[Z](p: Parser[F, E, Z, A])(implicit F: Monad[F]): Parser[F, E, Z, B]
def flatMap[C](f: B => Parser[F, E, A, C])(implicit F: Monad[F]): Parser[F, E, A, C]
def handleErrorWith(f: Type[E] => Parser[F, E, A, B])(implicit F: Monad[F]): Parser[F, E, A, B]
def liftToTraverseCombiningP[G[_]](implicit F: Applicative[F], GT: Traverse[G], GA: Applicative[G], GM: MonoidK[G]): Parser[F, E, G[A], G[B]]

Lifts parser to G[_] type using Traverse instance, adds index as path prefix, combines each individual parser result using MonoidK instance, therefore allows to skip failures.

Lifts parser to G[_] type using Traverse instance, adds index as path prefix, combines each individual parser result using MonoidK instance, therefore allows to skip failures.

Attributes

See also:
def liftToTraverseP[G[_]](implicit F: Applicative[F], GT: Traverse[G]): Parser[F, E, G[A], G[B]]

Lifts parser to G[_] type using Traverse instance, adds index as path prefix. Example:

Lifts parser to G[_] type using Traverse instance, adds index as path prefix. Example:

scala> case class Name(value: String)
scala> val rawNames = List("", "Doe")
scala> val parser = dupin.basic.BasicParser.root[String, Name](
 Option(_).filterNot(_.isEmpty).map(Name.apply),
 c => s"${c.path} is not a name",
)

scala> parser.liftToTraverseP[List].parse(rawNames)
res0: cats.Id[cats.data.IorNec[String,List[Name]]] = Left(Chain(.[0] is not a name))

scala> parser.liftToTraverseCombiningP[List].parse(rawNames)
res1: cats.Id[cats.data.IorNec[String,List[Name]]] = Both(Chain(.[0] is not a name),List(Name(Doe)))

Attributes

def map[C](f: B => C)(implicit F: Functor[F]): Parser[F, E, A, C]
def mapError[EE](f: E => EE)(implicit F: Functor[F]): Parser[F, EE, A, B]
def parse(a: A): F[IorNec[E, B]]

Inherited methods

inline def comapP[AA](inline f: AA => A): Parser[F, E, AA, B]

Contravariant map with macros generated path prefix.

Contravariant map with macros generated path prefix.

Attributes

See also:

[comap]

Inherited from:
ParserBinCompat

Concrete fields

val runF: Context[A] => F[IorNec[E, B]]