zoukankan      html  css  js  c++  java
  • [Functional Programming] liftA2 and converge

    Sometimes I am confused with 'liftA2' and 'converge' functions. 

    Main difference between those is that:

      liftA2 takes applicative functor as second and third arguements, for example, array

      converge takes functions as second and third arguements

    // liftA2 :: Applicative m => (a -> b -> c) -> m a -> m b -> m c
    // converge :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
    // liftA2 :: Applicative m => (a -> b -> c) -> m a -> m b -> m c
    // converge :: (b -> c -> d) -> (a -> b) -> (a -> c) -> a -> d
    const { option, curry, liftA2, converge } = require("crocks");
    const { getState } = require("../../helper");
    
    // getColors :: () -> State AppState [String]
    const getColors = () => getState("colors").map(option([]));
    
    // getShapes :: () -> State AppState [String]
    const getShapes = () => getState("shapes").map(option([]));
    
    // buildCard :: String -> String -> Card
    const buildCard = curry((color, shape) => ({
      id: `${color}-${shape}`,
      color,
      shape
    }));
    
    // buildCards :: [String] -> [String] -> [Card]
    const buildCards = liftA2(buildCard);
    
    // generateCards :: () -> State AppState [ Card ]
    const generateCards = converge(liftA2(buildCards), getColors, getShapes);
    
    module.exports = {
      generateCards
    };
  • 相关阅读:
    python之Lambda
    oracle数据处理之expdb/impdb
    oracle之dblink
    oracle数据处理之sql*loader(二)
    exsi主机之间使用scp拷贝文件超时问题
    exsi从磁盘中加载虚拟机
    exsi的虚拟机加载U盘
    python 中的property
    hp服务器安装exsi5.5
    关于vsphere的 许可证配置问题
  • 原文地址:https://www.cnblogs.com/Answer1215/p/11308513.html
Copyright © 2011-2022 走看看