Sebenarnya, kode OO jauh lebih tidak dapat digunakan kembali, dan itu adalah desain. Gagasan di balik OOP adalah untuk membatasi operasi pada potongan data tertentu ke kode istimewa tertentu yang ada di kelas atau di tempat yang sesuai dalam hierarki warisan. Ini membatasi efek buruk dari mutabilitas. Jika struktur data berubah, hanya ada begitu banyak tempat dalam kode yang dapat bertanggung jawab.
Dengan kekekalan, Anda tidak peduli siapa yang dapat beroperasi pada struktur data apa pun, karena tidak ada yang dapat mengubah salinan data Anda. Ini membuat membuat fungsi-fungsi baru untuk bekerja pada struktur data yang ada jauh lebih mudah. Anda cukup membuat fungsi dan mengelompokkannya ke dalam modul yang tampaknya sesuai dari sudut pandang domain. Anda tidak perlu khawatir tentang di mana menempatkan mereka ke dalam hierarki warisan.
Jenis lain penggunaan kembali kode adalah menciptakan struktur data baru untuk bekerja pada fungsi yang ada. Ini ditangani dalam bahasa fungsional menggunakan fitur seperti generik dan kelas tipe. Sebagai contoh, kelas jenis Ord Haskell memungkinkan Anda untuk menggunakan sortfungsi pada jenis apa pun dengan sebuah Ordinstance. Contoh mudah dibuat jika belum ada.
Ambil Animalcontoh Anda , dan pertimbangkan menerapkan fitur pemberian makan. Implementasi OOP langsung adalah untuk mempertahankan koleksi Animalobjek, dan loop melalui semuanya, memanggil feedmetode pada masing-masing.
Namun, banyak hal menjadi rumit ketika Anda sampai ke detail. Suatu Animalobjek secara alami tahu jenis makanan apa yang dimakannya, dan berapa banyak yang dibutuhkan agar merasa kenyang. Itu tidak secara alami tahu di mana makanan disimpan dan berapa banyak tersedia, sehingga suatu FoodStoreobjek baru saja menjadi ketergantungan setiap Animal, baik sebagai bidang Animalobjek, atau diteruskan sebagai parameter feedmetode. Secara bergantian, untuk menjaga agar Animalkelas lebih kohesif, Anda mungkin pindah feed(animal)ke FoodStoreobjek, atau Anda dapat membuat kekejian dari kelas yang disebut AnimalFeederatau semacamnya.
Dalam FP, tidak ada kecenderungan untuk bidang Animaluntuk selalu tetap dikelompokkan bersama, yang memiliki beberapa implikasi menarik untuk dapat digunakan kembali. Katakanlah Anda memiliki daftar Animalcatatan, dengan bidang seperti name, species, location, food type, food amount, dll Anda juga memiliki daftar FoodStorecatatan dengan bidang-bidang seperti location, food type, dan food amount.
Langkah pertama dalam pemberian makanan mungkin adalah memetakan masing-masing daftar catatan tersebut ke daftar (food amount, food type)pasangan, dengan angka negatif untuk jumlah hewan. Anda kemudian dapat membuat fungsi untuk melakukan segala macam hal dengan pasangan ini, seperti jumlah jumlah masing-masing jenis makanan. Fungsi-fungsi ini bukan milik modul Animalatau FoodStoremodul, tetapi sangat dapat digunakan kembali oleh keduanya.
Anda berakhir dengan banyak fungsi yang melakukan hal-hal berguna dengan [(Num A, Eq B)]yang dapat digunakan kembali dan modular, tetapi Anda memiliki kesulitan mencari tahu di mana harus meletakkannya atau apa yang harus mereka sebut sebagai grup. Efeknya adalah bahwa modul FP lebih sulit untuk diklasifikasi, tetapi klasifikasinya jauh kurang penting.