Wie man den Wert einer Vielleicht in Haskell

Ich bin relativ neu in Haskell und begann zu Lesen, "Real World Haskell".

Ich stolperte über die Art Vielleicht und habe eine Frage, wie erhält man den tatsächlichen Wert von einer Just 1 zum Beispiel.

Habe ich geschrieben das folgenden code:

combine a b c = (eliminate a, eliminate b, eliminate c)
                where eliminate (Just a) = a
                      eliminate Nothing = 0

Dies funktioniert gut, wenn ich:

combine (Just 1) Nothing (Just 2)

Aber wenn ich ändern, zum Beispiel 1 zu einem String funktioniert es nicht.

Ich glaube, ich weiß warum: weil eliminate hat, zurück zu geben, eine Art, die ist in diesem Fall eine Int. Aber wie kann ich das ändern eliminate zu befassen, zumindest mit Strings (oder vielleicht mit allen Arten von)?

  • Was sollte die Antwort für Nothing werden, wenn Sie erwarten einen string zurück?
  • Sie suchen ein token, das verwendet werden kann, um zu signalisieren "kein Ergebnis" für alle Typen... das ist genau das, was Nothing ist. Es ist keine totale Funktion Maybe a -> a, weil es keine einheitliche Art und Weise ein, um eine Nothing in eine a. Das beste, was Sie tun können, ist eine Funktion schreiben, die (Maybe a, Maybe b, Maybe c) -> Maybe (a, b, c)
  • möglich, Duplikat der Betrieb bei einer Rücksendung aus einer Vielleicht enthält "Nur"
  • Wie ich gezeigt mit meine lächerlich lange Antwort, das problem ist anders als die, die TomMD verknüpft (in diesem einen, das Plakat erklärt, dass die Eingänge nie Nichts, in diesem Nichts ist explizit eine Möglichkeit, und in der Tat die Quelle für das problem geben)
  • Vielleicht würde es helfen, wenn Sie uns sagen können, was du eigentlich machen willst. Möchten Sie vielleicht die "fromMaybe" - Funktion, oder möchten Sie vielleicht nutzen die Tatsache, dass Vielleicht ist eine Monade.
  • hatte ich nicht etwas bestimmtes im Sinn. ich stolperte über die Vielleicht geben, die sich ein bisschen seltsam für mich. also versuchte ich eine Funktion schreiben, um wieder den ursprünglichen Wert.
  • Recht, aber meine Antwort in diesem thread, die gerade lief, obwohl einige gemeinsame Wege, Sie befassen sich mit Maybe a (standard-Funktionen) und konzentrierte sich nicht auf fromJust oder andere Teiltöne als die einzige Möglichkeit. (Nicht, dass ich nicht einverstanden mit Ihrer Antwort, Lehr-typeclasses scheint eine gute Passform hier).
  • Möglich, Duplikat der Auspacken Datentypen in Haskell ohne überflüssigen code

InformationsquelleAutor Moe | 2011-02-09
Schreibe einen Kommentar