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.Applicative
conseguiram! <$>
é apenas fmap
, para que você possa substituir map f x
e fmap f x
por f<$>x
qualquer lugar e recuperar bytes. Além disso, <*>
é útil na Applicative
instâ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 Foldable
tipos 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 == True
ou sum (Just 3) == 3
. Da mesma forma, length
retorna 0 para Nothing
e 1 para Just
valores. Em vez de escrever, x==Just y
você 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 mempty
emappend
Não é sempre um salva-vidas, mas se você pode inferir o tipo, mempty
é um byte mais curto que Nothing
isso, então é isso.