Ich habe eine Bibliothek von Hilfsfunktionen, die ich Curry-Versionen von exportieren möchte.Problem beim Export Curry generische Funktion
Ein kleines Stück davon sieht wie folgt aus:
export function curry2<A,B,C>(f: (x: A, y: B) => C): (x: A) => (y: B) => C {
return (a) => (b) => f(a, b)
}
function _push<A>(item: A, items: Array<A>): Array<A> {
return items.concat(item)
}
export const push = curry2(push)
Aber das funktioniert nicht. Flow klagt Ausdruck curry2(push)
und sagt:
- type parameter 'A' of function call. Missing annotation.
- type parameter 'B' of function call. Missing annotation.
Also habe ich versucht, dies zu beheben, indem Sie die exportierte Kennung mit Anmerkungen versehen:
export const push<A>: (item: A) => (items: Array<A>) => Array<A>
Aber das funktioniert nicht, weil const
Ausdrücke nicht generischen Typ Variablen einführen können.
Also dachte ich, ich hätte eine tatsächliche Funktion exportieren, um die Lage sein, es zu annotieren:
export function push<A> (item: A): (items: Array<A>) => Array<A> {
return curry2(_push)(item);
}
Aber an diesem Punkt werde ich im Grunde neu schreiben ein großes Stück Curry für jede Funktion, die ich exportieren möchte.
Gibt es eine bessere Möglichkeit, Flow zu helfen, die generischen Variablen des Exports in const auszudrücken?
Dies scheint das gleiche Problem zu haben. Das exportierte 'push' sagt, es fehlen Annotationen für die Typparameter A, B und C. Und da es eine const-Deklaration ist, gibt es keine Möglichkeit, sie bereitzustellen. – Adam
Ich meinte, das ist im Moment nicht möglich, Flow unterstützt keine höheren Typen – gcanti