Skip to content

Instantly share code, notes, and snippets.

Avatar

Dino Fancellu fancellu

View GitHub Profile
@fancellu
fancellu / Scala3TypeClassWithUsingGiven
Created January 1, 2023 19:59
Scala3 TypeClass example with using/given
View Scala3TypeClassWithUsingGiven
object Scala3TypeClassWithUsingGiven {
trait MyMonoid[A] {
def combine(x: A, y: A): A
def empty: A
}
def combineList[A](li: List[A])(using monoid: MyMonoid[A]): A = li.foldLeft(monoid.empty)(monoid.combine)
def main(args: Array[String]): Unit = {
@fancellu
fancellu / Fs2Queues.scala
Created July 14, 2022 11:27
FS2 cats.effect.Queue example using flatMap or for comprehension
View Fs2Queues.scala
import cats.effect._
import fs2._
import scala.concurrent.duration._
import cats.effect.std._
// FS2 cats.effect.Queue example using flatMap or for comprehension
// Both streams emit nothing, but are effectful, communicating via the queue and updating a sum via the ref
object Fs2Queues extends IOApp.Simple {
@fancellu
fancellu / MyErrsIO.scala
Created March 21, 2022 12:45
A simple example of cat-effect and error handling, with MonadTransformers
View MyErrsIO.scala
import MyErrsIO.Controller.{Request, postTransfer}
import MyErrsIO.Models.Account
import cats.data.Validated.{Invalid, Valid}
import cats.data.{EitherT, OptionT, Validated, ValidatedNec}
import cats.effect._
import cats.implicits._
import scala.util.control.NonFatal
// A simple example of cat-effect and error handling, with MonadTransformers
@fancellu
fancellu / TreeFunctorExample.scala
Last active September 14, 2021 20:31
Example of Tree Functor usage in Cats
View TreeFunctorExample.scala
import cats._
object TreeFunctorExample {
def main(args: Array[String]): Unit = {
sealed trait Tree[+T]
case class Leaf[+T](value: T) extends Tree[T]
case class Branch[+T](value: T, left: Tree[T], right: Tree[T]) extends Tree[T]
@fancellu
fancellu / Intersect.scala
Created May 28, 2021 10:28
Finds the elements shared by 2 lists, FP style, recursively
View Intersect.scala
object Intersect extends App{
import scala.annotation.tailrec
// finds the elements shared by 2 lists, FP style, recursively
// O(n log n)
@tailrec
def scan(x: List[Int], y: List[Int], out: List[Int] = List.empty[Int]): List[Int] =
(x, y) match {
@fancellu
fancellu / WaysToTraverseGrid.scala
Last active September 14, 2021 20:32
3 Methods to find how many Ways To Traverse a Grid
View WaysToTraverseGrid.scala
import scala.annotation.tailrec
/** width by height grid
starting top left
how many ways to travel to bottom right?
can only go right or down
3 methods shown
**/
object WaysToTraverseGrid extends App{
@fancellu
fancellu / NumberToWords.scala
Created May 12, 2021 18:31
NumberToWords converts an Int into English words
View NumberToWords.scala
// NumberToWords converts an Int into English words
object NumberToWords extends App{
val num2Word=Map((0, "Zero"), (1, "One"),
(2, "Two"), (3, "Three"),
(4, "Four"), (5, "Five"),
(6, "Six"), (7, "Seven"),
(8, "Eight"), (9, "Nine"),
(10, "Ten"), (11, "Eleven"),
@fancellu
fancellu / TopBottomN.scala
Last active September 14, 2021 20:32
// Top and bottom N max/min items from an Array, with no need to sort
View TopBottomN.scala
// Top and bottom N max/min items from an Array, with no need to sort
object TopBottomN extends App {
def bottomN(a: Array[Int], n: Int): Array[Int] = {
val smallestVals = Array.fill(n)(Int.MaxValue)
a.foreach { number =>
var inserted=false
(n - 1 to 0 by -1).foreach { pos =>
@fancellu
fancellu / scala_play_css_tip.txt
Last active February 25, 2021 13:46
Tip to have CSS with Play Twirl, if SASS isn't powerful enough for you...
View scala_play_css_tip.txt
def css = Action {
val css: TxtFormat.Appendable =views.txt.css()
Ok(css).as("text/css")
}
inside HTML
<link rel="stylesheet" href="@routes.HomeController.css()"/>
@fancellu
fancellu / NullBooleanReads.scala
Created August 27, 2020 10:26
NullBooleanReads for play-json. Sometimes dirty json has a boolean of "null". This takes it to mean false
View NullBooleanReads.scala
implicit object NullBooleanReads extends Reads[Boolean] {
def reads(json: JsValue): JsSuccess[Boolean] = json match {
case JsBoolean(b) => JsSuccess(b)
case _ => JsSuccess(false)
}
}