by Ossi Hanhinen, @ohanhi
with the support of Futurice 💚.
Licensed under CC BY 4.0.
| #!/usr/bin/env bash | |
| # Browse Ramda documentation in Terminal | |
| # Requires jq and a tool such as fzf or peco for interactive filtering | |
| LATEST="http://raine.github.io/ramda-json-docs/latest.json" | |
| DOCS_URL="http://ramdajs.com/docs/" | |
| json=$(curl -s $LATEST) | |
| functions=$(echo "$json" | jq -r '.[] | if .sig and (.sig | length > 0) then .name + " :: " + .sig else .name end') |
| function mapValues(obj, fn) { | |
| return Object.keys(obj).reduce((result, key) => { | |
| result[key] = fn(obj[key], key); | |
| return result; | |
| }, {}); | |
| } | |
| function pick(obj, fn) { | |
| return Object.keys(obj).reduce((result, key) => { | |
| if (fn(obj[key])) { |
and a potential refactor that could fix that
This is a list of issues and confusions I've encountered with node streams, and things I wish were designed and implemented differently. If promise-streams is ever going to change to a design that doesn't build on top of node streams, this would be a list of mistakes to avoid
enc parameter - Why is encoding always passed together with the data? It should be a separate concern. It doesn't even make sense in objectMode| const daggy = require('daggy') | |
| const {compose, curry, map, prop, identity, intersection, union} = require('ramda'); | |
| const inspect = (x) => { if(!x) return x; return x.inspect ? x.inspect() : x; } | |
| // F-algebras | |
| // Fix | |
| // ============ | |
| // Fx is a simple wrapper that does almost nothing. It's much more useful in typed languages to check that we have a recursive f (Fix f) |
| // http://www.haskellforall.com/2013/02/you-could-have-invented-comonads.html | |
| const daggy = require('daggy'); | |
| const {toUpper, prop, identity, range, curry, compose} = require('ramda'); | |
| const Config = daggy.tagged("opts") | |
| Config.prototype.inspect = function() { | |
| return `Config(${this.opts})` | |
| } |
| const daggy = require('daggy'); | |
| const {foldMap} = require('pointfree-fantasy') | |
| const {concat, toUpper, prop, identity, range, compose} = require('ramda'); | |
| // Contravariant functors usually have this shape F(a -> ConcreteType). | |
| // In other words, some type holding a function which is parametric on its input, but not output. | |
| // They don't always have that shape, but it's a good intuition | |
| // Covariant functors are what we're used to, which are parametric in their output | |
| //================================================================ |
Should be work with 0.18
Destructuring(or pattern matching) is a way used to extract data from a data structure(tuple, list, record) that mirros the construction. Compare to other languages, Elm support much less destructuring but let's see what it got !
myTuple = ("A", "B", "C")
myNestedTuple = ("A", "B", "C", ("X", "Y", "Z"))| CATEGORY THEORY FOR PROGRAMMERS | |
| Category Theory 1.1: Motivation and Philosophy | |
| https://www.youtube.com/watch?v=I8LbkfSSR58&index=1&list=PLbgaMIhjbmEnaH_LTkxLI7FMa2HsnawM_ | |
| Composability, Abstraction, Reusability | |
| Category Theory is a higher-level language. | |
| Not a practical, executable language. |