Tipe Data Aljabar (ADT) di Haskell dapat secara otomatis menjadi instance dari beberapa kelas tipe (sepertiShow
,Eq
) dengan menurunkannya .
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
Pertanyaan saya adalah, bagaimana cara deriving
kerjanya, yaitu bagaimana Haskell tahu bagaimana menerapkan fungsi kelas tipe turunan untuk ADT turunan?
Juga, mengapa deriving
dibatasi hanya untuk kelas tipe tertentu? Mengapa saya tidak bisa menulis kelas tipe saya sendiri yang bisa diturunkan?
sumber
StandaloneDeriving
di manual ghcDari laporan Haskell 98:
Berikut penjelasan tentang cara mendapatkan kelas jenis ini: http://www.haskell.org/onlinereport/derived.html#derived-appendix
sumber
Dimungkinkan untuk menggunakan Template Haskell untuk menghasilkan deklarasi instance dengan cara yang mirip dengan deriving-clauses.
Contoh berikut dicuri tanpa malu-malu dari Haskell Wiki :
sumber