IO Monadの仕組みを理解しようとしています。ramdaとramda-fantasyのMonadic IO
私はfilenames.txt
を読んで、その結果を使ってディレクトリtestfiles
のファイルの名前を変更します。これは明らかに未完成なので、実際に何かをリネームするのではなく、コンソールにログします。 :)
私の質問は以下のとおりです。
- 私は二回
runIO
を呼び出し、それが唯一の終わりに、一度 と呼ばれるべきであるようにそれは感じていますか? renaneDirect
の代わりにrenameIO
を使用しますが、 という正しい構文を見つけることができません。
他の提案もありがとうございます。私は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!
:
はに単純化することができます。ラムダを長い間使ってきました。しかし、Applicative Functorsを使用して持ち上げることは、依然として混乱しています。この回答は、私がこれらの概念をより良く理解するのに役立ちます。 – Jigar