私はRamda/Folktaleを見始めました。私はディレクトリから来るタスクの配列をマップしようとする際に問題があります。私はファイルの内容を解析しようとしています。Javascriptでタスクの配列にマッピングする
var fs = require('fs');
var util = require('util');
var R = require('ramda');
var Task = require('data.task');
var compose = R.compose;
var map = R.map;
var chain = R.chain;
function parseFile(data) {
console.log("Name: " + data.match(/\$name:(.*)/)[1]);
console.log("Description: " + data.match(/\$description:(.*)/)[1]);
console.log("Example path: " + data.match(/\$example:(.*)/)[1]);
}
// String => Task [String]
function readDirectories(path) {
return new Task(function(reject, resolve) {
fs.readdir(path, function(err, files) {
err ? reject(err) : resolve(files);
})
})
}
// String => Task String
function readFile(file) {
return new Task(function(reject, resolve) {
fs.readFile('./src/less/' + file, 'utf8', function(err, data) {
err ? reject(err) : resolve(data);
})
})
}
var app = compose(chain(readFile), readDirectories);
app('./src/less').fork(
function(error) { throw error },
function(data) { util.log(data) }
);
私はディレクトリ内のファイルを読み取り、タスクを返しています。これが解決すると、新しいタスクを返すreadFile関数に入るはずです。ファイルを読み込んだら、そこからいくつかのビットを解析するだけです。以下では
:
var app = compose(chain(readFile), readDirectories);
それはreadFileの関数になりますが、「ファイル」はエラーので、ファイルの配列です。で
:
var app = compose(chain(map(readFile)), readDirectories);
我々はfs.readfile()に入ることはありませんが、 'ファイル' は、実際のファイル名です。
私はこれについてかなり困惑しており、ドキュメントは困惑しています。どんな提案も大歓迎です。私が理解し、ネストされたマップを容易に型シグネチャを含めることができるので、私は別のライン上の変換のそれぞれを書いた
おかげ
ありがとうございました。それは実際には本当に面白いです。私はそれに夢中になっていたと思っているような変化です。ブールブックスの書籍に戻る。 – SpaceBeers
私はラムダ文書で通勤を見つけることができません。私は何が欠けていますか? – akaphenom
(私はドキュメンテーションを見つけることができないので)通勤は "control.monads"シーケンス関数とどう違うのですか? – akaphenom