Skip to content

Instantly share code, notes, and snippets.

View 7h3kk1d's full-sized avatar

Alexander Bandukwala 7h3kk1d

View GitHub Profile
@7h3kk1d
7h3kk1d / Dog.java
Created October 28, 2022 01:49
Monadic SQL Transactions
import java.sql.Date;
public record Dog(String name, Date birthdate) {}
@7h3kk1d
7h3kk1d / TransactionExample.java
Created October 26, 2022 14:28
Transactional Example
public class TransactionExample {
public static void main(String[] args) {
Transactor<IO<?>, Unit, String> transactor = new Transactor<>() {
@Override
public <A> IO<Either<String, A>> runTransactional(Transactional<IO<?>, String, Unit, A> transactional) {
Unit connection = UNIT;
return IO.io(() -> System.out.println("Starting Transaction"))
.discardL(transactional.run(connection)
.<IO<Either<String, A>>>coerce()
.flatMap(e -> e.match(s -> IO.io(() -> System.err.printf("Rolling back transaction due to %s%n", s)),
@7h3kk1d
7h3kk1d / Failable.java
Created July 22, 2022 22:23
Failable Monad
public sealed interface Failable<A> extends CoProduct2<List<String>, A, Failable<A>>, Monad<A, Failable<?>> {
@Override
default <B> Failable<B> flatMap(Fn1<? super A, ? extends Monad<B, Failable<?>>> fn1) {
return match(Failed::new, fn1.fmap(Monad::coerce));
}
@Override
default <B> Failable<B> pure(B b) {
return new Success<>(b);
}
@7h3kk1d
7h3kk1d / hkd_class.java
Last active July 17, 2022 20:22
Higher Kinded Data Pattern in Lambda
public class Person<F extends MonadRec<?, F>> {
MonadRec<Integer, F> age;
MonadRec<String, F> name;
public Person(MonadRec<Integer, F> age, MonadRec<String, F> name) {
this.age = age;
this.name = name;
}
public static Person<ReaderT<String, Either<String, ?>, ?>> personValidation() {
@7h3kk1d
7h3kk1d / echo.java
Created November 1, 2021 17:19
An example of an algorithm being parametric in it's monad to be used with or without IO
package com.thekkid.ninetyninelambdas.problems;
import com.jnape.palatable.lambda.adt.Unit;
import com.jnape.palatable.lambda.functions.builtin.fn2.ToCollection;
import com.jnape.palatable.lambda.functor.builtin.State;
import com.jnape.palatable.lambda.io.IO;
import com.jnape.palatable.lambda.monad.MonadRec;
import java.util.ArrayList;
import java.util.Collections;
@7h3kk1d
7h3kk1d / bool
Created April 8, 2020 00:40
bool.java
public abstract class Bool extends Number implements CoProduct2<Bool.False, Bool.True, Bool> {
@Override
public byte byteValue() {
return match(constantly((byte) 0),
constantly((byte) 1));
}
@Override
public short shortValue() {
return byteValue();
Prelude> [\x -> x + 1, \x -> x -1] <*> [1,2]
[2,3,0,1]
Prelude> [1,2] >>= \y -> [y+1, y-1]
[2,0,3,1]
import random
while True:
a = [random.randint(1, 6), random.randint(1, 6), random.randint(1, 6), random.randint(1, 6)]
print(a)
if len(set(a)) == 1:
break
@7h3kk1d
7h3kk1d / humble_bundle_file_downloader.js
Created February 25, 2018 00:00 — forked from tlc/humble_bundle_file_downloader.js
Download HumbleBundle book bundles easier. Puts 'curl' statements on the page for you to copy.
/* 11/27/2017 - Tweaked for a page redesign.
* 1/6/2018 - Handle videos in book bundle.
*/
var pattern = /(MOBI|EPUB|PDF( ?\(H.\))?|CBZ)$/i;
var pattern2 = /(Download)$/;
var nodes = document.getElementsByTagName('a');
var downloadCmd = '';
for (i in nodes) {
var a = nodes[i];
if (a && a.text && pattern.test(a.text.trim())) {
@7h3kk1d
7h3kk1d / keybase.md
Created August 26, 2016 17:51
Keybase proof

Keybase proof

I hereby claim:

  • I am 7h3kk1d on github.
  • I am abanduk (https://keybase.io/abanduk) on keybase.
  • I have a public key whose fingerprint is E989 E899 2A5D 1100 8C31 7ED4 E464 5514 8FC6 DE3D

To claim this, I am signing this object: