Ich versuche, die Typinferenz der Funktion traverse_
im folgenden Code zu verbessern:
Beim Ausführen des obigen Befehls:
%Vor% Um es kompilieren zu können, muss ich die Typargumente zu traverse_
:
Gibt es eine Möglichkeit, traverse_
oder irgendeinen anderen Teil des Codes zu restrukturieren, damit die Typrückschlüsse funktionieren? Wenn die Typen komplexer werden, nervt das schnell.
Wie von Ben James hervorgehoben, suchen Sie nach Miles Sabins Unapply
Trick . Hier ist es in scalaz repo. Hier ist traverseU
, implementiert mit seiner Hilfe. Hier sind einige Beispielverwendungen aufgeführt. Und hier ist meine skizzenhafte (hoffentlich korrekte) Implementierung für Ihren speziellen Fall (Hinweis: Ich habe Ihre Applicative
in ApplicativeTest
umbenannt, um Applicative
, definiert in scalaz, nicht zu stören):
Ich weiß immer noch nicht, wie man Either[String, Unit]
anstelle von Product with Serializable with scala.util.Either[String,Unit]
anders ableiten kann, als streng Typ in einem der Fälle, wie ich es in dieser Zeile getan habe: case 5 => Left("x"): Either[String, Unit]
.
Tags und Links scala type-inference scalaz