2013-04-13 4 views
9

Gibt es einen Standard für den Speicherort für Typdeklarationen in Haskell?Standardplatzierung von Typdeklarationen

Beispiel: Angenommen, ich habe zwei Funktionen:

abs' x = if x >= 0 then x else -x 

pow x 0 = 1 
pow x e = x * (pow x (e-1)) 

und ihre Typdeklarationen sind:

abs' :: Int -> Int 
pow :: Int -> Int -> Int 

Ist es sinnvoller/lesbar die Erklärungen am Anfang der Datei zu platzieren, wie solche:

abs' :: Int -> Int 
pow :: Int -> Int -> Int 

abs' x = if x >= 0 then x else -x 

pow x 0 = 1 
pow x e = x * (pow x (e-1)) 

oder jeder über seine jeweilige Funktion zu setzen, wie in:

Jeder Weg scheint mir vollkommen lebensfähig, so dass ich mich fragte, ob es irgendeinen Standard dafür gab. Unter der Annahme, dass diese in einer module sind, beeinflusst ihre Zugänglichkeit von der Außenwelt die Platzierung ihrer Typdeklarationen?

Antwort

16

Der gebräuchlichste Stil besteht darin, Typensignaturen direkt über der Funktion zu platzieren, unabhängig davon, ob sie exportiert wird oder nicht.

Es ist einfacher, Funktionen zu ändern und zu aktualisieren, wenn alles dicht beieinander ist. Es hilft auch, die Typ-Signatur und Funktion beim Lesen des Codes zusammen zu haben - auf diese Weise müssen Sie nicht die Signatur in einem anderen Teil der Datei nachschlagen oder sich daran erinnern.

Der von Ihnen vorgeschlagene alternative Stil wäre besser, um eine Zusammenfassung eines Moduls zu erhalten. Zum Glück können wir mit dem :browse Befehl in GHCi tun dies sehr einfach:

*Main> :browse Data.Function 
Data.Function.fix :: (a -> a) -> a 
Data.Function.on :: (b -> b -> c) -> (a -> b) -> a -> a -> c 
($) :: (a -> b) -> a -> b 
(.) :: (b -> c) -> (a -> b) -> a -> c 
const :: a -> b -> a 
flip :: (a -> b -> c) -> b -> a -> c 
id :: a -> a 

So ist der Stil an der Spitze alle Unterschriften des Setzens wirklich viel hat es nicht zu empfehlen und nicht verwendet wird.

Verwandte Themen