Saya tidak terbiasa dengan karya Barry Jay baru-baru ini, tetapi pekerjaannya yang lebih tua mencakup hal-hal yang tidak dapat Anda lakukan di Lisp, karena jenisnya memberikan informasi tambahan.
Misalnya, Anda ingin menentukan ukuran struktur data Lisp. Ini 1 untuk atom, dan n untuk daftar n atom, dan lebih umum ukuran (x) + ukuran (y) untuk (cons x y)
.
Sekarang masukkan jenis ke dalam campuran. Ukuran daftar adalah panjangnya. Sekarang berapa ukuran daftar daftar atom? Jika Anda menganggap struktur data ini sebagai daftar (yang unsur-unsurnya adalah daftar atom), jawabannya adalah panjang daftar. Jika Anda menganggap struktur data ini berisi atom yang kebetulan disimpan dalam daftar daftar, jawabannya adalah jumlah dari panjang daftar elemen.
Jenis memungkinkan Anda untuk membedakan antara dua tampilan (bentuk) dari data mentah ini. Anda memerlukan sistem tipe yang memungkinkan Anda membedakan (Daftar) (Daftar Atom) dan (Daftar Daftar) (Atom). Implementasi paling umum dari perbedaan ini adalah dengan kelas tipe (seperti dalam Haskell).