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.

  • 相关阅读:
    微信支付退款部分代码
    Raspberry PI 点亮LED
    Raspberry PI 摄像头
    RaspberryPI 3B系统烧录
    MySQL基础使用
    MySQL数据库管理系统概述
    Eclipse创建JAVA项目
    Brup Suite拦截https请求
    Github 第一个仓库
    python os模块主要函数
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13207962.html
Copyright © 2011-2022 走看看