Usa GHC 7.10
La prima versione di GHC che conteneva questo materiale è stata rilasciata il 27 marzo 2015 .
È l'ultima versione e Prelude ha ottenuto alcune nuove aggiunte utili per il golf:
Gli operatori (<$>)
e(<*>)
Questi utili operatori di ce l'hanno Data.Applicative
fatta! <$>
è giusto fmap
, quindi è possibile sostituire map f x
e fmap f x
con f<$>x
ovunque e riconquistare byte. Inoltre, <*>
è utile Applicative
nell'istanza per gli elenchi:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
L' (<$)
operatore
x<$a
è equivalente a fmap (const x) a
; cioè sostituire ogni elemento in un contenitore con x
.
Questa è spesso una bella alternativa a replicate
: 4<$[1..n]
è più breve di replicate n 4
.
La proposta pieghevole / attraversabile
Le seguenti funzioni sono state portate dal lavoro sugli elenchi [a]
ai Foldable
tipi generali t a
:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Ciò significa che ora funzionano anche su Maybe a
, dove si comportano proprio come "elenchi con al massimo un elemento". Ad esempio null Nothing == True
, o sum (Just 3) == 3
. Allo stesso modo, length
restituisce 0 per Nothing
e 1 per i Just
valori. Invece di scrivere x==Just y
puoi scrivere elem y x
.
Puoi anche applicarli sulle tuple, che funzionano come se avessi chiamato per \(a, b) -> [b]
primo. È quasi completamente inutile, ma or :: (a, Bool) -> Bool
è un personaggio più corto di snd
, ed elem b
è più corto di (==b).snd
.
Le funzioni Monoid mempty
emappend
Non spesso salva la vita, ma se puoi inferire il tipo, mempty
è un byte più corto di Nothing
, quindi c'è quello.