Übergeben Sie Typen als Argumente für eine Funktion in Haskell?

8

Die folgenden zwei Funktionen sind sehr ähnlich. Sie lesen aus [String] n Elementen, entweder [Int] oder [Float]. Wie kann ich den gemeinsamen Code ausschließen? Ich kenne keinen Mechanismus in Haskell, der Übergabetypen als Argumente unterstützt.

%Vor%

Ich bin Anfänger auf Haskell, daher sind Kommentare zu meinem Code willkommen.

    
Chang Peng 06.04.2012, 04:52
quelle

2 Antworten

14

Haskell unterstützt einen hohen Grad an Polymorphie. Insbesondere

%Vor%

hat den Typ

%Vor%

also

%Vor%

Sie müssen den Typ nicht spezialisieren. Haskell wird automatisch den allgemeinsten möglichen Typ ableiten, und der readAny hier wird tun, was Sie wollen.

Es ist nicht möglich, Typen als Argumente in Haskell zu übergeben. Selten würden Sie brauchen. Für die wenigen Fälle, in denen es notwendig ist, können Sie das Verhalten simulieren, indem Sie einen Wert mit dem gewünschten Typ übergeben.

Haskell hat einen "Rückgabetyp-Polymorphismus", also sollten Sie sich wirklich nicht darum kümmern, "den Typ zu übergeben" - die Wahrscheinlichkeit ist, dass Funktionen tun, was Sie wollen, ohne dass Sie es ihnen sagen.

    
Philip JF 06.04.2012, 05:01
quelle
9

Grundsätzlich möchten Sie den Typ nicht explizit deklarieren. Lassen Sie statt dessen den Typ deklarieren und lassen Sie die Inferenz-Engine für sich übernehmen. Außerdem glaube ich, dass Sie die Karte zusammenfalten. So würde ich mich nähern.

%Vor%

Um nur n Dinge aus dem Stream zu lesen, verwenden Sie take

    
plediii 06.04.2012 05:11
quelle

Tags und Links