Ошибка - map2 f (l1, l2)
(как и сказала бы ошибка). Вы передаете (l1, l2)
как кортеж, в то время как они должны быть отдельными параметрами карри: map2 f l1 l2
.
Кроме того, ваша функция не обрабатывает случаи различной длины (шаблоны с одним списком пустым, но не с другим). В этом случае функция выдаст ошибку соответствия, возможно, вы захотите вызвать более специализированную ошибку, такую как invalid_arg "map2"
или что-то еще.