[Functional Programming Monad] Apply Stateful Computations To Functions (.ap, .liftA2)

When building our stateful computations, there will come a time when we’ll need to combine two or more state transactions at the same time to come up with a new result. Usually this occurs when want to use plain ol’ JavaScript functions with two or more a arguments as part of our stateful computations.

We first look at how this can be accomplished by using chain and closure to get access to both functions. Then we will explore how we can leverage the of construction helper and the ap Stateinstance method to clean this type of interaction up a bit. We then conclude with an even cleaner approach that takes full advantage of a crocks helper function named liftA2.

 

For example, we have a function:

const namefiy = firstName => lastName => `${lastName}, ${firstName}`;

It should receive two params to return a string.

 

one way is using .ap(), it takes the same input, run with the given functions and return its value, then combine those:

var _getFullName = State.of(namefiy)
    .ap(getFirstName)
    .ap(getLastName)

 

Or we can use .liftA2, it lift the function into State automaticlly:

var getFullName = liftA2(
    namefiy,
    getFirstName,
    getLastName
)

 

----

 

const { liftA2, composeK, Unit, curry, objOf, compose, State, mapProps, prop, option } = require("crocks");

const { put, get, modify } = State;

const namefiy = firstName => lastName => `${lastName}, ${firstName}`;
const getWord = number => name  => name.split(' ')[number];

const getFirstName = get(getWord(0));
const getLastName = get(getWord(1));

var _getFullName = State.of(namefiy)
    .ap(getFirstName)
    .ap(getLastName)

var getFullName = liftA2(
    namefiy,
    getFirstName,
    getLastName
)
console.log(
    getFullName
        .evalWith("John Green")
)

 

转载于:https://www.cnblogs.com/Answer1215/p/10343548.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值