Dans Haskell, vous pouvez appliquer fmap
à deux fonctions, ce qui correspond essentiellement à la composition de la fonction. Vous pouvez même composer fmap
pour activer la fonction de composition des fonctions avec une plus grande arité (fmap . fmap
).Comment implémenter un foncteur pour que la carte puisse être appliquée à deux fonctions?
Cela fonctionne parce que les fonctions sont des foncteurs.
Comment un tel foncteur (ou la méthode appropriée map
) serait-il implémenté en Javascript?
C'est ce que je l'ai essayé jusqu'à présent:
funcProto = {
map(f) { return y => f(this.x(y)) }
};
function func(x) {
return Object.assign(Object.create(funcProto), {x: x});
}
const comp = f => g => x => f(g(x));
const map = f => ftor => ftor.map(f);
const sub = y => x => x - y;
const sqr = x => x * x;
const inc = x => x + 1;
Cela fonctionne pour la composition de la fonction normale:
func(sqr).map(inc)(2); // 5
Cependant, il ne fonctionne pas pour une version composée de map
:
const map2 = comp(map)(map);
map2(sub)(sub)(10)(5)(4); // Error
Je pense que je m'adapte trop à la façon traditionnelle dont les foncteurs sont im plemented en Javascript. Les fonctions en tant que foncteurs se comportent différemment de la liste ou peut-être.
« * la foncteurs façon traditionnelle sont mises en œuvre en Javascript * » - il n'y a rien. – Bergi