บางภาษาอนุญาตให้มีการเรียนและฟังก์ชั่นที่มีพารามิเตอร์ชนิด (เช่น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>
การใช้ประโยชน์จากมัน