zoukankan      html  css  js  c++  java
  • [Functional Programming] Arrow contramap vs map and promap

    In previous post, Arrow Functor with contramap, we have seen how to opreating on params before we invoke the function by using Arrow + contramap. It happens before function get inovked, before we get result. We can say this opreation happens on the left hand side of function (which is the params).

    In this post, we will see how to opreate on the right handside of function, which is our result.

    const Arrow = require('crocks/Arrow');
    const chain = require('crocks/pointfree/chain');
    const option = require('crocks/pointfree/option');
    const prop = require('crocks/Maybe/prop');
    const safe = require('crocks/Maybe/safe');
    
    const getName = compose(
        option('no name'),
        chain(safe(isString)),
        prop('name')
    )
    const arrUpper = Arrow(
        str => str.toUpperCase()
    )
    const welcome = str => `Welcome. ${str}!`;
    const nameUpper = arrUpper
        .contramap(getName)
        .map(welcome)
    
    log(
        nameUpper.runWith({name: 'zhentian'})
    ) // 'Welcome. ZHENTIAN!'

    So after 'contramap', we chian 'map(welcome)'. this will wrap the result from 'arrUpper' into a new String.

    Notice that it is equivalent that:

    const nameUpper = arrUpper
        .map(welcome)
        .contramap(getName)
    
    const nameUpper = arrUpper
        .contramap(getName)
        .map(welcome)

    We can also shorter the syntax by using 'promap', it is the same as 'contramap + map':

    const nameUpper = arrUpper
        .promap(getName, welcome)
  • 相关阅读:
    hdu5247找连续数(打表)
    hdu5246超级赛亚ACMer
    hdu5246超级赛亚ACMer
    cf534D 枚举握手次数
    cf534D 枚举握手次数
    4467奇妙的方式优化暴力的01边查询
    4467奇妙的方式优化暴力的01边查询
    POJ1364基本的查分约束问题
    POJ1364基本的查分约束问题
    poj1509最小表示法
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10590833.html
Copyright © 2011-2022 走看看