2016-03-20 4 views
-2

Ich habe eine Funktion in Haskell definiert als (Fehler ein Datentyp ist)Haskell auf das Tupel immer

data Error a = Woops | Nice a deriving (Eq, Ord, Show) 

mixIt :: Int -> Int -> (Error (Int, Int)) 

Wie kann ich auf die Rückkehr Tupel, ich habe versucht;

fst (mixIt 2 2) 

Aber es gibt einen Fehler?

Antwort

1

fst ist eine Funktion, mit der Art (a, b) -> a (na ja, sind wir es in einer spezifischeren Weise, wie (Int, Int) -> Int verwenden), aber wir sind es mixIt 2 2 Anwendung, die Error (Int, Int) den Typ hat. Dies ist die Quelle unseres Fehlers.

Um es zu beheben, müssen wir den Error Wert, den wir von mixIt durch Muster auf sie passende

kann
case mixIt 2 2 of 
    Nice tuple -> fst tuple 

Wir Match auf dem Fall ausdrücklich Muster zurück zu überprüfen, wo wir einen Nice Konstruktor haben, die das hat Tupel wollen wir als Argument haben. Allerdings gibt es ein Problem, weil mixIt auch Woops, den anderen Ersteller von Error zurückgeben kann. Wir müssen diesen Fall behandeln separat sonst unser Programm zur Laufzeit fehl (eine sehr schlechte Sache)

case mixIt 2 2 of 
    Nice tuple -> fst tuple 
    Whoops -> ... some Haskell code to produce another tuple ... 

, wenn Sie in diesem letzten Zweig des Falles Ausdrucks füllen Sie setzen sind zu gehen.

+0

Vielen Dank dafür, ich konnte wirklich nichts darüber im Internet finden, da ich nicht sicher war, was ich nach einer Lösung suchen sollte. Nochmals vielen Dank, war eine große Hilfe! – something

+0

@etwas Kein Problem, viel Glück beim Lernen von Haskell :) – jozefg