Pertanyaan Haruskah saya menggunakan ekstensi GHC Haskell atau tidak?


Ketika saya belajar Haskell, saya melihat bahwa ada banyak ekstensi bahasa digunakan dalam kode kehidupan nyata. Sebagai seorang pemula, haruskah saya belajar menggunakannya, atau haruskah saya menghindarinya dengan cara apa pun? Saya melihat bahwa itu melanggar kompatibilitas dengan Haskell 98 dan membatasi kode untuk cukup banyak GHC saja. Namun, jika saya menelusuri paket di Hackage, saya melihat bahwa kebanyakan dari mereka adalah GHC saja.

Jadi, apa sikap komunitas terhadap penggunaan ekstensi bahasa?

Dan jika penggunaan ekstensi itu baik-baik saja, bagaimana saya bisa membedakan ekstensi yang dapat saya gunakan "aman" (yang mungkin menjadi bagian dari standar Haskell berikutnya) dari yang sebagian besar "eksperimental"? Misalnya, saya kira itu -XDisambiguateRecordFields bagus dan bermanfaat, tetapi apakah itu mungkin didukung di masa depan?


75
2018-04-29 10:39


asal


Jawaban:


Ada beberapa ekstensi GHC yang terlalu bagus untuk ditinggali. Di antara favorit saya adalah

  • Kelas jenis multiparameter
  • Variabel tipe Scoped
  • Jenis peringkat yang lebih tinggi
  • Tipe data aljabar umum (GADT)

Dari jumlah ini yang benar-benar penting adalah kelas jenis multiparameter.

Beberapa ekstensi GHC sangat spekulatif dan eksperimental, dan Anda mungkin ingin menggunakannya dengan hati-hati. Cara yang baik untuk mengidentifikasi ekstensi yang stabil dan tepercaya adalah dengan melihat apakah itu dimasukkan untuk dimasukkan Haskell Prime, yang diharapkan menjadi penerus Haskell 98.

Saya kedua saran Don Stewart bahwa setiap ekstensi harus ditandai menggunakan LANGUAGE pragma dalam file sumber. Jangan aktifkan ekstensi menggunakan opsi baris perintah.


69
2018-04-29 23:07



Ya, gunakan ekstensi yang sesuai.

Tetapi pastikan untuk mengaktifkannya dengan sengaja - hanya ketika Anda memutuskan Anda membutuhkannya. Lakukan ini secara per-modul melalui {-# LANGUAGE Rank2Types #-} (sebagai contoh).


51
2018-04-29 16:13



Secara umum orang menggunakan ekstensi GHC cukup berat, karena mereka sangat berguna dan Haskell 98 cukup tua. Setelah ada orang-orang standar yang lebih up to date mungkin membuat upaya lebih untuk menaatinya.

Anda dapat menemukan status proposal untuk standar berikutnya sini.


19
2018-04-29 12:39



Jawaban lain di sini bagus. Saya akan menambahkan bahwa ekstensi GHC tidak rentan di masa depan (*) karena mungkin, karena GHC tampaknya jauh dan jauh kompilator Haskell yang paling populer, dan saya tidak melihat perubahan itu segera.

(*) Seperti dalam kebalikan dari "masa depan-bukti"


4
2018-05-02 18:31