Skip to content

Repository files navigation

Mouse Continuous IntegrationMaven CentralCats friendly

Mouse is a small companion to the Cats functional programming library and the Scala standard library.

The library arose from this Cats issue and is a Typelevel member.

Mouse is published for Scala 2.12, 2.13 and 3.0. For Scala.jvm:

"org.typelevel" %% "mouse" % version

For scala.js 1.x:

"org.typelevel" %%% "mouse" % version

Learn more about Mouse at https://typelevel.org/mouse/.

Content

Mouse includes enrichments for:

Example:

scala>importmouse.all._importmouse.all._
scala>true.option("Its true!")
res0:Option[String] =Some(Itstrue!)
scala>defmakeEven(i: Int) = (i %2==1).applyIf(i)(_ -1)
defmakeEven(i: Int):Int
scala>vale1:Either[String, Int] =Left("failed")
e1:Either[String,Int] =Left(failed)
scala>true.whenA(e1)
res0:Either[String,Unit] =Left(failed)
scala>false.whenA(e1)
res1:Either[String,Unit] =Right(())
scala> res0.cata(msg =>s"Message received: ${msg}", "No message")
res1:String=Messagereceived: Itstrue!
scala>"1.0".parseFloat
res0:Either[NumberFormatException, Float] =Right(1.0F)
scala>"foo".parseIntValidated
res1: cats.data.Validated[NumberFormatException,Int] =Invalid(java.lang.NumberFormatException:For input string: "foo")
scala>valt1= scala.util.Try(new java.net.URL("https://www.github.com"))
t1: scala.util.Try[java.net.URL] =Success(https://www.github.com)
scala> t1.cata(msg =>s"URL is valid!", error =>s"URL is invalid: ${error.getMessage}")
res1:String=URL is valid!
scala> t1.toEither
res2:Either[Throwable,java.net.URL] =Right(https://www.github.com)
scala>valt2= scala.util.Try(new java.net.URL("https//www.github.com"))
t2: scala.util.Try[java.net.URL] =Failure(java.net.MalformedURLException: no protocol: https//www.github.com)
scala> t2.cata(msg =>s"URL is valid!", error =>s"URL is invalid: ${error.getMessage}")
res3:String=URL is invalid: no protocol: https//www.github.com
scala> t2.toEither
res4:Either[Throwable,java.net.URL] =Left(java.net.MalformedURLException: no protocol: https//www.github.com)
scala>valintToBytes=123456789.toByteArray
intToBytes:Array[Byte] =Array(7, 91, -51, 21)
scala>vallongToBase64=123456789L.toBase64
longToBase64:String=AAAAAAdbzRU
scala>5.squared
res0:Int=25
scala>1.5|> (_.toInt) |> (_.toString)
res0:String=1//lift a partial function into a total function to an Either, when you want to treat unhandled input cases as an error
scala> liftEither[Option[Int]]({caseSome(n) => n}, a =>s"Unexpected: $a")(Some(6))
res0:Either[String,Int] =Right(6)
scala>valmapped=Map(1->2, 3->4).mapKeys(_ *2)
mapped:Map[Int,Int] =Map(2->2, 6->4)
scala>valfoption=List(Option(1), Option(2), Option(4)).mapIn(_ *2)
foption:List[Option[Int]] =List(Some(2), Some(4), Some(8))
scala>valfeither=List(Either.cond(true, 1, "0")).mapIn(_ *2)
feither:List[Either[String, Int]] =List(Right(2))
scala>vallistOption=List(Option(1), Option(2)).mapNested2(_ *2)
listOption:List[Option[Int]] =List(Some(2), Some(4))
scala>vallistOptionList=List(Option(List(1)), Option(List(2))).mapNested3(_ *2)
listOptionList:List[Option[List[Int]]] =List(Some(List(2)), Some(List(4)))
scala>valtupleHead= (1, 2, 4, 8).head
tupleHead:Int=1
scala>valtupleLast= (1, 2, 4, 8).last
tupleLast:Int=8
scala>Set(0).tailOrEmpty
valres3:Set[Int] =Set()
scala>Nil.tailOrEmpty
valres1:List[Nothing] =List()
scala>Set(0).tailOption
valres4:Option[cats.data.NonEmptySet[Int]] =None
scala>List(0,1,2).tailOption
valres5:Option[cats.data.NonEmptyList[Int]] =Some(NonEmptyList(1, 2))

Scope of Library

  • Provide enrichments to classes from the Scala standard library that convert to Cats datatypes, or otherwise improve the functional programming experience.

Contributing

Mouse is maintained by @benhutchison and @danicheg.

Issues and pull requests are welcome. Code contributions should be aligned with the above scope to be included, and include unit tests. See contributing guide for more details.

This project supports the Scala code of conduct and aims that its channels (mailing list, Gitter, github, etc.) to be welcoming environments for everyone.

About

A small companion to cats

Topics

Resources

Code of conduct

Security policy

Stars

375 stars

Watchers

11 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages