Я играл с простой функцией для кого-то другого вопроса о переполнении стека и написал выражение:
f a x ++ f a y
Очевидно, что это лучший способ написать это выражение в реальной жизни, учитывая, что у меня есть все эти переменные в области видимости, но я видел дублирование f a
и думал: "Эй, может быть, вы можете удалить это с помощью аппликативного экземпляр для функций". Я закончил с:
liftA2 (++) (flip f x) (flip f y) a
что просто ужасно. Есть ли какой-нибудь лучший способ удалить это дублирование? Очевидно, я мог бы также удалить дублирование, привязав f a
к чему-то в предложении where
, но это было предназначено как упражнение при использовании встроенных функций.