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.Applicativemade it in! <$>ist nur fmapso, dass Sie ersetzen map f xund fmap f xmit f<$>xüberall und Bytes zurückzugewinnen. Auch <*>ist in dem nützlichen ApplicativeBeispiel 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<$aist 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 FoldableTypen 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 length0 für Nothingund 1 für JustWerte 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) -> Boolein Zeichen ist kürzer als sndund elem bist kürzer als (==b).snd.
Das Monoid funktioniert memptyundmappend
Nicht oft ein Lebensretter, aber wenn Sie den Typ ableiten können, memptyist ein Byte kürzer als Nothing, also gibt es das.