Use GHC 7.10
A primeira versão do GHC que continha esse material foi lançada em 27 de março de 2015 .
É a versão mais recente e o Prelude recebeu algumas novas adições úteis para jogar golfe:
Os operadores (<$>)e(<*>)
Esses operadores úteis Data.Applicativeconseguiram! <$>é apenas fmap, para que você possa substituir map f xe fmap f xpor f<$>xqualquer lugar e recuperar bytes. Além disso, <*>é útil na Applicativeinstância para listas:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
O (<$)operador
x<$aé equivalente a fmap (const x) a; ou seja, substitua todos os elementos em um contêiner por x.
Geralmente, é uma boa alternativa para replicate: 4<$[1..n]é menor que replicate n 4.
A proposta dobrável / atravessável
As seguintes funções foram retiradas do trabalho em listas [a]para Foldabletipos gerais t a:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Isso significa que agora eles também trabalham Maybe a, onde se comportam exatamente como "listas com no máximo um elemento". Por exemplo,, null Nothing == Trueou sum (Just 3) == 3. Da mesma forma, lengthretorna 0 para Nothinge 1 para Justvalores. Em vez de escrever, x==Just yvocê pode escrever elem y x.
Você também pode aplicá-las em tuplas, o que funciona como se você tivesse chamado \(a, b) -> [b]primeiro. É quase completamente inútil, mas or :: (a, Bool) -> Boolé um personagem menor que snd, e elem bé menor que (==b).snd.
O Monoid funciona memptyemappend
Não é sempre um salva-vidas, mas se você pode inferir o tipo, memptyé um byte mais curto que Nothingisso, então é isso.