2
是否有可能构造一个函数来映射任意元组单元的元组?Haskell:如何映射一个函数通过任意单元组元组
例如,
f :: (m a -> m [a]) -> (m x, m y) -> (m [x], m [y])
(但对于任意的元数)。 This similar question,有许多有希望的建议;例如镜头'each
或over both
,但每个似乎都需要一个同质类型的元组:我想使用具有不同内部类型的同质单子元组。
好的,谢谢@AJFarmer。我担心这是无法完成的,但不能明确地解释为什么;所以认为这值得问,如果只是为了澄清为什么不。关键似乎是fn在第一个arg通过实例化时被传递给了一个特定的a,除非我们按照您的说法使用rankNTypes。 – user3416536
@ user3416536没错;类型变量是通过一个函数的类型传递的,并且不是隐含的,具有不同变量的两个类型是相等的,但是这是可能的。 'forall'只是说它可以在任何类型上工作,当然包括'm x'和'm y'! – AJFarmar