Skip to content

Instantly share code, notes, and snippets.

View srdjan's full-sized avatar

⊣˚∆˚⊢ srdjan

View GitHub Profile
-----BEGIN PGP MESSAGE-----
Version: Keybase OpenPGP v2.0.49
Comment: https://keybase.io/crypto
wcFMA8NHQqEvqEzYAQ/+OjIJxVjUf1J6bbk7y6RBDrOTeKpryZYA7At4j9VT/3pr
bNrsir9UbnRz1JIE9NE+yHE/rSq/xRaolkXo9Rlh8OAj1FYhfHhti7Z7knKl6fJy
Ene3oo8HiJlFXmRSO0W9/nxyffNyL7RL2jgH4ITsArBm75/zkonstXzdO15yASb3
HWxPyb/kw68ixcUIW75n6MGgzmWwXyJov6gJalV6qq0s1eKNUe5VzCrgZr7oxeHL
G/KsFKq1tWMrqZx3B5OpcoFGX6DkjDj6pLvVrO0yIZ0XUcYgNE6ALeYD2LJZbFbl
kMEdCpscXwCTO1x/0lOat62im1qbN0f2g6RZUV4FpJEPD+Uxeu77h6tmLtooP4v1
@srdjan
srdjan / fold.js
Last active September 9, 2015 23:19 — forked from kpuputti/fold.js
Functional acrobatics using folds in JavaScript.
/*eslint-env es6 */
// Inspired by the paper "A tutorial on the universality and
// expressiveness of fold" by Graham Hutton (available at
// http://www.cs.nott.ac.uk/~gmh/fold.pdf), implementing some generic
// list handling functions in JavaScript in terms of `fold`.
// Personally I had an enlightnening moment when I realised the
// beautiful interplay of cons lists and foldr during the FP101x
// Haskell course. JavaScript's syntax doesn't make this very apparent
//scala
vertx.createHttpServer().requestHandler({ req: HttpServerRequest =>
req.response()
.putHeader("Content-Type", "text/html")
.end("<html><body><h1>Hello from Vert.x!" +
"</h1></body></html>")
}).listen(8080)
//groovy
vertx.createHttpServer().requestHandler({ req ->
Verifying that +srdjan is my openname (Bitcoin username). https://onename.com/srdjan
@srdjan
srdjan / cycle-api-sample.js
Last active August 29, 2015 14:12
Cycle api thinkering...
//pseudo code... not compiling
var h = Cycle.h
var FooModel = Cycle.createModel(intent =>
{ /*...*/ }
)
var FooView = Cycle.createView(model =>
{ /*...*/ }
)
var FooIntent = Cycle.createIntent(view =>
{ /*...*/ }
static void Main(string[] args) {
//-1) Maybe monad usage: input regular string, intermediate result int...
var maybeM = new MaybeM<string>("I'm a string, wrapped up in the Maybe Monad!");
var result1 = maybeM.Bind(ExtractVowels)
.Bind(Length);
WriteLine("Result is: \{result1.Show()}");
//-2) Maybe monad usage: null string
maybeM = new MaybeM<string>(null);
var result2 = maybeM.Bind(ExtractVowels)
//-- monad interface
//--
public interface IMonad<T> {
//IMonad<T> From(T @value);//note: implemented as constructor
IMonad<T2> Bind<T2>(Func<T, T2> f) where T2 : class;
// simple access the wrapped value(s), optional but helpfull :)
string Show();
}
var service = require('resto.service');
var pipeline = require('resto.pipeline');
var http = require('resto.httpserver');
var authenticator = require('resto.middleware.authn');
var authorizer = require('resto.middleware.authr');
var resolver = require('resto.middleware.resolver');
var invoker = require('resto.middleware.invoker');
var converter = require('resto.middleware.hal');
//- dsl
var withMany = require('resto.realtionships').hasMany;
var Either = require('data.either');
var log = console.log;
var handlers = [];
function use(f, p, t) {
handlers.push({ func: f, pred: p || false, trace: t || false});
}
// f, ep, m(a) -> m(b)
function run(ctx) {
var i;
for(i=0; i<stash.length; i++) {
if(logBefore) {
trace(stash[i], ctx);
}
stash[i](ctx);
if(logAfter) {
trace(stash[i], ctx);
}