标签:variable provides rod sign ogr tar const output json
ReaderTis aMonad Transformerthat wraps a givenMonadwith aReader. This allows the interface of aReaderthat enables the composition of computations that depend on a shared environment(e -> a), but provides a way to abstract a means theReaderportion, when combiningReaderTs of the same type. AllReaderTs must provide the constructor of the targetMonadthat 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" }
[Functional Programming] Reader with Async ADT
标签:variable provides rod sign ogr tar const output json
原文地址:https://www.cnblogs.com/Answer1215/p/10957781.html