Nido.JS | Mónadas -> Lista

Jan 27 2023
La mónada List, también conocida como mónada Array, es una mónada que se utiliza para representar cálculos que pueden tener múltiples resultados posibles. Es una mónada que envuelve una matriz y le permite usar los métodos monádicos como map, chain, flatMap, etc.

La Listmónada, también conocida como Arraymónada, es una mónada que se utiliza para representar cálculos que pueden tener múltiples resultados posibles. Es una mónada que envuelve una matriz y le permite usar los métodos monádicos como map, chain, flatMap, etc. en la matriz.

La Listmónada normalmente se implementa como un objeto que tiene un solo método flatMapque aplica una función a cada elemento de una matriz y concatena los resultados.

Aquí hay un ejemplo de la Listmónada en JavaScript:

class List {
  constructor(values) {
    this.values = values;
  }
  flatMap(f) {
    return new List(this.values.reduce((acc, x) => acc.concat(f(x)), []));
  }
}

const list = new List([1, 2, 3]);
const result = list.flatMap(x => [x * 2, x * 3]);
console.log(result.values); // [2, 3, 4, 6, 6, 9]

Por ejemplo, podría crear una Listque envuelva una matriz de números y luego usar el flatMapmétodo para aplicar una función a cada elemento de la matriz y concatenar los resultados. Luego, podría encadenar varios de estos cálculos para crear un cálculo más complejo.

Aquí hay un ejemplo de cómo podría usar ListMonad en Nest.js:

import { Injectable } from '@nestjs/common';
import { List } from 'fp-ts/lib/List';

@Injectable()
export class MyService {
  public async getUsers(): Promise<List<User>> {
    const users = await this.userRepository.find();
    return List.fromArray(users);
  }

  public async getUserById(id: string): Promise<List<User>> {
    const user = await this.userRepository.findOne(id);
    return List.of(user);
  }
}

Puede encadenar varios cálculos utilizando los métodos .map(), .filter(), .reduce().

myService.getUsers()
  .map(users => users.filter(user => user.age > 18))
  .map(users => users.map(user => user.name))
  .map(users => users.reduce((acc, curr) => acc + ', ' + curr))
  .fold(error => console.log(error), result => console.log(result))

Es importante tener en cuenta que este ejemplo es básico y no demuestra todo el poder de Monads en la programación funcional. Las mónadas se pueden usar para manejar varios casos, como el manejo de errores, el encadenamiento de múltiples cálculos y más. Es mejor comprender el problema y los casos de uso antes de aplicar las mónadas.

Lista de piezas: