Skip to content

Instantly share code, notes, and snippets.

View SegFaultAX's full-sized avatar

Michael-Keith Bernard SegFaultAX

View GitHub Profile
@SegFaultAX
SegFaultAX / creates.rb
Created January 18, 2018 00:45
Parse Graphite creates log and render as a tree [Ruby]
class Node
attr_reader :name
def initialize(name)
@name = name
@children = []
end
def children
@children.dup.freeze
@SegFaultAX
SegFaultAX / sensu.rb
Created March 13, 2018 00:08
Dead simple Sensu API wrapper [Ruby]
require 'rest-client'
require 'json'
module Sensu
class Server
attr_reader :name, :hostname, :port
def initialize(name, hostname, port = 4567)
@name = name
@hostname = hostname
@port = port
@SegFaultAX
SegFaultAX / Expr.java
Last active May 14, 2018 23:28
Example type-safe pattern matching [Java]
package com.mkbernard.functional.examples;
import java.util.List;
import java.util.function.Function;
import com.google.common.collect.ImmutableList;
public abstract class Expr<A> {
public abstract <T> T match(Function<Value<A>, T> value, Function<Add<A>, T> add);
@SegFaultAX
SegFaultAX / Coproduct.java
Last active May 15, 2018 15:56
Pattern matching via `Coproduct<A, B>` [Java]
package com.mkbernard.functional.examples;
import java.util.function.Function;
public abstract class Coproduct<A, B> {
public abstract boolean isLeft();
public abstract boolean isRight();
public abstract Left<A, B> left();
public abstract Right<A, B> right();
@SegFaultAX
SegFaultAX / Const.java
Last active June 20, 2018 00:49
Example of van Laarhoven Lenses [Java]
import java.util.function.Function;
public class Const<A, B> implements Functor<B> {
private final A value;
private Const(A value) {
this.value = value;
}
public static <A, B> Const<A, B> of(A value) {
@SegFaultAX
SegFaultAX / TableTest.java
Last active September 26, 2018 21:19
Functional relational joins [Java]
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@SegFaultAX
SegFaultAX / ChainTest.java
Created October 1, 2018 21:32
An either-based pipeline example [Java]
import static org.assertj.core.api.Assertions.assertThat;
import java.util.function.Function;
import org.junit.Test;
import io.atlassian.fugue.Either;
public class ChainTest {
static class Context<T, Status extends Enum<Status>> {
@SegFaultAX
SegFaultAX / Fold.java
Last active October 6, 2018 18:21
Functional composable applicative streaming folds [Java]
import java.util.Collection;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
public interface Fold<Acc, From, To> {
Acc empty();
Acc step(Acc acc, From x);
To combine(Acc acc);
@SegFaultAX
SegFaultAX / Monoid.java
Last active October 6, 2018 18:23
Functional composable applicative streaming monoidal folds [Java]
import java.util.function.BiFunction;
import java.util.function.Supplier;
public interface Monoid<T> extends Semigroup<T> {
T empty();
static <T> Monoid<T> of(Supplier<T> v, BiFunction<T, T, T> app) {
return new Monoid<>() {
@Override
public T empty() {
@SegFaultAX
SegFaultAX / Fold.java
Last active October 8, 2018 21:32
Functional composable applicative streaming monoidal folds v2 [Java]
import java.util.Collection;
import java.util.List;
import java.util.function.Function;
public interface Fold<Acc, From, To> {
Monoid<Acc> ev();
Acc quantify(From x);
To combine(Acc acc);
default To fold(Collection<From> xs) {