Monads- Maybe.exmaples.js
https://github.com/eu81273/jsfiddle-console
by dimitrs_papadimitriou
HTML
<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>
JavaScript
const some = v => ({
map: f => some(f(v)),
bind: f => f(v),
cata: alg => alg.some(v)
});
const none = () => ({
map: () => none(),
bind: () => none(),
cata: alg => alg.none()
});
Array.prototype.safeHead = function () {
return this.length > 0 ?
some(this[0]) :
none()
}
var clientRepository = ({
getById: (id) =>
[{ id: 1, name: 'Joan', age: 29, employeeId: 1 },
{ id: 2, name: 'Rick', age: 25, employeeId: 2 }]
.filter(c => c.id == id)
.safeHead()
});
var employeeRepository = ({
getById: (id) =>
[{ id: 1, name: 'jim', age: 29 },
{ id: 2, name: 'jane', age: 25 }]
.filter(employee => employee.id == id)
.safeHead()
});
var displayAssignedEmployeeForClientId = (clientId) =>
clientRepository
.getById(clientId)
.bind(client => employeeRepository.getById(client.employeeId))
.map(e=>e.name)
.cata({
some: name => console.log("assigned Employee name: " + name),
none: _ => console.log("client is not assigned ")
});
displayAssignedEmployeeForClientId(1)
displayAssignedEmployeeForClientId(5)