Честно говоря, идея вашего подхода на самом деле выглядит довольно вменяемой для меня. Начнем с того, что я, вероятно, использовал бы concat
intsead из foldl1 (++)
и бросил бы несколько паренсов, чтобы получить:
f x y = concat <$> sequence [getEnv x, return "-", getEnv y]
Это действительно не кажется мне таким уж плохим. Но если бы я действительно хотел продвинуться дальше, вот некоторые мысли, которые у меня были бы. Во-первых, я бы вспомнил функцию intercalate
.
f x y = intercalate "-" <$> sequence [getEnv x, getEnv y]
Также есть удобное сокращение для применения функции к каждому элементу списка; mapM f = sequence . map f
. Итак:
f x y = intercalate "-" <$> mapM getEnv [x,y]
Я бы остановился там; это выглядит довольно чистым и ремонтопригодным для меня.