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.Applicative
made in! <$>
est juste fmap
, donc vous pouvez remplacer map f x
et fmap f x
avec f<$>x
partout et récupérer des octets. Aussi, <*>
est utile dans l' Applicative
instance 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<$a
est é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 Foldable
types 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, length
renvoie 0 pour Nothing
et 1 pour les Just
valeurs. Au lieu d'écrire, x==Just y
vous 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) -> Bool
est un personnage plus court que snd
, et elem b
est plus court que (==b).snd
.
Le monoïde fonctionne mempty
etmappend
Pas souvent un épargnant de vie, mais si vous pouvez en déduire le type, mempty
un octet est plus court que Nothing
, alors voilà.