ฉันไม่คิดว่าฉันเข้าใจคลาสประเภท ฉันได้อ่านที่ไหนสักแห่งที่คิดว่า class classes เป็น "interfaces" (จาก OO) ที่การใช้งานประเภทนั้นผิดและทำให้เข้าใจผิด ปัญหาคือฉันมีปัญหาที่เห็นพวกเขาเป็นสิ่งที่แตกต่างและวิธีการที่ผิด
ตัวอย่างเช่นถ้าฉันมีคลาสประเภท (ในไวยากรณ์ Haskell)
class Functor f where
fmap :: (a -> b) -> f a -> f b
มันแตกต่างจากอินเตอร์เฟส [1] อย่างไร (ในไวยากรณ์ Java)
interface Functor<A> {
<B> Functor<B> fmap(Function<B, A> fn)
}
interface Function<Return, Argument> {
Return apply(Argument arg);
}
ความแตกต่างที่เป็นไปได้อย่างหนึ่งที่ฉันคิดได้ก็คือการใช้งานคลาสประเภทที่ใช้ในการเรียกใช้บางอย่างไม่ได้ระบุ แต่พิจารณาจากสภาพแวดล้อม - กล่าวโดยตรวจสอบโมดูลที่มีอยู่สำหรับการใช้งานสำหรับประเภทนี้ ดูเหมือนว่าจะเป็นสิ่งประดิษฐ์ในการนำไปปฏิบัติที่อาจกล่าวถึงเป็นภาษา OO เช่นคอมไพเลอร์ (หรือรันไทม์) สามารถสแกนหา wrapper / extender / monkey-patcher ที่แสดงอินเตอร์เฟสที่จำเป็นในประเภท
ฉันพลาดอะไรไป
[1] โปรดสังเกตว่าการf a
โต้แย้งได้ถูกลบออกไปแล้วfmap
เนื่องจากเป็นภาษา OO คุณจะต้องเรียกวิธีนี้บนวัตถุ อินเทอร์เฟซนี้จะถือว่าf a
อาร์กิวเมนต์ได้รับการแก้ไขแล้ว