2013-04-13 11 views
9

Czy istnieje standard dla miejsca dla deklaracji typu w Haskell?Standardowe rozmieszczenie deklaracji typu

Na przykład załóżmy, że mam dwie funkcje:

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

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

i ich deklaracje typu są:

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

Czy to bardziej właściwe/czytelne umieszczenie deklaracji w górnej części pliku, takie jak:

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)) 

Lub umieścić każdą nad odpowiednią funkcję, jak w:

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

pow :: Int -> Int -> Int 
pow x 0 = 1 
pow x e = x * (pow x (e-1)) 

Tak czy inaczej, wydaje mi się, że jestem całkowicie sprawny, więc zastanawiałem się, czy istnieje jakiś standard w tym zakresie. Ponadto, zakładając, że są one w module, czy ich dostępność ze świata zewnętrznego wpływa na umieszczanie ich deklaracji typu?

Odpowiedz

16

Najpopularniejszym stylem jest umieszczanie podpisów typu bezpośrednio nad funkcją, niezależnie od tego, czy zostanie ona wyeksportowana, czy nie.

Łatwiej jest modyfikować i aktualizować funkcje, jeśli wszystko jest blisko siebie. Pomaga także mieć podpis typu i funkcję razem podczas czytania kodu - w ten sposób nie musisz szukać podpisu w innej części pliku lub go zapamiętywać.

Proponowany alternatywny styl będzie lepszy do uzyskania podsumowania modułu. Na szczęście, możemy bardzo łatwo to zrobić za pomocą polecenia w GHCi :browse:

*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 

Więc styl umieszczenie wszystkich podpisów na szczycie tak naprawdę nie ma wiele do polecenia i nie jest używany.

Powiązane problemy