2013-04-13 22 views
9

Esiste uno standard per la posizione per le dichiarazioni di tipo in Haskell?Posizionamento standard di dichiarazioni tipo

Per esempio, supponiamo di avere due funzioni:

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

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

e le loro dichiarazioni di tipo sono:

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

E 'più appropriato/leggibile per inserire le dichiarazioni nella parte superiore del file, come tale:

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

Oppure collocare ciascuna sopra la rispettiva funzione, come in:

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

In entrambi i casi mi sembra perfettamente praticabile, quindi mi chiedevo se esistesse uno standard per questo. Inoltre, supponendo che questi siano in uno module, la loro accessibilità dal mondo esterno influisce sul posizionamento delle dichiarazioni di tipo?

risposta

16

Lo stile più comune è mettere le firme del tipo direttamente sopra la funzione, indipendentemente dal fatto che venga esportata o meno.

È più semplice modificare e aggiornare le funzioni se tutto è vicino. Aiuta anche ad avere la firma del tipo e la funzione insieme durante la lettura del codice - in questo modo non è necessario cercare la firma in una parte diversa del file o ricordarla.

Lo stile alternativo che hai proposto sarebbe migliore per ottenere un riepilogo di un modulo. Fortunatamente, possiamo facilmente farlo con il comando :browse in GHCi:

*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 

Così lo stile di mettere tutte le firme in alto non ha davvero molto da raccomandare e non viene utilizzato.

Problemi correlati