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"
    }
  • 相关阅读:
    Hadoop OutputFormat浅析
    硬盘性能
    HDFS读文件过程分析:读取文件的Block数据
    HDFS写文件过程分析
    JAVA中的编码分析
    HBase 写入优化
    HBase ttl 验证
    大数据多维分析平台的实践
    TiDB在特来电的探索
    Druid 基础使用-操作篇(Pivot、plyql)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10957781.html
Copyright © 2011-2022 走看看