Вы можете найти первый или последний элемент Foldable
, используя моноиды First
или Last
из Data.Monoid
.
foldMap (Last . Just) :: Foldable t => t a -> Last a
foldMap (First . Just) :: Foldable t => t a -> First a
Все Foldable
конвертируются в список,и так как вы можете найти начало и конец списка, вы можете сделать это для любого Foldable
.
toList = foldr (:) [] :: Foldable t => t a -> [a]
Тем не менее, хвост будет иметь тип списка, а не тип Foldable
(если это не было слишком списком).В конечном итоге это происходит потому, что не все, что является Foldable
, могут реализовывать несвязанные объекты.Например:
data Pair a = Pair a a
Это Foldable
, но вы не можете представить хвост Pair
, используя Pair
.