Вы можете написать свою собственную реализацию конкатенации (даже через инфиксный оператор с некоторым причудливым именем, если необходимо). Просто «деструктурируйте» упакованные значения, объедините их и поместите результат обратно в соответствующий «контейнер»:
let (|@|) l1 l2 =
match l1, l2 with
| Parmap.L l1, Parmap.L l2 -> Parmap.L (l1 @ l2)
| Parmap.A l1, Parmap.A l2 -> Parmap.A (Array.append l1 l2)
| _, _ -> failwith "cannot concat oranges to apples"
;;
magic1 |@| magic2;;
- : int Parmap.sequence = Parmap.L [1; 2; 3; 4; 5; 6]