คำถามนี้ไม่ใช่เรื่องส่วนตัว ใช้คำกริยาที่เจาะจงมากในหนังสืออ้างอิงและฉันต้องการที่จะเข้าใจความหมายของถ้อยคำนั้นเพราะฉันกลัวว่าฉันเข้าใจผิดบางอย่าง
จากLearn You a Haskellย่อหน้าต่อไปนี้เป็นย่อหน้าที่สามและสุดท้ายที่มีคำว่า "เราถือว่า*
"
data Barry t k p = Barry { yabba :: p, dabba :: t k }
Functor
และตอนนี้เราต้องการที่จะทำให้มันเป็นตัวอย่างของFunctor
ต้องการประเภทของประเภท* -> *
แต่Barry
ดูเหมือนว่าจะมีชนิดนั้น ชนิดของBarry
อะไรsomething -> something -> something -> *
ดีที่เราเห็นมันต้องใช้เวลาสามพารามิเตอร์ชนิดดังนั้นจึงเป็นไปได้ มันปลอดภัยที่จะบอกว่าเป็นชนิดที่เป็นรูปธรรมและทำให้มีชนิดของp
สำหรับเราคิดและอื่น ๆ โดยขยายมีชนิดของ ตอนนี้ขอเพียงแค่เปลี่ยนชนิดผู้ที่มีของที่เรานำมาใช้เป็นตัวยึดและเราพบว่ามีชนิดของ*
k
*
t
* -> *
something
(* -> *) -> * -> * -> *
ทำไมเราถึงคิดอะไรอยู่เลย? เมื่ออ่าน "เราถือว่า X (เช่นเราถือว่า X เป็นจริง)" เป็นเรื่องปกติที่ฉันจะคิดว่าเราควรพิจารณากรณีที่ X เป็นเท็จ ในกรณีที่เฉพาะเจาะจงของตัวอย่างไม่t
สามารถเป็นประเภท(* -> *) -> *
และk
ชนิด(* -> *)
? หากเป็นเช่นนี้อะไรt
และที่k
จริงแล้วt k
จะยังคงเป็นรูปธรรมหรือไม่?
ผมเห็นว่าสายทั้งเหตุผลมีการตรวจสอบแล้วกับคอมไพเลอร์ แต่ผมไม่คิดว่าคอมไพเลอร์จะถือว่า ถ้าเป็นเช่นนั้นฉันอยากรู้ว่าถ้าไม่เป็นเช่นนั้นอีกครั้งฉันเกรงว่าฉันไม่มีความหมายของย่อหน้า
k :: L
ชนิดใด ๆตราบใดที่L
t :: L -> *
คอมไพเลอร์ที่นี่จะต้องเลือกเฉพาะบางอย่างL
หรือรีสอร์ทเพื่อ polykind polykind จะเป็นตัวเลือกที่ธรรมดาที่สุด แต่ที่นี่เลือก GHCL = *
(Haskell พื้นฐานไม่มี polykinds พวกเขาต้องเปิดเป็นส่วนขยาย) เนื่องจากมันเลือกบางอย่างที่ค่อนข้างไม่มีกฎเกณฑ์ LYAH จึงใช้คำว่า "สมมติ" (AFAICT)