Skip to content

Instantly share code, notes, and snippets.

@jnape
jnape / gist:6329963
Created August 24, 2013 19:27
Suggested TravisCI CSS changes for better scrolling experience
#top:
Change: position: absolute; to position: fixed;
Change: top: -40px; to top: 0;
#left, #right:
Change: position: relative; to position: fixed;
#main:
Remove: position: relative;
Add: margin-left: 381px;
@jnape
jnape / List.hs
Created December 15, 2014 19:21
Haskell's missing core type classes
module MissingTypeClassesIntegration.List where
import MissingTypeClasses
import Prelude hiding (foldl, foldl1, foldr, foldr1, map, filter, zip)
instance RecursiveDataStructure [] where
unit = []
cons = (:)
instance LeftFoldable [] where
@jnape
jnape / BiFunctor.java
Last active August 29, 2015 14:20
Continuation-like iterable type
package com.jnape.palatable.lambda.applicative;
import com.jnape.palatable.lambda.functions.MonadicFunction;
import static com.jnape.palatable.lambda.functions.builtin.monadic.Identity.id;
@FunctionalInterface
public interface BiFunctor<A, B> {
default <C> BiFunctor<C, B> biMapL(MonadicFunction<? super A, ? extends C> fn) {
@jnape
jnape / TypeUnifailcation.java
Last active March 12, 2016 06:16
Java8 invokeinterface type-unification bug
package example;
import java.util.Optional;
class Foo {}
interface Bar {
String barMethod();
}
public class TypeUnifailcation extends Foo implements Bar {
@jnape
jnape / Hylomorphism.java
Created September 3, 2016 20:59
General recursion with Elgot algebras
import com.jnape.palatable.lambda.adt.Either;
import com.jnape.palatable.lambda.functions.Fn3;
import com.jnape.palatable.lambda.functor.Functor;
import com.jnape.palatable.lambda.functor.builtin.Identity;
import java.util.function.Function;
import static com.jnape.palatable.lambda.adt.Either.left;
import static com.jnape.palatable.lambda.adt.Either.right;
import java.io.IOException;
public class ExceptionalExceptionHandling {
public static void main(String[] args) {
ThrowingSupplier<IllegalStateException, String> wellTyped = () -> {
throw new IllegalStateException();
};
ThrowingSupplier<RuntimeException, String> wellTypedButUnnecessary = () -> {
public class WreckedCast {
@SuppressWarnings("unchecked")
static <P, PP extends Parametric<P>> PP wreckedCast(Parametric<? extends Parametric<P>> ppp) {
return (PP) ppp.extract();
}
public static void main(String[] args) {
// java.lang.ClassCastException: WreckedCast$Parametric$$Lambda$1/1607521710 cannot be cast to java.lang.String
System.out.println(wreckedCast(Parametric.parametric(Parametric.parametric(1))));
public static class SetIsNotAFullyFaithfulFunctor {
public static void main(String[] args) {
class Mod {
private final int mod;
private final int value;
Mod(int mod, int value) {
this.mod = mod;
this.value = value;
}
@jnape
jnape / Spike.java
Created December 27, 2017 20:15
Type-level encoding and optimization of tail recursive functions in Java with Lambda
package spike;
import com.jnape.palatable.lambda.adt.choice.Choice2;
import com.jnape.palatable.lambda.adt.coproduct.CoProduct2;
import com.jnape.palatable.lambda.functions.Fn1;
import com.jnape.palatable.lambda.functions.Fn2;
import com.jnape.palatable.lambda.functions.builtin.fn2.Cons;
import com.jnape.palatable.lambda.functor.Bifunctor;
import java.util.Iterator;
@jnape
jnape / SizedIterable.java
Created January 24, 2018 23:10
Dependently-typed Iterable
package example;
import com.jnape.palatable.lambda.functions.builtin.fn2.Cons;
import com.jnape.palatable.lambda.functions.builtin.fn2.Snoc;
import java.util.Iterator;
import static com.jnape.palatable.lambda.functions.builtin.fn3.FoldLeft.foldLeft;
import static example.SizedIterable.Nat.s;
import static example.SizedIterable.Nat.stringify;