Skip to content

Instantly share code, notes, and snippets.

View kitlangton's full-sized avatar
🤠

Kit Langton kitlangton

🤠
View GitHub Profile
import Aggregator.AggregationSyntax
import io.getquill.context.ZioJdbc.{QConnection, QDataSource}
import io.getquill.{PostgresZioJdbcContext, Query, SnakeCase}
import zio._
import zio.blocking.Blocking
import zio.console.putStrLn
object QuillContext extends PostgresZioJdbcContext(SnakeCase)
import QuillContext._
package hlist
import hlist.HList.HNil
import meetup.TupleExtractor
sealed trait HList
case class ::[H, T <: HList](head: H, tail: T) extends HList
case object HNil extends HList { self =>
def ::[H](that: H): H :: HNil = new ::(that, self)
@kitlangton
kitlangton / HMR.scala
Created June 11, 2021 05:57
Example of basic HMR with Scala.js & Laminar
object Main {
val css: Css.type = Css
println(s"PRODUCTION MODE: ${scala.scalajs.LinkingInfo.productionMode}")
def main(args: Array[String]): Unit =
waitForLoad {
val appContainer = dom.document.querySelector("#app")
appContainer.innerHTML = ""
unmount()
/** A fancy, functional graph encoding taken from here:
* https://github.com/snowleopard/alga-paper
*/
sealed trait Graph[+A] { self =>
import Graph._
def toStandardGraph[A1 >: A]: StandardGraph[A1] =
fold[StandardGraph[A1]](
empty = StandardGraph(Set.empty, Set.empty),
vertex = value => StandardGraph(Set(value), Set.empty),
@kitlangton
kitlangton / HList.scala
Last active July 16, 2021 05:27
HListery
// HList
sealed trait HList
object HList {
type ::[H, T <: HList] = HCons[H, T]
type HNil = HNil.type
implicit final class HNilOps(private val self: HNil) extends AnyVal {
def ::[A](a: A): A :: HNil = HCons(a, self)
@kitlangton
kitlangton / zio-interop-laminar.scala
Last active July 14, 2022 13:44
Zio Laminar Interop
package zio.interop
import com.raquo.laminar.api.L._
import zio._
import zio.internal.{Executor, Platform}
import zio.stream.ZStream
import scala.concurrent.ExecutionContext
import scala.scalajs.js
package zio
object PathDependentTypes {
val zio1: ZIO[Any, Nothing, Int] = ZIO.succeed(1)
val zio2: ZIO[Any, Nothing, Int] = ZIO.succeed(2)
val zio3: ZIO[Any, Nothing, Int] = ZIO.succeed(3)
val zio4 = zio1 <*> zio2 <*> zio3 <*> zio1 <*> zio2
What a beautiful file.
That's great.
One more line will do.
import zio.{RuntimeFlags => _, _}
import scala.annotation.implicitNotFound
// # ANNOUNCEMENTS
// - NEXT WEEK (Friday, 16th) : Akka to ZIO Demo
// - NEXT, NEXT WEEK (Friday, 23rd): Akka to ZIO Panel
// # ZIO API Design Techniques
package zio.http.api.internal
sealed trait Box[A] extends Product with Serializable { self =>
def zip[B](that: Box[B])(implicit zipper: Zipper[A, B]): Box[zipper.Out] =
Box.Zip[A, B, zipper.Out](self, that, zipper)
def map[B](f: A => B)(implicit tupleSize: TupleSize[B]): Box[B] =
Box.Map(self, f, tupleSize)
def tupleSize: Int = self match {