Pertanyaan ini adalah pertanyaan teoretis tentang fungsi Haskell yang dapat mengambil argumen apa pun. Apakah ada perbedaan antara fungsi cara dengan jenis tanda tangan
a -> b -> a
dan
c -> a -> c
Apakah instantiated? Bantuan apa pun dihargai.
haskell
functional-programming
Dreana
sumber
sumber
Jawaban:
Tidak ada perbedaan. Sejak
a
,b
danc
mulai dengan huruf kecil , ini adalah variabel . Anda bisa mengganti nama variabel, dan ini tetap sama, selama dua (atau lebih) variabel tidak " berselisih ".Bentrokan semacam itu dapat terjadi jika Anda mengubah nama variabel sehingga memiliki nama yang sama dengan variabel lain, atau ketika Anda mengganti nama dua (atau lebih) variabel menjadi nama baru yang sama. Jika Anda akan mengganti nama variabel
a
misalnya menjadib
dalam fragmen kode pertama Anda, maka kami akan mendapatkannyab -> b -> b
, tetapi itu tidak sama, karena kami menegakkan bahwa parameter pertama dan kedua adalah dari jenis yang sama. Sedangkan dalam tanda tangan tipe Anda, kami memiliki kebebasan untuk memilih dua jenis yang bisa sama, tetapi itu tidak perlu.sumber
Nggak. Pikirkan
a -> b -> a
sebagaiThis Type -> Another Type -> This Type
. Kemudian keduanya cocok dengan pola yang diberikan. Namun, sesuatu sepertia -> b -> c
tidak cocok:This Type -> That Type -> Yet Another Type
(umumnya) berbeda; kecuali kasing tepi saatc = a
, yang menghasilkan pola yang Anda minati.sumber