Lampiran A: Dukungan Fungsi Esensial
Dalam lampiran ini, Anda akan menemukan beberapa implementasi JavaScript dasar dari berbagai fungsi yang dijelaskan dalam buku ini.
Ingatlah bahwa implementasi ini mungkin bukan implementasi tercepat atau paling efisien di luar sana; mereka dibuat hanya untuk tujuan pendidikan.
Untuk menemukan fungsi yang lebih siap produksi, lihat ramda, lodash, atau folktale.
Perhatikan bahwa beberapa fungsi juga mengacu pada struktur aljabar yang didefinisikan dalam Lampiran B
always
// always :: a -> b -> a
const always = curry((a, b) => a);compose
// compose :: ((y -> z), (x -> y), ..., (a -> b)) -> a -> z
const compose =
(...fns) =>
(...args) =>
fns.reduceRight((res, fn) => [fn.call(null, ...res)], args)[0];curry
// curry :: ((a, b, ...) -> c) -> a -> b -> ... -> c
function curry(fn) {
const arity = fn.length;
return function $curry(...args) {
if (args.length < arity) {
return $curry.bind(null, ...args);
}
return fn.call(null, ...args);
};
}either
identity
inspect
left
liftA2
liftA3
maybe
nothing
reject
Last updated
Was this helpful?