The season
Fungsi menggunakan fungsi aljabar tapi aku merasa seperti kode berulang-ulang.
Bagaimana saya membuatnya sesingkat mungkin?
data Month = Jan | Feb | Mar | Apr | May | June | July | Aug | Sept| Oct | Nov | Dec
deriving (Eq,Ord,Show,Read)
data Seasons = Spring | Summer | Autumn | Winter
deriving (Eq,Ord,Show,Read)
season :: Month -> Seasons
season Jan = Winter
season Feb = Winter
season Mar = Spring
season Apr = Spring
season May = Spring
season June = Summer
season July = Summer
season Aug = Summer
season Sept = Autumn
season Oct = Autumn
season Nov = Autumn
season Dec = Winter
haskell
algebraic-data-types
Stephen Adams
sumber
sumber
Jawaban:
Anda dapat menggunakan penjaga, karena Anda membuat
Month
instance dariOrd
:sumber
Tambahkan
Enum
ke kedua definisi tipe data Anda 'deriving
klausa , laluTiga bulan dalam satu musim, empat musim dalam setahun, musim semi dimulai pada bulan Maret.
sumber
Ini sangat mirip dengan jawaban Will Ness (melakukan aritmatika pada indeks bulan melalui
Enum
instance), hanya dengan beberapa penyesuaian demi keterbacaan:Bagaimanapun, ada sesuatu yang bisa dikatakan untuk mendukung solusi asli Anda yang mencantumkan semua kasus secara eksplisit, karena keterusterangannya. Pengulangan dalam menulis itu dapat dikurangi dengan menggunakan-
case
pernyataan bukan beberapa persamaan.sumber