在不使用不安全函数的情况下,如何在Haskell中为Foldable编写tailMay?

bba*_*ker 5 haskell

签名应为:

tailMay :: Foldable f => f a -> Maybe (f a)
Run Code Online (Sandbox Code Playgroud)

为我提供了的定义headMay,这很有意义,并且(对我而言)非常聪明:

headMay :: Foldable f => f a -> Maybe a
headMay = foldr (const . Just) Nothing
Run Code Online (Sandbox Code Playgroud)

不幸的是,我还没有想到类似的东西tailMay,并且类似的实现似乎使用了魔术或不安全的函数。

如果这不可能,那么(Applicative t, Foldable t)对我有用的东西也可以满足我的目的(我收集的内容也暗示Traversable t)。