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 xi fmap f xze f<$>xwszędzie i odzyskać bajtów. Jest także <*>przydatny w Applicativeprzypadku list:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
(<$)operatora
x<$ajest 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 Foldabletypó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 atam, gdzie zachowują się jak „listy zawierające co najwyżej jeden element”. Na przykład null Nothing == True, lub sum (Just 3) == 3. Podobnie lengthzwraca 0 dla Nothingi 1 dla Justwartości. Zamiast pisać x==Just ymoż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) -> Booljest o jedną postać krótszy niż sndi elem bjest krótszy niż (==b).snd.
Funkcje Monoid memptyimappend
Nie często ratuje życie, ale jeśli możesz wywnioskować, jaki memptyjest typ, jest on o jeden bajt krótszy niż Nothing, więc jest taki.