Skip to content

Instantly share code, notes, and snippets.

@mattbierner
mattbierner / gist:6858684
Created October 6, 2013 20:28
Atum: Transactional Try Example
var transactionalTryStatement = function(body, handlerId, handler, finalizer) {
return bind(getState, function(state) { // Get the current state.
return tryStatement( // Then evaluate a try statement with an exception handler that
body, // restores the saved state and executes the passed in handler.
handlerId,
next(setState(state), handler),
finalizer);
});
};
@mattbierner
mattbierner / gist:6891052
Last active December 25, 2015 00:49
Javascript placeholder currying
var _ = {};
var placeholder = function(f /*, ...*/) {
var bound = [].slice.call(arguments, 1);
return function(/*...*/) {
var indx = 0;
return f.apply(f, [].reduce.call(arguments, function(p, c) {
while (indx in bound) {
var val = bound[indx];
if (val === _)
@mattbierner
mattbierner / gist:7474429
Created November 14, 2013 21:14
Atum Line Highlighting Example
model.location.subscribe(\current -> {
if (current && current.start)
cm.removeLineClass(current.start.line - 1, 'background', 'active-line');
}, null, 'beforeChange');
model.location.subscribe(\x -> {
if (x)
cm.addLineClass(x.start.line - 1, 'background', 'active-line');
});
@mattbierner
mattbierner / fac.kep
Created December 10, 2013 17:28
Defunctionalized Javascript Factorial
var fac = let
facImpl = \n, sum ->
(n ? ['fac', n - 1, n * sum] : ['done', sum]),
trampoline = \k -> {
while (true) {
switch (k[0]) {
case 'done': return k[1];
case 'fac': k = facImpl(k[1], k[2]); break
}
@mattbierner
mattbierner / div_and_reg_parser.kep
Last active December 30, 2015 22:49
Example division and regular expression parser
var idToken = letter;
var divToken = character('/');
var regularExpressionToken = binds(
enumeration(
between(character('/'), character('/'),
eager <| many(letter)),
optional('', letter)),
\body, flag ->
always('/' + body +'/' + flag + ')'));
@mattbierner
mattbierner / pre-commit
Last active January 3, 2016 22:29
khepri git hook
#!/bin/sh
KHEPRI="khepri"
OPTIONS=""
SRC=lib
DEST=dist
DEST_NODE=dist_node
function _compile {
var words = function(count, wl) {
var out = [];
for (var i = 0; i < count; ++i) {
var len = Math.ceil(Math.random() * wl);
var w = '';
while (len--)
w += String.fromCharCode('a'.charCodeAt(0) + Math.floor(Math.random() * 26))
out.push(w);
}
return out;
@mattbierner
mattbierner / example.kep
Last active August 29, 2015 13:57
Akh DCont example
with
import 'akh::base' {liftM2},
import 'akh::dcont' {runDCont of shift reset}
in {
var list = liftM2 @ \x y -> [x, y];
runDCont(
reset \ p ->
liftM2((+),
shift @ p \k ->
@mattbierner
mattbierner / gist:a3fc9b33f890134efa12
Created July 24, 2014 16:42
Index sequnece example
// Example only shows expansion logic, not perfect forwarding
template<class F, class T, size_t... I>
auto unpack(F f, T t, std::index_sequence<I...>) {
return f(std::get<I>(t)...);
}
template<class F, class T>
auto tuple_eval(F f, T arg) {
return unpack(f, args, std::make_index_sequence<std::tuple_size<T>::value>());
}
@mattbierner
mattbierner / gist:090a80d25259b6472827
Last active March 5, 2021 13:55
Compile Time Brainfuck C++ Metaprogramming Evaluator
#include <utility>
using iochar = char;
using memval = unsigned char;
/* BF Memory Cell */
template <memval val = 0>
struct Cell {
enum { value = val };