Skip to content

Instantly share code, notes, and snippets.

//> using scala "2"
//> using lib "eu.timepit::refined:0.10.1"
import eu.timepit.refined.auto._
import eu.timepit.refined.types.string._
import eu.timepit.refined.types.numeric._
case class OrderLine(product: NonEmptyString, quantity: PosInt)
OrderLine("100", 10)
//> using scala "2"
//> using lib "org.typelevel::cats-core:2.8.0"
//> using lib "eu.timepit::refined:0.10.1"
//> using lib "io.circe::circe-core:0.14.2"
//> using lib "io.circe::circe-parser:0.14.2"
//> using lib "io.circe::circe-generic:0.14.2"
//> using lib "io.circe::circe-refined:0.14.2"
import cats.data.NonEmptyList
@majk-p
majk-p / Playground.scala
Last active November 4, 2022 07:30
bi-directional cross stream communication using fs2
//> using lib "org.typelevel::cats-effect:3.3.12"
//> using lib "co.fs2::fs2-core:3.3.0"
package net.michalp.playground
import cats.effect.IO
import cats.effect.IOApp
import cats.effect.std.Queue
import cats.effect.std.QueueSink
import cats.effect.std.QueueSource
@majk-p
majk-p / main.scala
Last active November 5, 2022 20:48
ArraySeq based GoL grid model
//> using scala "3"
//> using lib "org.typelevel::cats-effect:3.3.12"
//> using lib "co.fs2::fs2-core:3.3.0"
package net.michalp.conway
import cats.effect.IO
import cats.effect.IOApp
import fs2.Stream
@majk-p
majk-p / type-bounds.scala
Last active December 16, 2022 15:42
Type bounds <: vs <:<
//> using scala "2.13"
sealed trait SampleTrait
case class SampleValue(v: String) extends SampleTrait
object SampleSingleton extends SampleTrait
def f[X <: SampleTrait](x: X): Unit =
println(x)
def g[X](x: X)(implicit ev: X <:< SampleTrait): Unit =
@majk-p
majk-p / derive-show.scala
Last active April 23, 2023 20:26
Scala-cli script to demostrate Show typeclass derivation with kittens
//> using dep "org.typelevel::kittens:3.0.0"
//> using dep "org.typelevel::cats-core:2.9.0"
import cats.Show
import cats.implicits.given
import cats.derived.*
case class Person(name: String, surname: String, age: Int)
given Show[Person] = semiauto.show
@majk-p
majk-p / error.scala
Last active July 3, 2023 08:38
MatchError: null with endpoint output initialized after endpoint definition - swagger interpreter
//> using scala "3.3.0"
//> using dep "org.typelevel::cats-effect:3.5.1"
//> using dep "com.softwaremill.sttp.tapir::tapir-core:1.6.0"
//> using dep "com.softwaremill.sttp.tapir::tapir-cats:1.6.0"
//> using dep "com.softwaremill.sttp.tapir::tapir-swagger-ui-bundle:1.6.0"
import cats.effect.ExitCode
import cats.effect.IO
import cats.effect.IOApp
@majk-p
majk-p / error.scala
Created July 3, 2023 08:38
MatchError: null with endpoint output initialized after endpoint definition - http4s server interpreter
//> using scala "3.3.0"
//> using dep "org.typelevel::cats-effect:3.5.1"
//> using dep "com.softwaremill.sttp.tapir::tapir-core:1.6.0"
//> using dep "com.softwaremill.sttp.tapir::tapir-cats:1.6.0"
//> using dep "com.softwaremill.sttp.tapir::tapir-http4s-server:1.6.0"
//> using dep "com.softwaremill.sttp.tapir::tapir-swagger-ui-bundle:1.6.0"
//> using dep "org.http4s::http4s-ember-server:0.23.22"
//> using dep "org.slf4j:slf4j-simple:1.7.36"
import cats.effect.ExitCode
@majk-p
majk-p / optics.sc
Created July 11, 2023 21:29
Introduction to Optics
//> using scala "3.3.0"
//> using dep "dev.optics::monocle-core:3.2.0"
//> using dep "dev.optics::monocle-macro:3.2.0"
import monocle.syntax.all._
case class Product(id: String, name: String, price: Double)
case class Shelf(id: String, product: Product)
case class Display(id: String, kind: "Ambient" | "Chilled", shelves: List[Shelf] )
case class Alley(id: String, displays: List[Display])
@majk-p
majk-p / main.scala
Created December 15, 2023 11:35
Reproduction example of "Scala211 doesn't support inline modifiers" when printing scala meta tree
//> using scala "2"
//> using dep "org.scalameta::scalameta:4.8.14"
import scala.meta._
import scala.meta.dialects.Scala3
object Codegen {
def codeWithInline =
source"""
object Generated {