Utilisez GHC 7.10
La première version de GHC contenant ces éléments a été publiée le 27 mars 2015 .
C'est la dernière version, et Prelude a de nouveaux ajouts utiles pour le golf:
Les (<$>)et (<*>)opérateurs
Ces opérateurs utiles de Data.Applicativemade in! <$>est juste fmap, donc vous pouvez remplacer map f xet fmap f xavec f<$>xpartout et récupérer des octets. Aussi, <*>est utile dans l' Applicativeinstance pour les listes:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
L' (<$)opérateur
x<$aest équivalent à fmap (const x) a; c'est-à-dire remplacer chaque élément d'un conteneur par x.
C'est souvent une bonne alternative à replicate: 4<$[1..n]est plus courte que replicate n 4.
La proposition pliable / transversale
Les fonctions suivantes ont été levées du travail sur les listes [a]aux Foldabletypes généraux t a:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Cela signifie qu'ils travaillent maintenant également Maybe a, où ils se comportent exactement comme des "listes comportant au plus un élément". Par exemple null Nothing == True, ou sum (Just 3) == 3. De même, lengthrenvoie 0 pour Nothinget 1 pour les Justvaleurs. Au lieu d'écrire, x==Just yvous pouvez écrire elem y x.
Vous pouvez également les appliquer sur des tuples, ce qui fonctionne comme si vous aviez appelé en \(a, b) -> [b]premier. C'est presque complètement inutile, mais or :: (a, Bool) -> Boolest un personnage plus court que snd, et elem best plus court que (==b).snd.
Le monoïde fonctionne memptyetmappend
Pas souvent un épargnant de vie, mais si vous pouvez en déduire le type, memptyun octet est plus court que Nothing, alors voilà.