Я пытаюсь найти способ сделать что-то подобное:
(head, last) `someFunction` [1, 2, 3]
для создания кортежа (1, 3)
в качестве вывода.
Теоретически он похож на аппликативный функтор, но немного наоборот. Я предполагаю, что есть аналогичная функция, которая делает это (или какой-то способ сделать ее ), но я не могу ее найти/понять.
Я попытался определить такую функцию:
fmap' :: ((a -> b), (a -> b)) -> [a] -> (b, b)
fmap' (f1, f2) xs = (f1 xs, f2 xs)
но GHC на самом деле не скомпилирует это.
Любая помощь будет отличной; Спасибо!
Редактировать (целый год спустя!):
Мой fmap'
не компилировался из-за неправильной подписи типа. Очевидно, что есть лучшие способы сделать то, что я делал, но тип моего fmap'
вместо этого должен быть:
fmap' :: ((a -> b), (a -> b)) -> a -> (b, b)
В этом случае он компилируется и работает нормально.