• [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.

  • 相关阅读:
    Oracle Spool详解
    转自云界漫步:同步容灾100公里的限制来自哪里
    中国十大基金公司排行榜
    DataGuard体系结构
    SWIFT国际资金清算系统
    linux -- 命令大全
    bootstrap -- css -- 图片
    bootstrap -- css -- 按钮
    bootstrap -- css -- 表单控件
    bootstrap -- css -- 表单
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13207962.html
Copyright © 2020-2023  润新知