Використовуйте GHC 7.10
Перша версія GHC, яка містила цей матеріал, була випущена 27 березня 2015 року .
Це остання версія, а Prelude отримав кілька нових доповнень, корисних для гри в гольф:
(<$>)І (<*>)оператори
Ці корисні оператори Data.Applicativeзробили це! <$>це просто fmap, так що ви можете замінити map f xі fmap f xз f<$>xскрізь і відігравати байти. Також <*>корисний в Applicativeекземплярі для списків:
Prelude> (,)<$>[1..2]<*>"abcd"
[(1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'b'),(2,'c'),(2,'d')]
(<$)оператор
x<$aеквівалент fmap (const x) a; тобто замініть кожен елемент контейнера на x.
Це часто приємна альтернатива replicate: 4<$[1..n]коротше, ніж replicate n 4.
Складна / Прохідна пропозиція
Наступні функції були зняті з роботи над списками [a]до загальних Foldableтипів t a:
fold*, null, length, elem, maximum, minimum, sum, product
and, or, any, all, concat, concatMap
Це означає, що вони зараз також працюють над тим Maybe a, де вони поводяться так само, як "списки з максимум одним елементом". Наприклад null Nothing == True, або sum (Just 3) == 3. Аналогічно lengthповертає значення 0 для Nothingта 1 для Justзначень. Замість написання x==Just yможна писати elem y x.
Ви також можете застосувати їх до кортежів, що працює так, ніби ви зателефонували \(a, b) -> [b]першими. Це майже повністю марно, але or :: (a, Bool) -> Boolна один символ коротше sndі elem bкоротше (==b).snd.
Функції Monoid memptyіmappend
Не часто рятує життя, але якщо ви можете зробити висновок про тип, memptyце на один байт коротше Nothing, так ось це.