Skip to content

Instantly share code, notes, and snippets.

View zainab-ali's full-sized avatar

Zainab Ali zainab-ali

View GitHub Profile
//> using javaOpt -Xmx200m
//> using scala "3.4.0"
//> using test.dep com.disneystreaming::weaver-cats::0.8.4
package repro
import cats.effect.IO
import scala.concurrent.duration._
import weaver.SimpleMutableIOSuite
object Repro extends SimpleMutableIOSuite {
@zainab-ali
zainab-ali / workshop-test.scala
Created March 16, 2024 17:57
scala-cli script to test that aquascapes are generated properly
//> using scala "3.4.0"
//> using lib "com.github.zainab-ali::aquascape:0.1.0"
import fs2.*
import cats.effect.*
import aquascape.*
object BasicScape extends AquascapeApp.Simple {
def stream(using Scape[IO]) = {
Stream(1, 2, 3)
.stage("Source")
//> using scala "3.4.0"
//> using lib "co.fs2::fs2-core:3.9.4"
import fs2.*
import cats.syntax.all.*
import cats.effect.*
object Demo extends IOApp.Simple {
def combineResources[O, O2](f: Chunk[O] => Resource[IO, O2])(
in: Stream[IO, Chunk[O]]
@zainab-ali
zainab-ali / bug-stream-scope.sc
Last active March 4, 2024 17:35
OOM on infinitely recursive scope
//> using scala "3.4.0"
//> using lib "co.fs2::fs2-core:3.9.4"
import fs2.*
import cats.effect.*
import cats.effect.unsafe.implicits.global
def infiniteStream: Stream[IO, Unit] =
(Stream.unit ++ infiniteStream).pull.echo.stream // vs streamNoScope
infiniteStream.compile.drain.unsafeRunSync()
@zainab-ali
zainab-ali / bug-handle-error-with.sc
Last active March 4, 2024 17:06
handleErrorWith OOMs on an infinite stream
//> using scala "3.4.0"
//> using lib "co.fs2::fs2-core:3.9.4"
import fs2.*
import cats.effect.*
import cats.effect.unsafe.implicits.global
def infiniteStream: Stream[IO, Unit] =
(Stream.unit ++ infiniteStream)
.handleErrorWith(err => Stream.unit)
@zainab-ali
zainab-ali / ensure.sc
Last active January 26, 2024 22:51
Ensure
//> using scala 3.3.1
//> using dep co.fs2::fs2-core::3.9.4
import cats.syntax.all.*
import cats.effect.IO
import fs2.Stream
import cats.effect.unsafe.implicits.global
Stream(1, 2)
.covary[IO]
@zainab-ali
zainab-ali / pull-no-params.scala
Last active July 10, 2023 19:07
Simplified pull free monad without type parameters or overt reference to monads
enum Pull {
case Done
case Output(name: String)
case UnconsThen(pull: Pull, f: Option[(String, Pull)] => Pull)
case Then(pull: Pull, next: () => Pull)
}
import Pull._
val done = Done
def single(name: String) = Output(name)
@zainab-ali
zainab-ali / pull.scala
Created July 10, 2023 18:43
Basic pull free monad for pure infinite streams
enum Pull[A] {
case Pure[A](value: A) extends Pull[A]
case Output(name: String) extends Pull[Unit]
case Uncons[A](pull: Pull[A]) extends Pull[Option[(String, Pull[A])]]
case FlatMap[A, B](pull: Pull[A], f: A => Pull[B]) extends Pull[B]
}
import Pull._
val done: Pull[Unit] = Pure(())
def single(name: String): Pull[Unit] = Output(name)
@zainab-ali
zainab-ali / game.scala
Last active April 1, 2017 18:49
Event Handlers and State combinations
package game
/** Game logic:
*
* The game map is a tiled grid. Each tile has something on it.
*
* Actions:
* When a citizen is clicked on, they can be told to do something.
* At the moment, they can only chop wood.
*
@zainab-ali
zainab-ali / recordWithTuples.scala
Created March 31, 2017 21:03
Zip record with tuples as values
package foo
import shapeless._
import shapeless.labelled.FieldType
import shapeless.ops.hlist._
/** This example zips two hlists together based on their keys and part of their values
*
*
* A left HList of type FieldType[Key, (A, LB)] :: LTail is zipped with a right HList which contains FieldType[Key, (A, RB)]