【发布时间】:2017-02-14 13:16:28
【问题描述】:
试图弄清楚 IO monad 是如何工作的。
使用下面的代码,我阅读了filenames.txt 并使用结果重命名目录testfiles 中的文件。这显然还没有完成,所以我没有真正重命名我登录到控制台的任何内容。 :)
我的问题是:
- 我给
runIO打了两次电话,但感觉应该只打一次 一次,最后? - 我想用
renameIO代替renaneDirect但不能 找到正确的语法。
任何其他建议也很感激,我是 FP 的新手!
var R = require('ramda');
var IO = require('ramda-fantasy').IO
var fs = require('fs');
const safeReadDirSync = dir => IO(() => fs.readdirSync(dir));
const safeReadFileSync = file => IO(() => fs.readFileSync(file, 'utf-8'));
const renameIO = (file, name) => IO(() => console.log('Renaming file ' + file + ' to ' + name + '\n'));
const renameDirect = (file, name) => console.log('Renaming file ' + file + ' to ' + name + '\n');
safeReadFileSync("filenames.txt") // read future file names from text file
.map(R.split('\n')) // split into array
.map(R.zip(safeReadDirSync('./testfiles/').runIO())) // zip with current file names from dir
.map(R.map(R.apply(renameDirect))) // rename
.runIO(); // go!
【问题讨论】:
标签: node.js functional-programming ramda.js ramda-fantasy