2014-11-11 5 views
7

Dies ist der entsprechende Code:Warum besteht Haskell darauf, das letzte Argument einer Funktion zu entfernen?

removeCard :: Card -> Tracker -> Tracker 
removeCard card tracker = filter (\cTracker -> ctCard cTracker /= card) tracker 

Haskell mir hier eine Warnung zu geben, sagen, es sollte auf jeder Seite ohne den Tracker geschrieben werden. Ich finde es einfacher, meine Funktionen zu lesen, wenn alle Argumente vorhanden sind, da die Argumentnamen verdeutlichen, was die Funktion macht. Ich könnte die Reihenfolge der Parameter umkehren, aber es macht für mich intuitiv Sinn, dass, wenn Sie eine removeCard-Funktion aufrufen, die zu entfernende Karte der erste Parameter ist, also möchte ich das auch nicht tun. Gibt es ein starkes Argument dafür, den letzten Parameter zu entfernen?

EDIT: Die Frage sagte ursprünglich, dass Haskell mir einen Fehler gab, aber das war ein Fehler mit Synthastic, es ist nur eine Warnung.

+0

Es ist nur der Stil Leitfaden. Ich persönlich finde, dass nach einigen Jahren von Haskell der Punkt-freie Stil genauso lesbar ist, wenn nicht mehr - als der Punkt-Stil, aber fühlen Sie sich frei, zu verwenden, was auch immer Sie mögen. Ich werde sagen, dass es einige Fälle gibt, in denen der punktfreie Stil einen Unterschied in der Leistung bewirken kann. Haskell kann eine Funktion einfacher inline machen, wenn sie gemäß ihrer Definition "vollständig angewendet" wird. Wenn sie also mit weniger Parametern definiert wird kann es "vollständig anwenden" es einfacher. Dies ist wirklich nur wichtig, wenn Sie versuchen, aus Ihrem Code das letzte bisschen Leistung herauszuquetschen. – bheklilr

+0

Es ist nur eine Übung, die Leute bevorzugen, und ich bin dabei. Sie müssen currying, es ist also nicht notwendig, es erneut einzugeben. Ich würde vorschlagen, dass Sie sich daran gewöhnt haben, nicht nur, weil der Code normalerweise so sein wird, sondern auch, weil Sie dies (praktisch) mit der Funktionszusammensetzung tun müssen. – MasterMastic

+0

Okay, ich denke, ich werde mich einfach daran gewöhnen, ich werde mich daran gewöhnen. Warum muss ich es für die Funktionszusammensetzung tun? –

Antwort

12

Wenn Sie diese HLint-Warnung nicht möchten, können Sie sie deaktivieren. Dieses Modul wird es für keine definierten Funktionen anzeigen:

module Foo where 
{-# ANN module "HLint: ignore Eta reduce" #-} 

foo bar = show bar  
Verwandte Themen