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