Quando si utilizza l'interprete interattivo GHC, è possibile richiedere il tipo derivato di un'espressione:In che modo GHCi seleziona i nomi per le variabili di tipo?
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Sembra che ci vogliono i nomi delle variabili di tipo dalla firma dal map
è defined come
map :: (a -> b) -> [a] -> [b]
map _ [] = []
map f (x:xs) = f x : map f xs
nel Preludio. Questo ha molto senso! La mia domanda è: come vengono scelti i nomi delle variabili di tipo quando non è stata data la firma?
Un esempio potrebbe essere
Prelude> :t map fst
map fst :: [(b, b1)] -> [b]
dove raccolse i nomi b
e b1
. E 'chiaro che la ridenominazione deve avvenire, ma semplicemente a cominciare a
, b
, ... avrebbe dato
map fst :: [(a, b)] -> [a]
invece, che trovo un po' più leggibile.
Grazie, questa è una bella spiegazione! Non avevo pensato al caso in cui si desidera che diversi 'n' vengano rinominati ma rimangano correlati. –
Non è impossibile. (unSafeCoerce o semplicemente vecchio '_ | _') – PyRulez