Fable: Falsches Curry

Erstellt am 14. Juli 2020  ·  3Kommentare  ·  Quelle: fable-compiler/Fable

Ich hatte in letzter Zeit ein bisschen Probleme mit Fehlern beim Currying / Uncurrying, habe es aber geschafft, ein Minimalbeispiel für eines zu finden:

Link ersetzen

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);
})();

Im Javascript wird curry(2, x$$1) für die Eingabefunktion aufgerufen, aber es ist bereits Curry und das Endergebnis ist ungültig.

Ich bin mir nicht sicher, was die wesentlichen Elemente sind, aber dass die Funktion in eine Option eingeschlossen ist, scheint eine zu sein.

uncurrying

Alle 3 Kommentare

Vielen Dank für den Code, um @stkb zu reproduzieren! Ja, die Tatsache, dass Fable die Option löscht, verursacht einige Probleme beim Curry/Entcurry, aber hoffentlich können wir es dank Ihres Beispiels beheben 👍

Das hat eine Weile gedauert, sollte aber in 3.1.3 endlich behoben sein 😸

Das ist großartig Danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen