Skip to content

Instantly share code, notes, and snippets.

View yasuabe's full-sized avatar

Yasuyuki Abe yasuabe

View GitHub Profile
@yasuabe
yasuabe / ex01_ProbMonadSpec.scala
Last active February 7, 2019 05:17
discipline for Prob Monad
package ex01
import cats.Eq
import cats.laws.discipline.MonadTests
import ex01.Prob.Event
import ex01.ProbInstances._
import org.scalacheck.{Gen, _}
import org.scalatest.FunSuite
import org.typelevel.discipline.scalatest.Discipline
@yasuabe
yasuabe / RationalSpec.scala
Last active December 26, 2017 06:04
property(redefine+cats+scalacheck)
package ratio1
import cats.Apply
import cats.instances.int._
import cats.syntax.all._
import eu.timepit.refined.cats._
import eu.timepit.refined.refineMV
import eu.timepit.refined.scalacheck.numeric.chooseRefinedNum
import org.scalacheck.Gen._
import org.scalacheck.Prop.forAll
@yasuabe
yasuabe / Rational.scala
Last active December 26, 2017 06:05
product_code(redefine+cats+scalacheck)
package ratio1
import cats.Eq
import eu.timepit.refined.refineV
import eu.timepit.refined.api.Refined
import eu.timepit.refined.boolean.Not
import eu.timepit.refined.generic.Equal
import eu.timepit.refined.{W, refineMV}
import shapeless.Nat._0
@yasuabe
yasuabe / arrow_tutorial01.sc
Last active December 30, 2017 16:04
arrow tutorial '01 the arrow'
import cats.arrow.Arrow
import cats.data.{Cokleisli, NonEmptyList}
import cats.instances.function._
import cats.syntax.compose._
val f1 = Arrow[Function].lift(1d / (_: Int))
f1(10)
val A = Arrow[Function]
@yasuabe
yasuabe / arrow_tutorial03.sc
Created December 30, 2017 15:59
arrow tutorial '3. some arrow operations'
import cats.arrow.Arrow
sealed case class SimpleFunc[A, B](runF: A => B)
trait SimpleFuncInstances {
implicit val simpleFuncArrow: Arrow[SimpleFunc] = new Arrow[SimpleFunc] {
def lift[A, B](f: A => B): SimpleFunc[A, B] = SimpleFunc(f)
def first[A, B, C](fa: SimpleFunc[A, B]): SimpleFunc[(A, C), (B, C)] =
SimpleFunc { case (a, c) => (fa runF a , c) }
@yasuabe
yasuabe / arrow_tutorial05.sc
Created December 30, 2017 16:07
arrow tutorial '5. kleisli arrows'
import cats.arrow.Arrow
import cats.data.Kleisli
sealed case class SimpleFunc[A, B](runF: A => B)
import cats.syntax.arrow._
import cats.syntax.compose._
def arr[F[_, _]: Arrow, A, B](f: A => B): F[A, B] = Arrow[F] lift f
def split[F[_, _]: Arrow, A]: F[A, (A, A)] = arr(x => (x, x))
@yasuabe
yasuabe / arrow_tutorial06.sc
Created December 30, 2017 16:10
arrow tutorial '6. a teaser'
import cats.Monoid
import cats.arrow.Arrow
import cats.data.Kleisli
sealed case class SimpleFunc[A, B](runF: A => B)
import cats.syntax.arrow._
import cats.syntax.compose._
def arr[F[_, _]: Arrow, A, B](f: A => B): F[A, B] = Arrow[F] lift f
@yasuabe
yasuabe / DI_cake.sc
Last active February 19, 2019 00:31
oop to fp - original cake
import cats.syntax.option._
// domain layer -----------------------------------------------------------
import monix.eval.Task
case class Movie(id: Int, title: String)
trait MovieRepoComponent {
trait MovieRepo {
def getMovie(id: Int): Task[Option[Movie]]
}
@yasuabe
yasuabe / DI_min_cake.sc
Last active February 19, 2019 00:40
oop to fp - minimum cake
import cats.syntax.option._
// domain layer -----------------------------------------------------------
import monix.eval.Task
case class Movie(id: Int, title: String)
trait MovieRepo {
def getMovie(id: Int): Task[Option[Movie]]
}
@yasuabe
yasuabe / DI_reader.sc
Last active April 23, 2019 17:22
oop to fp - reader monad
import cats.syntax.option._
// domain layer -----------------------------------------------------------
import monix.eval.Task
import cats.data.ReaderT
case class Movie(id: Int, title: String)
trait MovieRepo {
def getMovie(id: Int): Task[Option[Movie]]