Skip to content

Instantly share code, notes, and snippets.

View biboudis's full-sized avatar

Aggelos Biboudis biboudis

View GitHub Profile
@biboudis
biboudis / Fluent.scala
Created April 18, 2017 16:59
Adding a fluent API to a tagless interpreter via implicit function types
object Fluent {
trait Foo[C[_]] {
def meth1[T]() : C[T]
}
trait ConcreteC[T]
class Lib[ElemT]{
@biboudis
biboudis / FRP.scala
Created June 14, 2017 12:05
Martin's complete, FRP example from coursera.
object FRP {
class Signal[T](expr: => T) {
import Signal._
private var myExpr: () => T = _
private var myValue: T = _
private var observers: Set[Signal[_]] = Set()
update(expr)
protected def update(expr: => T): Unit = {
@biboudis
biboudis / Functional Unparsing.scala
Last active January 30, 2018 14:54
A simple type-safe formatter in Scala based on the "Functional Unparsing" paper by Olivier Danvy
// A simple type-safe formatter in Scala based on the "Functional Unparsing" paper by Olivier Danvy
// http://cs.au.dk/~danvy/DSc/16_danvy_jfp-1998.pdf
object Test {
def eol[A](k: String => A)(s: String): A = {
k(s + "\n")
}
@biboudis
biboudis / Matrix.scala
Last active January 11, 2024 14:50
Type your matrices for great good
import scala.compiletime.ops._
import scala.compiletime.ops.int._
import scala.compiletime.ops.any._
/**
* Type your matrices for great good: a Haskell library of typed matrices and applications (functional pearl)
* https://dl.acm.org/doi/10.1145/3406088.3409019
*/
object Test {
@biboudis
biboudis / Virtualized.scala
Last active December 2, 2020 12:39
Virtualization in Scala 3 with givens
import scala.quoted._
import scala.quoted.util._
import scala.language.implicitConversions
trait Virtualized {
type Cde[A]
given IntPrimitiveMethods as PrimitiveMethods[Int] = IntPrimitiveMethodsImpl
protected val IntPrimitiveMethodsImpl: PrimitiveMethods[Int] = new PrimitiveMethods[Int]{ }
@biboudis
biboudis / BFN.scala
Last active December 8, 2020 00:02
Breadth-first labeling via queue/zipper in Scala
import org.junit.Test
import org.junit.Assert._
import scala.util.chaining._
import scala.collection.mutable.ListBuffer
import scala.language.implicitConversions
// Breadth-first labeling -- http://okmij.org/ftp/Algorithms/BFN.html
// Breadth-First Numbering: An Algorithm in Pictures -- https://okasaki.blogspot.com/2008/07/breadth-first-numbering-algorithm-in.html
// The Under-Appreciated Unfold -- https://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/unfold.ps.gz
class BFNTest {