Skip to content

Instantly share code, notes, and snippets.

Avatar

Aggelos Biboudis biboudis

View GitHub Profile
@biboudis
biboudis / BFN.scala
Last active Dec 8, 2020
Breadth-first labeling via queue/zipper in Scala
View BFN.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 {
@biboudis
biboudis / Virtualized.scala
Last active Dec 2, 2020
Virtualization in Scala 3 with givens
View Virtualized.scala
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 / Matrix.scala
Last active Nov 15, 2020
Type your matrices for great good
View Matrix.scala
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 / Functional Unparsing.scala
Last active Jan 30, 2018
A simple type-safe formatter in Scala based on the "Functional Unparsing" paper by Olivier Danvy
View Functional Unparsing.scala
// 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 / FRP.scala
Created Jun 14, 2017
Martin's complete, FRP example from coursera.
View FRP.scala
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 / Fluent.scala
Created Apr 18, 2017
Adding a fluent API to a tagless interpreter via implicit function types
View Fluent.scala
object Fluent {
trait Foo[C[_]] {
def meth1[T]() : C[T]
}
trait ConcreteC[T]
class Lib[ElemT]{
View gist:52fa07ba3ea1abc7ce20
package builders;
import java.util.function.Function;
public class Cont {
interface K<A, B, C> extends Function<Function<A, B>, C>{ }
/*
* Step 1: https://en.wikibooks.org/wiki/Haskell/Continuation_passing_style
* ---> just transforming continuations of type (a->r)->r to polymorphic (a->b)->c
@biboudis
biboudis / power.ml
Last active Oct 8, 2018
Staged power, with fixed, with staged fix.
View power.ml
(* http://fssnip.net/sE in BER MetaOCaml *)
open Runcode;;
let rec fix : (('a -> 'b) -> ('a -> 'b)) -> 'a -> 'b = fun f x ->
f (fix f) x;;
let fix' : (('a -> 'b) code -> ('a -> 'b) code) -> ('a -> 'b) code = fun f ->
.< fun x -> let rec loop x = (fun f' -> .~(f .<f'>.) ) loop x in
loop x >.;;
@biboudis
biboudis / Mandelbrot.java
Last active Aug 29, 2015
Test sequential and parallel mandelbrot in Java 8 with JMH. (http://openjdk.java.net/projects/code-tools/jmh/)
View Mandelbrot.java
package benchmark;
import java.util.stream.*;
import org.openjdk.jmh.annotations.*;
import java.util.concurrent.TimeUnit;
import java.util.*;
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
public class MyBenchmark {