Я не знаю, будет ли что-нибудь удовлетворительное для foldr1
. [Я думаю] Это просто определено как
foldr1 f (x:xs) = foldr f x xs
давайте сначала расширим то, что у вас есть выше, для работы со всем списком,
f (foldr g x xs) = foldr h (f x) xs
для foldr1, можно сказать,
f (foldr1 g xs) = f (foldr g x xs)
= foldr h (f x) xs
для повторного уплотнения в foldr1, вы можете создать некоторую мнимую функцию, которая отображает f
на левый элемент, в результате,
f . foldr1 g = foldr1 h (mapfst f) where
mapfst (x:xs) = f x : xs