Użyj GHC 7.10
Pierwsza wersja GHC zawierająca te rzeczy została wydana 27 marca 2015 r .
Jest to najnowsza wersja, a Prelude ma kilka nowych dodatków, które są przydatne do gry w golfa:
(<$>)
I (<*>)
operatorzy
Przydali się ci przydatni operatorzy Data.Applicative
! <$>
jest po prostu fmap
, więc można zastąpić map f x
i fmap f x
ze f<$>x
wszędzie i odzyskać bajtów. Jest także <*>
przydatny w Applicative
przypadku list:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
(<$)
operatora
x<$a
jest równoważne z fmap (const x) a
; tzn. zamień każdy element w pojemniku na x
.
Jest to często miła alternatywa dla replicate
: 4<$[1..n]
jest krótsza niż replicate n 4
.
Propozycja składana / przejezdna
Następujące funkcje zostały przeniesione z pracy na listach [a]
do ogólnych Foldable
typów t a
:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Oznacza to, że teraz pracują również Maybe a
tam, gdzie zachowują się jak „listy zawierające co najwyżej jeden element”. Na przykład null Nothing == True
, lub sum (Just 3) == 3
. Podobnie length
zwraca 0 dla Nothing
i 1 dla Just
wartości. Zamiast pisać x==Just y
możesz pisać elem y x
.
Możesz także zastosować je na krotkach, co działa tak, jakbyś zadzwonił jako \(a, b) -> [b]
pierwszy. Jest prawie całkowicie bezużyteczny, ale or :: (a, Bool) -> Bool
jest o jedną postać krótszy niż snd
i elem b
jest krótszy niż (==b).snd
.
Funkcje Monoid mempty
imappend
Nie często ratuje życie, ale jeśli możesz wywnioskować, jaki mempty
jest typ, jest on o jeden bajt krótszy niż Nothing
, więc jest taki.