Use GHC 7.10
La primera versión de GHC que contenía estas cosas fue lanzada el 27 de marzo de 2015 .
Es la última versión, y Prelude tiene algunas nuevas incorporaciones que son útiles para jugar al golf:
Los operadores (<$>)
y(<*>)
¡Estos operadores útiles lo Data.Applicative
lograron! <$>
es justo fmap
, para que pueda reemplazar map f x
y fmap f x
con f<$>x
todas partes y recuperar bytes. Además, <*>
es útil en la Applicative
instancia para listas:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
El (<$)
operador
x<$a
es equivalente a fmap (const x) a
; es decir, reemplazar cada elemento en un contenedor por x
.
Esta suele ser una buena alternativa a replicate
: 4<$[1..n]
es más corta que replicate n 4
.
La propuesta plegable / transitable
Las siguientes funciones se eliminaron de trabajar en listas [a]
a Foldable
tipos generales t a
:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Esto significa que ahora también trabajan Maybe a
, donde se comportan como "listas con un elemento como máximo". Por ejemplo null Nothing == True
, o sum (Just 3) == 3
. Del mismo modo, length
devuelve 0 para Nothing
y 1 para los Just
valores. En lugar de escribir x==Just y
puedes escribir elem y x
.
También puede aplicarlos en tuplas, que funciona como si hubiera llamado \(a, b) -> [b]
primero. Es casi completamente inútil, pero or :: (a, Bool) -> Bool
es un personaje más corto que snd
, y elem b
es más corto que (==b).snd
.
Las funciones monoides mempty
ymappend
No suele ser un salvavidas, pero si puede inferir el tipo, mempty
es un byte más corto que Nothing
, así que ahí está.