Fable: Curry incorrect

Créé le 14 juil. 2020  ·  3Commentaires  ·  Source: fable-compiler/Fable

J'ai eu un peu de mal avec des bugs dans le curry/uncurry ces derniers temps, mais j'ai réussi à trouver un exemple minimal pour un :

Lien de réponse

let optionFn = Some (fun x y -> x + y)

let list = List.choose id [optionFn]

printfn "List length: %d" (List.length list)
printfn "Answer %d" (List.head list 3 4) // Expect 7 but get 0

Javascript :

import { curry } from "fable-library/Util.js";
import { List } from "fable-library/Types.js";
import { head, length, choose } from "fable-library/List.js";
import { toConsole, printf } from "fable-library/String.js";
export function optionFn(x) {
  return function (y) {
    return x + y;
  };
}
export const list = choose(function (x$$1) {
  return curry(2, x$$1);
}, new List(optionFn, new List()));

(function () {
  const arg10 = length(list) | 0;
  const clo1 = toConsole(printf("List length: %d"));
  clo1(arg10);
})();

(function () {
  const arg10$$1 = head(list)(3)(4) | 0;
  const clo1$$1 = toConsole(printf("Answer %d"));
  clo1$$1(arg10$$1);
})();

Dans le javascript, curry(2, x$$1) est appelé sur la fonction d'entrée, mais il est déjà curry et le résultat final n'est pas valide.

Je ne sais pas quels sont les éléments essentiels, mais le fait que la fonction est enveloppée dans une option semble en être un.

uncurrying

Tous les 3 commentaires

Merci beaucoup pour le code à reproduire @stkb ! Oui, le fait que Fable efface l'option crée des problèmes avec le curry/uncurry mais j'espère que nous pourrons le réparer grâce à votre échantillon 👍

Cela a pris du temps mais devrait être finalement corrigé dans la 3.1.3 😸

C'est génial merci!

Cette page vous a été utile?
0 / 5 - 0 notes