Skip to content

Instantly share code, notes, and snippets.

View zainab-ali's full-sized avatar

Zainab Ali zainab-ali

View GitHub Profile
@zainab-ali
zainab-ali / pizza-calculator.scala
Last active April 17, 2025 15:58
London Scala User Group Pizza Calculator
/** This app calculates the number of pizzas needed for each
* London Scala event.
*
* Meat, vegetarian and vegan pizzas are all a Dominos Large
* size. Gluten-free pizzas come in a single small size.
*
* You can run this locally with:
*
* > scala https://gist.github.com/zainab-ali/231e3ded6e8241d11e3927f9521bc0cc -- <numberOfSignupsOnMeetupDotCom>
*
@zainab-ali
zainab-ali / evalTapThenparEvalMapUnordered.scala
Created October 15, 2024 15:00
Aquascape describing `evalTap` followed by `parEvalMapUnordered`.
//> using scala "3.5.0"
//> using dep "com.github.zainab-ali::aquascape::0.3.0"
import fs2.*
import cats.effect.*
import aquascape.*
import cats.syntax.all.*
import scala.concurrent.duration.*
object App extends AquascapeApp {
@zainab-ali
zainab-ali / parEvalMapUnorderedChunks.scala
Last active October 15, 2024 15:19
Aquascape describing `parEvalMapUnordered` and chunk preservation semantics.
//> using dep "com.github.zainab-ali::aquascape::0.3.0"
import fs2.*
import cats.effect.*
import aquascape.*
import cats.syntax.all.*
object App extends AquascapeApp {
def name: String = "aquascape"
@zainab-ali
zainab-ali / repr-bug.sc
Created October 9, 2024 14:37
Reproduction of bug in Repr derivation in snapshot4s
//> using scala "3.5.0"
//> using dep com.siriusxm::snapshot4s-core::0.1.6
import snapshot4s.Repr
class Address()
given Repr[Address] = ???
case class Person(name: String, address: Address)
val person = Person("Mao", new Address())
//> 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]