Можно ли сопоставить кортеж функций со списком в Haskell?

Я пытаюсь найти способ сделать что-то подобное:

(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)

В этом случае он компилируется и работает нормально.

6
задан Benjamin Kovach 20 June 2014 в 23:02
поделиться