谁知道可以执行fn2(_1,_2._2)(3,(4,5))==(3,5)`或类似的多态性haskell函数



有人知道可以执行以下的多态函数吗?

fn :: (a -> b, a -> c)         -> a -> (b, c)
fn :: (a -> b, a -> c, a -> d) -> a -> (b, c, d)
-- etc, supporting arbitrary length tuples.

我知道我可以做

((,,) <$> foo <*> bar <*> qux) baz
(liftA3 (,,) foo bar qux) baz

我想知道我是否也可以做

fn (foo, bar) baz
fn (foo, bar, qux) baz

如果答案依赖于lens软件包,则可以。

,如果这样做,也许可以进一步允许以下一步:

fn2 (_1, _2._2) (3, (4, 5)) == (3, 5)

不,这是不可能的。

您可以获得的最接近的是写一个类型,并为每个元组的大小提供一个实例。实际上,这是"任意长度元组",因为GHC不支持更长的元素。实际上,实际上,大多数做类似事情的库定义了最多7个左右的实例,并将其称为"实际上是任意长度的元素",因为无论如何,使用元素的使用寿命很少。

最新更新