Verwenden Sie GHC 7.10
Die erste Version von GHC, die dieses Zeug enthielt, wurde am 27. März 2015 veröffentlicht .
Es ist die neueste Version und Prelude hat einige neue Ergänzungen, die für das Golfen nützlich sind:
Die (<$>)
und (<*>)
Operatoren
Diese nützlichen Operatoren von Data.Applicative
made it in! <$>
ist nur fmap
so, dass Sie ersetzen map f x
und fmap f x
mit f<$>x
überall und Bytes zurückzugewinnen. Auch <*>
ist in dem nützlichen Applicative
Beispiel für Listen:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
Der (<$)
Betreiber
x<$a
ist gleichbedeutend mit fmap (const x) a
; dh ersetzen Sie jedes Element in einem Container durch x
.
Dies ist oft eine schöne Alternative zu replicate
: 4<$[1..n]
ist kürzer als replicate n 4
.
Der faltbare / durchfahrbare Vorschlag
Die folgenden Funktionen wurden von der Arbeit an Listen [a]
auf allgemeine Foldable
Typen umgestellt t a
:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Das heißt, sie arbeiten jetzt auch daran Maybe a
, wo sie sich wie "Listen mit höchstens einem Element" verhalten. Zum Beispiel null Nothing == True
, oder sum (Just 3) == 3
. In ähnlicher Weise werden length
0 für Nothing
und 1 für Just
Werte zurückgegeben. Anstatt zu schreiben x==Just y
, können Sie schreiben elem y x
.
Sie können sie auch auf Tupel anwenden, was so funktioniert, als hätten Sie \(a, b) -> [b]
zuerst angerufen . Es ist fast völlig nutzlos, aber or :: (a, Bool) -> Bool
ein Zeichen ist kürzer als snd
und elem b
ist kürzer als (==b).snd
.
Das Monoid funktioniert mempty
undmappend
Nicht oft ein Lebensretter, aber wenn Sie den Typ ableiten können, mempty
ist ein Byte kürzer als Nothing
, also gibt es das.