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