Ramda: A Practical Functional Programming Library

0.32.0 · active · verified Sun Apr 19

Ramda is a JavaScript library designed explicitly for a functional programming style, emphasizing immutability and side-effect-free operations. Unlike general-purpose toolkits, Ramda focuses on enabling easy creation of functional pipelines. Its functions are automatically curried, allowing for the composition of new functions by partially applying parameters, and parameters are consistently arranged with the data-to-be-operated-on supplied last. This design makes it highly suitable for point-free style programming. The current stable version is 0.32.0, with minor releases occurring every few months, often including breaking changes outlined in detailed upgrade guides. Ramda's core philosophy is practical functional JavaScript, using plain JavaScript objects and arrays, and prioritizing a clean API and performance over strict purity enforcement.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates Ramda's core features: piping, filtering, mapping, currying, and immutability to process and transform a list of user objects.

import * as R from 'ramda';

interface User {
  id: number;
  name: string;
  email: string;
  isActive: boolean;
}

const users: User[] = [
  { id: 1, name: 'Alice', email: 'alice@example.com', isActive: true },
  { id: 2, name: 'Bob', email: 'bob@example.com', isActive: false },
  { id: 3, name: 'Charlie', email: 'charlie@example.com', isActive: true },
  { id: 4, name: 'David', email: 'david@example.com', isActive: false },
];

// Get active user names, sorted alphabetically
const getActiveUserNames = R.pipe(
  R.filter(R.propEq('isActive', true)),
  R.map(R.prop('name')),
  R.sort(R.ascend(R.identity))
);

const activeNames = getActiveUserNames(users);
console.log('Active users (names):', activeNames);

// Create a curried function to update a user's status
const deactivateUser = R.curry((userId: number, userList: User[]) =>
  R.map((user: User) =>
    R.when(R.propEq('id', userId), R.assoc('isActive', false))(user)
  )(userList)
);

const updatedUsers = deactivateUser(1, users);
console.log('Updated users (deactivated ID 1):', updatedUsers.find(u => u.id === 1));

// Example of partial application
const getEmails = R.map(R.prop('email'));
const allEmails = getEmails(users);
console.log('All user emails:', allEmails);

view raw JSON →