Nido.JS | Mónadas -> Lista
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:

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































