Skip to content

Instantly share code, notes, and snippets.

View srdjan's full-sized avatar

⊣˚∆˚⊢ srdjan

View GitHub Profile
@srdjan
srdjan / functional-reffactoring.js
Last active August 29, 2015 14:04
Simple functional refactoring
// original code
function printTrace(log) {
for (var i = 0; i < log.length; i++) {
var entry = log[i];
var args = entry.args;
var argstring = "(";
for (var j = 0; j < args.length - 1; j++) {
argstring += args[j].toString() + ",";
}
if (args.length > 0) {
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);
}
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;
//-- 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();
}
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)
@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 =>
{ /*...*/ }
Verifying that +srdjan is my openname (Bitcoin username). https://onename.com/srdjan
//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 ->
@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
@srdjan
srdjan / gist:1300262
Created October 20, 2011 02:27
angularjs mvctodo app with coffeescript controller
@TodoController = () ->
@todos = []
@newTodo = ""
@addTodo = () ->
if @newTodo.length > 0
@todos.push( { content: @newTodo, done: false, editing: false } )
@newTodo = ""
@editTodo = (todo) ->