Nest.JS | Monads -> Maybe -> Make

NodeTeam
2 min readJan 27, 2023

It is a factory method that takes the inner value and wraps it into the appropriate Monad instance. The make method is often used as an alternative to the constructor to create monad instances. It is commonly used to create monads in a more composable way, and it can be used to add more logic or additional behavior to the monad instance, as well as to prevent client code from creating instances of monads with invalid inner values.

Here’s an example of a make method that creates a Maybe monad in JavaScript:

class Maybe {
static make(value) {
if (value === null || value === undefined) {
return new Nothing();
} else {
return new Just(value);
}
}
// ...
}

const maybeNumber = Maybe.make(2); // Just(2)
const nothing = Maybe.make(null); // Nothing

In this example, the make method is a static method that is used to create instances of the Maybe monad. It checks the input value and based on that it returns an instance of Just or Nothing accordingly.

In Nest.js, the make method is a helper function that can be used to create a new instance of a Monad. The make method takes a value and returns a new instance of the Monad.

Here’s an example of how you could use the make method to create a new instance of the Maybe Monad in Nest.js:

import { Injectable } from '@nestjs/common';
import { Maybe, make } from 'fp-ts/lib/Maybe';

@Injectable()
export class MyService {
public findUserById(id: number): Maybe<User> {
const user = findUserInDB(id);
return make(user);
}
}

In this example, the MyService class has a method findUserById(id: number) that returns an instance of the Maybe Monad, which wraps a User object if one is found by the findUserInDB(id) function, or none if no user is found.

make(user) will return some(user) if user is not null or undefined, otherwise it will return none.

You can also use the .map() function to transform the wrapped value if it exists, and .chain() function to chain multiple maybe computations.

It’s important to note that this example is a basic one and doesn’t demonstrate the full power of Monads in functional programming. Monads can be used to handle various cases like error handling, chaining multiple computations and more, it’s best to understand the problem and use cases before applying monads.

If you have any questions or feedback about this article, feel free to leave a comment.
Thanks for reading and let’s join our team.

--

--