Integration with Cats typeclasses (Eq, Show, Hash, Order)

Importing the Cats integration:

// For Cats version 2.x.x
libraryDependencies += "io.monix" %% "newtypes-cats-v2" % "1.0.0"

Usage:

import monix.newtypes._
import monix.newtypes.integrations.DerivedCatsInstances

type Email = Email.Type
object Email extends NewtypeValidated[String] with DerivedCatsInstances {
  def apply(v: String): Either[BuildFailure[Type], Type] =
    if (v.contains("@"))
      Right(unsafeCoerce(v))
    else
      Left(BuildFailure("missing @"))
}

You can now use the syntax from cats:

import cats.syntax.all._

Email.unsafe("[email protected]").show