บางภาษาอนุญาตให้มีการเรียนและฟังก์ชั่นที่มีพารามิเตอร์ชนิด (เช่นList<T>ที่Tอาจจะเป็นประเภทพล) ตัวอย่างเช่นคุณสามารถมีฟังก์ชั่นเช่น:
List<S> Function<S, T>(List<T> list)
อย่างไรก็ตามบางภาษาอนุญาตให้แนวคิดนี้ขยายได้สูงกว่าหนึ่งระดับช่วยให้คุณมีฟังก์ชั่นที่มีลายเซ็น:
K<S> Function<K<_>, S, T>(K<T> arg)
โดยที่K<_>ตัวเองเป็นประเภทเช่นList<_>นั้นมีพารามิเตอร์ประเภท "บางส่วนประเภท" นี้เรียกว่าตัวสร้างประเภท
คำถามของฉันคือทำไมคุณถึงต้องการความสามารถนี้ มันสมเหตุสมผลที่จะมีรูปแบบเหมือนกันList<T>เพราะทุกอย่างList<T>เกือบจะเหมือนกัน แต่สิ่งที่K<_>แตกต่างกันอย่างสิ้นเชิง คุณสามารถมีOption<_>และ a List<_>ที่ไม่มีฟังก์ชั่นทั่วไปเลย
Functorตัวอย่างในคำตอบของ Luis Casillas นั้นค่อนข้างใช้งานง่าย ทำอะไรList<T>และOption<T>มีเหมือนกัน? ถ้าคุณให้ฉันคนใดคนหนึ่งและฟังก์ชั่นT -> Sที่ฉันสามารถให้คุณหรือList<S> Option<S>สิ่งที่พวกเขามีเหมือนกันคือคุณสามารถลองรับประโยชน์Tจากทั้งสองอย่าง
IReadableHolder<T>เท่าที่หนึ่งมีความสนใจในหลังผมจะคิดว่าอาจจะมีการจัดการโดยมีทั้งชนิดใช้
IMappable<K<_>, T>ด้วยวิธีK<S> Map(Func<T, S> f)การดำเนินการเป็น,IMappable<Option<_>, T> IMappable<List<_>, T>ดังนั้นคุณจะต้อง จำกัดK<T> : IMappable<K<_>, T>การใช้ประโยชน์จากมัน