minimalistic Either
monad transformer
minimalistic Either
monad transformer
scala> import sclib.z._ scala> import sclib.ops.either._ scala> val et = EitherT[Function1[Int, ?], String, Int]{i => if(i < 10) i.right else "BOOM".left} et: sclib.z.EitherT[[A]Int => A,String,Int] = EitherT(<function1>) scala> et.runEitherT(5) res0: Either[String,Int] = Right(5) scala> et.runEitherT(50) res1: Either[String,Int] = Left(BOOM)
minimalistic Functor
minimalistic List
monad transformer
minimalistic List
monad transformer
scala> import sclib.z._ scala> import sclib.ops.`try`._ scala> (for { | a <- ListT(List(1, 2).success) | b <- ListT(List(3, 4).success) | } yield a + b).runListT res0: scala.util.Try[List[Int]] = Success(List(4, 5, 5, 6)) scala> (for { | a <- ListT(List(1, 2).success) | b <- ListT("BOOM".failure[List[Int]]) | } yield a + b).runListT res1: scala.util.Try[List[Int]] = Failure(java.lang.Exception: BOOM)
minimalistic Monad
minimalistic Reader
monad
minimalistic Reader
monad
scala> import sclib.z._ scala> val action = for { | a <- Reader[Int, Int]{_ + 5} | b <- Reader[Int, Int]{_ + 10} | } yield (a, b) action: sclib.z.Reader[Int,(Int, Int)] = Reader(<function1>) scala> action.runReader(1) res0: (Int, Int) = (6,11)
minimalistic State
monad
minimalistic State
monad
scala> import sclib.z._ scala> val action = for { | a <- State[Int, Int](i => (i, i + 1)) | b <- State[Int, Int](i => (i, i + 1)) | } yield a -> b action: sclib.z.State[Int,(Int, Int)] = State(<function1>) scala> action.run(0) res1: ((Int, Int), Int) = ((0,1),2)
minimalistic State
monad transformer
minimalistic State
monad transformer
scala> import sclib.z._ scala> import sclib.ops.`try`._ scala> import scala.util.Try scala> val pf = StateT{i: Int => if(i < 10) (i, i + 1).success else "BOOM".failure} scala> val action = for { | a <- pf | b <- pf | } yield a -> b scala> action.run(0) res1: scala.util.Try[((Int, Int), Int)] = Success(((0,1),2)) scala> action.run(10) res2: scala.util.Try[((Int, Int), Int)] = Failure(java.lang.Exception: BOOM)
minimalistic Try
monad transformer
minimalistic Try
monad transformer
scala> import sclib.z._ scala> import sclib.ops.`try`._ scala> val tt = TryT[Function1[Int, ?], Int]{i => if(i < 10) i.success else "BOOM".failure} scala> tt.map(_ * 10).runTryT(5) res0: scala.util.Try[Int] = Success(50) scala> tt.map(_ * 10).runTryT(10) res1: scala.util.Try[Int] = Failure(java.lang.Exception: BOOM)
Either
s Functor
and Monad
instances
Function0
s Functor
and Monad
instances
Function1
s Functor
and Monad
instances
Iterator
s Functor
and Monad
instances
List
s Functor
and Monad
instances
Option
s Functor
and Monad
instances
Reader
s Functor
and Monad
instances
Set
s Functor
and Monad
instances
State
s Functor
and Monad
instances
Try
s Functor
and Monad
instances
Vector
s Functor
and Monad
instances
functor, monad, monad-transformer
- for zero runtime dependencies of this library, some concepts are reimplemented here - very basic / minimal
Functor
andMonad
implementationscheck the member documentation for examples