Giter Club home page Giter Club logo

kink's Introduction

Kink

A tiny library for experimenting with CPS-based functional streams.

The underlying currency of kink is the "channel" or "procedure", which does something with its arguments and returns void:

function (/* ... */) {
	// ...
}

Most of the work in kink is handled by the "conduit" or "procedure transformer":

function (output) {
	return function input (/* ... */) {
		output.apply (this, arguments)
	}
}

These conduits are composed from the inside out, starting with kink.end (a procedure that does nothing):

kink.map.each (func) (kink.log (kink.end))

This can be simplified using left-to-right function composition via kink.join:

kink.join (kink.map.each (func), kink.log) (kink.end)

The function kink itself combines composition and kink.end:

kink (kink.map.each (func), kink.log)

In any case, what results from the above composition is a procedure that can be used as a callback:

jQuery (document).on ('keypress', kink (kink.get ('key'), kink.log))

Here are a few more examples, using the following prelude (open kink.html to try it out...):

key = jQuery.fn.on.bind (jQuery (document), 'keypress')
kinky = function (/* ... */) {
	return key (kink.apply (null, arguments))
}

Logging keypress events:

kinky(
	kink.log
)

Logging the key property:

kinky(
	kink.get('key'),
	kink.log
)

Logging numerical keys:

kinky(
	kink.get ('key'),
	kink.scan.each (/\b[0-9]+\b/),
	kink.log
)

Logging numerical values:

kinky(
	kink.get ('key'),
	kink.scan.each (/\b[0-9]+\b/),
	kink.parseIntegers,
	kink.log
)

Logging numerical values * 100:

kinky(
	kink.get ('key'),
	kink.scan.each (/\b[0-9]+\b/),
	kink.parseIntegers,
	kink.map.each (function (n) { return n * 100 }),
	kink.log
)

Logging the 5-value moving average of numerical values * 100:

kinky(
	kink.get ('key'),
	kink.scan.each (/\b[0-9]+\b/),
	kink.parseIntegers,
	kink.map.each (function (n) { return n * 100 }),
	kink.avg (5),
	kink.log
)

Logging the key property in gestures separated by > 200ms:

kinky(
	kink.get ('key'),
	kink.win (200),
	kink.bundle,
	kink.log
)

kink's People

Contributors

goomtrex avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.