Skip to content

Instantly share code, notes, and snippets.

View VincentCordobes's full-sized avatar
👋
Hello, world!

Vincent Cordobes VincentCordobes

👋
Hello, world!
View GitHub Profile
@VincentCordobes
VincentCordobes / remove_watson_project.sh
Last active August 27, 2022 10:58
Remove all frames related to a watson project named 'test'
watson log | awk '/test/ {print $1}' | xargs -I{} watson remove -f {}
@VincentCordobes
VincentCordobes / reader.ml
Created April 6, 2019 19:19
Simple Reader monad in OCaml
module Reader = struct
type ('e, 'a) t = Reader of ('e -> 'a)
let run = function
| Reader r -> r
let map f m = Reader (fun env -> f (run m env))
let bind f m = Reader (fun env -> run (f (run m env)) env)
module Result = struct
type ('a, 'b) t = Ok of 'a | Error of 'b
let return a = Ok a
let map f m =
match m with
| Ok a -> Ok (f a)
| Error b -> Error b
type List<T> =
| { type: "Empty" }
| {
type: "List";
head: T;
list: List<T>;
};
// use it like so
function empty<T>(): List<T> {
import { Result, Ok, isOk, succeed, fail, Err } from "./Result";
// Experimenting some stuff in there
type GeneratorResult<T, E> = IterableIterator<Result<T, E>>;
function addOne(a: number): number {
return a + 1;
}
type Add = (a: number) => (b: number) => (c: number) => number;
const add: Add = a => b => c => a + b + c;
const r = succeed(4).map(add).ap(fail(['err1'])).ap(fail(['err2']));
// const r = succeed(add).ap(succeed(4)).ap(succeed(1)).ap(succeed(2));
// console.log(r);
type Person = {
export type Result<T, E> = Ok<T, E> | Err<T, E>
class Ok<T, E> {
value: T;
constructor(v: T) {
this.value = v
}
bind<U>(f: (v: T) => Result<U, E>): Result<U, E> {
return f(this.value);

Keybase proof

I hereby claim:

  • I am vincentcordobes on github.
  • I am vincentcordobes (https://keybase.io/vincentcordobes) on keybase.
  • I have a public key ASBpuGtIzpS2pRXqqeIrUFmWz7-GEk9McG_c05yuWn_BzAo

To claim this, I am signing this object: