Skip to content

Instantly share code, notes, and snippets.

Justin Heyes-Jones justinhj

Block or report user

Report or block justinhj

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@justinhj
justinhj / listoptionfor.scala
Created Sep 11, 2019
List and Option in for
View listoptionfor.scala
// Ammonite repl output
@ desugar {
for (
s <- List(1,2,3);
o <- if(s % 2 == 1) Some(s) else None
) yield (s + o)
}
res12: Desugared = scala.collection.immutable.List.apply[Int](1, 2, 3).flatMap[Int, Any](((s: Int) => scala.Option.option2Iterable[Int]((if (s.%(2).==(1))
scala.Some.apply[Int](s)
@justinhj
justinhj / EitherTLogging.scala
Created Jul 28, 2019
Error handling and logging
View EitherTLogging.scala
import cats._
import cats.data._
import cats.implicits._
object EitherTLogging {
def divide[F[_]](dividend: Int, divisor: Int)(implicit F: ApplicativeError[F, String]): F[Int] = {
if (divisor === 0) F.raiseError("division by zero")
else F.pure(dividend / divisor)
}
View WriterTFailure.scala
import cats._
import cats.instances._
import cats.syntax._
import cats.data.Validated._
type ErrorOr[A] = Validated[String, A]
def logDivide(a: Int, b: Int) = WriterT[ErrorOr, String, Int](
divide[ErrorOr](a,b) match {
case Invalid(e) => Invalid("Division by zero\n")
@justinhj
justinhj / typeclasspatternexample.scala
Created Jul 16, 2019
From @kaishh on functional programming Slack
View typeclasspatternexample.scala
// kaishh [4:20 AM]
// Found a neat way to always have typeclass syntax available without any wildcards imports:
package mypkg {
trait Functor[F[_]] {
def map[A, B](fa: F[A])(f: A => B): F[B]
}
final class FunctorOps[F[_], A](private val fa: F[A]) extends AnyVal {
def map[B](f: A => B)(implicit F: Functor[F]): F[B] = F.map(fa)(f)
}
View FizzBuzzFs.scala
import fs2._
import cats._
import cats.implicits._
object Fs2FizzBuzz {
val fb = Stream.emits(List(None, None, "Fizz".some)).
repeat.
zip(Stream.emits(List(None, None, None, None, "Buzz".some)).
repeat).
View fizzbuzz2.scala
@ val fb = Stream.emits(List("", "", "fizz")).repeat.zip(Stream.emits(List("", "", "", "", "buzz")).repeat).map{case (a,b) => a |+| b}
fb: Stream[Nothing, String] = Stream(..)
@ fb.take(30).toList
res37: List[String] = List(
"",
"",
"fizz",
"",
"buzz",
@justinhj
justinhj / fizzbuzz.scala
Created Jul 13, 2019
Fizz buzz as FS2 streams
View fizzbuzz.scala
val fb = Stream.emits(List(false, false, true)).repeat.zip(Stream.emits(List(false,false,false,false,true)).repeat).map{
case (true,true) => "fizzbuzz"
case (true,false) => "fizz"
case (false,true) => "buzz"
case (false,false) => ""
}
//fb: Stream[Nothing, String] = Stream(..)
// @ fb.take(30).toList
// res27: List[String] = List(
@justinhj
justinhj / uPickleRules.scala
Last active Jul 10, 2019
Serialize and deserialize a map with a case class key
View uPickleRules.scala
// "com.lihaoyi" %% "upickle" % "0.7.5",
import upickle.default.{read,write}
import upickle.default.{ReadWriter => RW, macroRW}
object PickleMap {
case class KeyClass(s: String, i: Int)
object KeyClass{
implicit val rw: RW[KeyClass] = macroRW
@justinhj
justinhj / lolcompose.scala
Created Jul 9, 2019
Flatmap from unit and compose
View lolcompose.scala
object ComposePlay {
// Compose takes two Kleisli arrows ( A => F[B], B => F[C] ) and returns A => F[C]
// Here I implement unit and compose for Option
// Then flatMap is implemented using compose showing that you can make a Monad
// with unit and compose...
def unitOption[A](a : A) : Option[A] = Some(a)
@justinhj
justinhj / ActorWithQueue.scala
Created Jul 4, 2019
Pub Sub Akka actor with Zio Queue
View ActorWithQueue.scala
import zio._
import zio.console._
import zio.{Queue, UIO}
import akka.actor._
import com.typesafe.config.ConfigFactory
import java.util.concurrent.Executors
import scala.concurrent.{ExecutionContext}
import scala.concurrent.duration.FiniteDuration
import java.util.concurrent.{Executors, TimeUnit}
import java.util.concurrent.{ExecutorService, Executors, ThreadFactory}
You can’t perform that action at this time.