2016-05-13 14 views
-3

Ich möchte fragen, ob mir jemand erklären könnte, wie die Typ-Deklaration in Haskell funktioniert (für komplexere Funktionen).Haskell, Funktion abhängig vom gegebenen Typ erstellen?

Ich mag eine Funktion erstellen, die genau diesen typen verwenden:

1)  ([a], a-> a -> a -> b) -> b 
    2)  (a -> b) c -> (c ->a) -> b 

, aber ich verstehe nicht, wie etwas zu lesen, wie die a->a->a-> b (ich weiß, dass b die Ausgabe).

Vielleicht können Sie mir helfen, eine Funktion zu lesen und zu erstellen, die dem gegebenen Typ entspricht.

+1

Ich stimme zum Schließen dieser Frage, da es sehr unklar ist. Eine Funktion kann nicht zwei Arten haben, insbesondere keine geposteten. Ferner ist (a -> b) c -> (c -> a) -> b 'nicht einmal ein wohlgeformter Typ. Die unten in den Tests verwendeten Typen scheinen völlig anders zu sein. – chi

+1

Die versuchte Definition von "test1" zum Beispiel scheint anzunehmen, dass "([a], a -> a -> a -> b)' und '([a], a, a, a, b)' sind vom selben Typ. – chepner

Antwort

4

können Sie a-> a -> a -> b als eine Funktion annehmen, die 3 Argumente des gleichen Typs nimmt und Ausgabe eines anderen Typs erzeugt. Zum Beispiel

fromRGBtoColor :: Int -> Int -> Int -> Color 

wir weiterhin Int und Color spezialisiert (für generische Typen a und b)

Ihr erstes Beispiel

([a], a -> a -> a -> b) -> b 

ist ein Tupel von [Int] und Funktion des gleichen Typs unter fromRGBtoColor und produziert eine Color.

Ihr zweiter Fall fehlt einige Zeichen ..

+0

Sie helfen mir viel :) –

+2

@MartinM Es ist eine Lernerfahrung für alle hier. – karakfa