Bu soru öznel değil. Referans verilen kitapta çok spesifik bir fiil kullanılır ve bu ifadenin ne anlama geldiğini anlamak istiyorum, çünkü korkarım bir şeyi yanlış anlıyorum.
Dan You Bir Haskell bilgi , aşağıdaki paragraf "Biz varsayalım içeren üçüncü ve sonuncusu *
".
data Barry t k p = Barry { yabba :: p, dabba :: t k }
Ve şimdi bunu bir örnek yapmak istiyoruz
Functor
.Functor
tür istiyor* -> *
amaBarry
böyle bir şeye benzemiyor. Nasıl bir şeyBarry
? Üç tür parametre gerektirdiğini görüyoruz, bu yüzden olacaksomething -> something -> something -> *
. Bununp
somut bir tip olduğunu ve dolayısıyla bir çeşit olduğunu söylemek güvenlidir*
. Çünkük
, varsayıyoruz*
ve böylece uzantı tarafındant
, bir tür vardır* -> *
. Şimdi bu türlerisomething
yer tutucu olarak kullandığımız s ile değiştirelim ve bunun bir tür olduğunu görüyoruz(* -> *) -> * -> * -> *
.
Neden bir şey varsayıyoruz? "X'i varsayalım (yani X'in doğru olduğunu varsayalım)" ifadesini okuduktan sonra, X'in yanlış olduğunu da düşünmemiz gerektiğini düşünmek doğaldır. Örneğin belirli bir durumda, olamazdı t
tür olması (* -> *) -> *
ve k
türünün (* -> *)
? Eğer durum buysa, her ne olsaydı t
ve k
aslında, t k
somut bir tip olurdu, değil mi?
Tüm akıl yürütme çizgisinin derleyiciye göre kontrol edildiğini görüyorum, ancak derleyicinin varsaydığını düşünmüyorum . Eğer öyleyse, ne olduğunu bilmek isterim, eğer o zaman tekrar olmazsa korkarım paragrafın anlamını kaçırıyorum.
k :: L
her türlü sahip olabiliriz . Ancak buradaki bir derleyici belirli bir seçim yapmalı veya bir çoklu türe başvurmalıdır. Bir çoklu tür en genel seçenek olacaktır, ancak burada GHC seçer (temel Haskell'in çoklu türleri yoktur, bir uzantı olarak açılması gerekir). Oldukça keyfi bir şey seçtiği için, LYAH "varsay" (AFAICT) kelimesini kullanır.L
t :: L -> *
L
L = *