Skip to content

Instantly share code, notes, and snippets.

View Nymphium's full-sized avatar
⚜️
百合

Nymphium Nymphium

⚜️
百合
View GitHub Profile
#lang racket
(provide (except-out (all-defined-out) with-free Pure Free))
(require racket/control)
(struct Pure (r) #:transparent)
(struct Free (a k) #:transparent)
; (: compose [All (a b c) (-> (-> a b) (-> b c) (-> c d))])
@Nymphium
Nymphium / 集計くん.sh
Last active April 15, 2025 07:51
./集計くん.sh "2024-01-01" "2024-12-31" # displays the PRs each which you created between $1 and $2, and merged under the current dir, recursively
#!/usr/bin/env bash
set -eu
from_date=${1:-"2024-10-01"}
to_date=${2:-"2025-03-31"}
total=0
f() {
local eff = require('eff')
local inst, perform, handler = eff.inst, eff.perform, eff.handler
local Twice = inst()
local Exit = inst()
--[[
co = {
print(1)
coroutine.yield() -- *1
@Nymphium
Nymphium / main.ml
Last active February 8, 2023 14:21
[@@@alert "-unstable"]
[@@@warning "-32"]
(* Reimplementation of Go's worker pools using Eio and Domainslib.Chan
https://gobyexample.com/worker-pools
*)
module Stdenv = struct
type _ Effect.t += Get : (Eio.Stdenv.t * Eio.Switch.t) Effect.t
@Nymphium
Nymphium / eff.ml
Last active December 7, 2021 07:35
type (_, _) operation = ..
type 'a computation =
| Return : 'a -> 'a computation
| Call : ('arg, 'res) operation * 'arg * ('res -> 'a computation) -> 'a computation
type ('a, 'b) handler = {
return : 'a -> 'b computation;
operations : 'arg 'res. ('arg, 'res) operation ->
'arg -> ('res -> 'b computation) -> 'b computation
@Nymphium
Nymphium / main.ts
Created July 22, 2019 00:30
algebraic effects using stricter generator (is too hard or impossible).
interface Get {
readonly _tag: 'Get';
readonly _ans: number;
}
interface Put {
readonly _tag: 'Put';
readonly _ans: void;
value: number;
}
type (_, _) cont =
Cont : (('a -> 'r) -> 'r) -> ('r, 'a) cont
let runCont : ('r, 'a) cont -> ('a -> 'r) -> 'r
= fun (Cont f) k -> f k
let runCont' k cf = runCont cf k
let return x = Cont((|>) x)
const Read = (key) => ({type : 'Read', arguments : [ key ]});
const Write = (key, value) => ({type : 'Write', arguments : [ key, value ]});
const performWith = (handler, eff) =>
new Promise(() => { throw eff; }).catch(handler);
async function go(handler) {
const x = await performWith(handler, Read("x"));
await performWith(handler, Write("z", x + 4));
const z = await performWith(handler, Read("z"));
@Nymphium
Nymphium / typed-delimcc.kk
Last active December 7, 2021 07:17
typed prompt-less shift/reset in Koka language
module typed-delimcc
public effect subcont0<a> {
fun shift0(f : (b -> a) -> a) : b
}
public fun reset0(th : () -> subcont0<a> a) : a {
handle(th) {
shift0(f) -> f(resume)
}
module type NATURAL = sig
type t
val build : ((t -> t) -> t -> t) -> t
end
module type BUILD_NATURAL = functor
(M : sig
type t