2017-10-03 6 views
1

La fonction PureScript suivante:Compile fonction PureScript à la fonction JavaScript uncurried

add :: Number -> Number -> Number 
add a b = a + b 

... compile JavaScript comme suit:

var add = function (a) { 
    return function (b) { 
     return a + b; 
    }; 
}; 

Je voudrais appeler cette fonction sur iOS en utilisant le JavaScriptCore cadre et cela le rend plus compliqué que nécessaire. Existe-t-il un moyen de compiler des fonctions sans contrainte?

+0

'const uncurry = f => (... args) => args.reduce ((f, arg) => f (arg), f);' en supposant que vous connaissiez le bon nombre/ordre d'arguments , 'const uadd = uncurry (ajouter); uadd (2, 3); // 5' (cela n'améliore pas la lisibilité si c'est votre but) –

+0

Utilisez un tuple à la place? – Bergi

Répondre

6

Jetez un oeil aux fonctions dans Data.Function.Uncurried - les aides mkFnN vous permettront de définir les fonctions JS multi-arguments à partir des versions PS-curry. Le compromis est que vous ne serez pas en mesure d'appeler ces fonctions de la manière normale dans PS, vous devrez également utiliser le runFnN correspondant. Pas vraiment un problème si ce module n'expose qu'une interface FFI. :)