Berasal dari latar belakang C ++ saya tidak mengerti mengapa seseorang membutuhkan tipe / tipe ekspresi sebagai warga negara kelas satu? Satu-satunya bahasa yang saya tahu yang mendukung fitur ini adalah Aldor.
Adakah yang punya literatur tentang tipe sebagai warga negara kelas satu atau tahu beberapa alasan mengapa ini berguna?
Jawaban:
Tipe kelas pertama memungkinkan sesuatu yang disebut pengetikan dependen . Ini memungkinkan programmer untuk menggunakan nilai tipe pada level tipe. Misalnya, tipe semua pasangan bilangan bulat adalah tipe biasa, sedangkan pasangan semua bilangan bulat dengan angka kiri lebih kecil dari angka kanan adalah tipe dependen. Contoh pengantar standar dari ini adalah daftar panjang disandikan (biasanya disebut
Vector
dalam Haskell / Idris). Kode pseudo berikut adalah campuran dari Idris dan Haskell.Bagian kode ini memberi tahu kita dua hal:
cons
ing elemen ke daftar membuat daftar panjangn + 1
Ini terlihat sangat mirip dengan konsep lain dengan 0 dan
n + 1
, bukan? Saya akan kembali ke sana.Apa yang kita dapat dari ini? Kami sekarang dapat menentukan properti tambahan dari fungsi yang kami gunakan. Misalnya: Properti penting
append
adalah bahwa panjang daftar yang dihasilkan adalah jumlah dari panjang dari dua daftar argumen:Namun secara keseluruhan teknik ini tampaknya tidak semua berguna dalam pemrograman sehari-hari. Bagaimana ini berhubungan dengan soket,
POST
/GET
permintaan dan sebagainya?Yah itu tidak (setidaknya bukan tanpa usaha yang cukup). Tapi itu bisa membantu kita dengan cara lain:
Tipe dependen memungkinkan kita untuk merumuskan invarian dalam kode - aturan seperti bagaimana suatu fungsi harus berperilaku. Dengan menggunakan ini, kami mendapatkan keamanan tambahan tentang perilaku kode, mirip dengan kondisi sebelum dan sesudah Eiffel. Ini sangat berguna untuk pembuktian teorema otomatis, yang merupakan salah satu kegunaan yang mungkin untuk Idris.
Kembali ke contoh di atas, definisi daftar panjang-dikodekan menyerupai konsep matematika induksi . Di Idris, Anda sebenarnya dapat merumuskan konsep induksi pada daftar seperti berikut:
Teknik ini terbatas pada bukti konstruktif, tetapi tetap sangat kuat. Anda dapat mencoba menulis secara
append
induktif sebagai latihan.Tentu saja, tipe dependen hanyalah satu penggunaan tipe kelas satu, tapi ini bisa dibilang salah satu yang paling umum. Penggunaan tambahan termasuk, misalnya, mengembalikan tipe tertentu dari fungsi berdasarkan argumennya.
Ini adalah contoh yang tidak masuk akal, tetapi ini menunjukkan sesuatu yang tidak dapat Anda tiru tanpa tipe kelas satu.
sumber