par
объявляется как:
par :: a -> b -> b
Обратите внимание, что первый аргумент отбрасывается. Чтобы использовать par, вам нужно придумывать трюки, например использовать одно и то же выражение несколько раз.
Если его целью является параллельное выполнение a и b, почему он не был определен следующим образом?:
par :: (a, b) -> (a, b)
Взятие кортежа (неоцененных) выражений и возврат одних и тех же выражений, пока они потенциально материализуются в фоновых потоках.
Кажется, что последняя модель проще первой. Почему дизайн был выбран именно таким?