Gunakan GHC 7.10
Versi pertama GHC yang berisi hal-hal ini dirilis pada 27 Maret 2015 .
Ini versi terbaru, dan Prelude mendapatkan beberapa tambahan baru yang berguna untuk bermain golf:
The (<$>)
dan (<*>)
operator
Operator yang bermanfaat ini Data.Applicative
berhasil masuk! <$>
hanya fmap
, sehingga Anda dapat mengganti map f x
dan fmap f x
dengan di f<$>x
mana saja dan memenangkan kembali byte. Juga, <*>
berguna dalam Applicative
contoh untuk daftar:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
The (<$)
Operator
x<$a
setara dengan fmap (const x) a
; yaitu mengganti setiap elemen dalam wadah dengan x
.
Ini sering merupakan alternatif yang bagus untuk replicate
: 4<$[1..n]
lebih pendek dari replicate n 4
.
Proposal Lipat / Dapat Dilewati
Fungsi-fungsi berikut diangkat dari mengerjakan daftar [a]
ke Foldable
tipe umum t a
:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Ini berarti mereka sekarang juga bekerja Maybe a
, di mana mereka berperilaku seperti "daftar dengan paling banyak satu elemen". Misalnya null Nothing == True
,, atau sum (Just 3) == 3
. Demikian pula, length
mengembalikan 0 untuk Nothing
dan 1 untuk Just
nilai. Alih-alih menulis, x==Just y
Anda dapat menulis elem y x
.
Anda juga dapat menerapkannya pada tupel, yang berfungsi seolah-olah Anda sudah menelepon \(a, b) -> [b]
dulu. Ini hampir sama sekali tidak berguna, tetapi or :: (a, Bool) -> Bool
satu karakter lebih pendek dari snd
, dan elem b
lebih pendek dari (==b).snd
.
Fungsi Monoid mempty
danmappend
Tidak sering penyelamat, tetapi jika Anda dapat menyimpulkan jenisnya, mempty
satu byte lebih pendek dari itu Nothing
, jadi itulah.