$
предпочтительнее круглых скобок, когда расстояние между открывающей и закрывающей скобками в противном случае будет больше, чем хорошие ордера на удобочитаемость, или если у вас есть несколько слоев вложенных скобок.
Например
i (h (g (f x)))
можно переписать
i $ h $ g $ f x
Другими словами, оно представляет собой право-ассоциативное применение функции. Это полезно, потому что обычное приложение функции связывается слева, то есть следующее
i h g f x
... можно переписать следующим образом
(((i h) g) f) x
Другие удобные варианты использования функции ($)
включают сжатие списка с ней:
zipWith ($) fs xs
Это применяет каждую функцию в списке функций fs
к соответствующему аргументу в списке xs
и собирает результаты в список. Сравните с sequence fs x
, который применяет список функций fs
к одному аргументу x
и собирает результаты; и fs <*> xs
, который применяет каждую функцию в списке fs
к каждому элементу списка xs
.