Podczas korzystania z interaktywnego GHC tłumacza, to jest możliwe, aby poprosić o wywnioskować typu wyrażenia:W jaki sposób GHCi wybiera nazwy zmiennych typu?
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Wydaje się, że to trwa nazwy zmiennych typu z podpisem od map
jest defined jak
map :: (a -> b) -> [a] -> [b]
map _ [] = []
map f (x:xs) = f x : map f xs
w Preludium. To ma sens! Moje pytanie brzmi: w jaki sposób są wybierane nazwy zmiennych typu, gdy nie ma podanego podpisu?
Przykładem może być
Prelude> :t map fst
map fst :: [(b, b1)] -> [b]
gdzie zbierane nazwy b
i b1
. To jasne, że musi nastąpić zmiana nazwy, ale po prostu zaczynając a
, b
... dałby
map fst :: [(a, b)] -> [a]
zamiast, który mi się znaleźć nieco bardziej czytelny.
Dzięki, to miłe wyjaśnienie! Nie myślałem o przypadku, w którym chcesz zmienić nazwę kilku 'n', ale pozostań z nimi w kontakcie. –
To nie jest niemożliwe. (unSafeCoerce lub po prostu stary "_ | _") – PyRulez