Могу ли я применить список из n значений к функции, которая принимает n значений, где n варьируется?
Первая наивная попытка заключается в следующем, но компилятор (справедливо) жалуется на weird self-referential type for applyN
applyN f xs =
case xs of
[] -> f
(x::xs) -> applyN (f x) xs
Я не понимаю, как будет работать сгиб, и уважать его подпись типа.
Для контекста я хочу взять список декодеров N Json и оценить
Json.objectN ConstructorN n1 n2 ... nN
Ясно, что если n известно (скажем, 2), то мы имеем
case lst of
(d1 :: d2 :: _) -> Json.object2 Constructor2 d1 d2
otherwise -> ....
но это много кода писать, если я не могу обобщить для n.
Я боюсь, что это невозможно, так как в Haskell это нужны специальные флаги компилятора.