zoukankan      html  css  js  c++  java
  • [Functional Programming] Function modelling -- 8. Compose Functors

    Path: Compose Functors -> Monad Transformers -> Free Monad

    Compose Functors:

    Let's say we have a Task holding a Either. And we want simply apply a .map() function to transform the value inside TaskEither.

    Like this:

    const TaskEither = Compose(Task, Either);
    
    TaskEither.of(2)
      .map((two) => two + 1)
      .extract()
      .fork(console.error, (either) => either.fold(console.log, console.log));

    So how to make TaskEither composion?

    const Task = require("data.task");
    const Either = require("data.either");
    
    const Compose = (F, G) => {
      const M = (fg) => ({
        extract: () => fg,
        map: (f) => M(fg.map((g) => g.map(f))),
      });
      M.of = (x) => M(F.of(G.of(x)));
      return M;
    };
    
    const TaskEither = Compose(Task, Either);
    
    TaskEither.of(2)
      .map((two) => two + 1)
      .extract()
      .fork(console.error, (either) => either.fold(console.log, console.log));

    Compose Functors can provide a way to map into nested Functors. But it cannot do chain.

    So it is useful in one way, but useless in another. 

    Not commonly used.

    In next post, we will have a look Monads Transfomers to solve the problem that we cannot do chain in compose functors.

  • 相关阅读:
    提取ecshop的mysql类
    phpexcel读取excel的xls xlsx csv格式
    Awstats显示国家地区插件GeoIP安装
    GeoIP Legacy City数据库安装说明
    JavaArrayList和数组间的相互转换
    mysql 初步认识
    HTTP ContentType
    ibatis 增加调试方法
    你了解Java中的Future吗?
    Java 环境问题总结
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13207962.html
Copyright © 2011-2022 走看看