zoukankan      html  css  js  c++  java
  • [Functional Programming] Reader with Async ADT

    ReaderT is a Monad Transformer that wraps a given Monad with a Reader. This allows the interface of a Reader that enables the composition of computations that depend on a shared environment (e -> a), but provides a way to abstract a means the Reader portion, when combining ReaderTs of the same type. All ReaderTs must provide the constructor of the target Monad that is being wrapped.

    The task we want to do is read from a "data.json" file:

    {
      "name": "App",
      "config": {
        "prod": "config.prod.json",
        "dev": "config.dev.json",
        "test": "config.test.json"
      }
    }

    According to the 'env' variable we pass in, it will pick different config file:

    config.test.json:

    {
      "port": 5200
    }

    In the end, it will output a json file combine the result.

    const { readJSON, writeJSON, fork } = require("./helper");
    const {
      Async,
      ReaderT,
      omit,
      pipeK,
      assign
    } = require("crocks");
    
    const ReaderAsync = ReaderT(Async);
    const env = {
      input: "data.json",
      output: "output.json"
    };
    
    const input = env =>
      ReaderAsync(({ input }) => readJSON(input).map(assign({ env })));
    const config = data =>
      ReaderAsync(() =>
        readJSON(data.config[data.env])
          .map(assign(data))
          .map(omit(["config"]))
      );
    const output = inputData =>
      ReaderAsync(({ output }) => writeJSON(output, inputData));
    const flow = pipeK(
      ReaderAsync.of,
      input,
      config,
      output
    );
    
    fork(flow("test").runWith(env));
    

      

    output.json file:

    {
      "port": 5200,
      "name": "App",
      "env": "test"
    }
  • 相关阅读:
    使用 Selenium
    Senium 简介
    第8章 动态渲染页面爬取
    Ajax 结果提取
    Ajax 分析方法
    WINDOW 2008多人访问设置
    Windows 2012设置允许单个用户连接多个会话的方法
    Windows Server 2012开启多人远程
    BOM 表
    修复材料工单分配材料订单重复占料问题的开发
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10957781.html
Copyright © 2011-2022 走看看