Pertanyaan ini tidak subyektif. Kata kerja yang sangat spesifik digunakan dalam buku yang direferensikan, dan saya ingin memahami apa implikasi dari ungkapan itu, karena saya khawatir saya salah memahami sesuatu.
Dari Learn You a Haskell , paragraf berikut adalah paragraf ketiga dan terakhir yang mengandung "kami berasumsi *
".
data Barry t k p = Barry { yabba :: p, dabba :: t k }
Dan sekarang kami ingin menjadikannya sebagai contoh
Functor
.Functor
ingin jenis yang baik* -> *
tetapiBarry
tidak terlihat seperti itu. Jenis apa ituBarry
? Yah, kita lihat itu membutuhkan tiga tipe parameter, jadi itu akan menjadisomething -> something -> something -> *
. Aman untuk mengatakan bahwa itup
adalah jenis beton dan dengan demikian memiliki jenis*
. Karenak
, kami menganggap*
dan dengan ekstensi,t
memiliki semacam* -> *
. Sekarang mari kita ganti jenis-jenis itu dengansomething
huruf yang kita gunakan sebagai placeholder dan kita lihat ada jenisnya(* -> *) -> * -> * -> *
.
Mengapa kita mengasumsikan sesuatu sama sekali? Setelah membaca "kita menganggap X (yaitu kita menganggap bahwa X adalah benar)" adalah wajar bagi saya untuk berpikir bahwa kita juga harus mempertimbangkan kasus bahwa X salah. Dalam kasus spesifik dari contoh, tidak t
dapat dari jenis (* -> *) -> *
dan k
jenis (* -> *)
? Jika ini masalahnya, apa pun t
dan k
sebenarnya, t k
masih akan menjadi tipe yang konkret, bukan?
Saya melihat bahwa seluruh garis penalaran kemudian diperiksa terhadap kompiler, tetapi saya tidak berpikir kompilator mengasumsikan . Jika ya, saya ingin tahu apa, jika tidak lagi saya khawatir saya kehilangan makna paragraf.
k :: L
untuk jenis apa sajaL
, asalkant :: L -> *
. Namun seorang kompiler di sini harus memilih beberapa yang spesifikL
, atau menggunakan polkind. Polykind akan menjadi pilihan paling umum, tetapi di sini GHC memilihL = *
(Haskell dasar tidak memiliki polykind, mereka harus dinyalakan sebagai ekstensi). Karena ia memilih sesuatu yang agak sewenang-wenang, LYAH menggunakan kata "menganggap" (AFAICT).