重新定义这个函数很容易
(,) :: a -> b -> (a,b)
(,) a b = (a,b)
奇怪的是,这个函数可以用于任意长度的元组。比如说,实际上有一个函数:
(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) :: a -> b -> c -> ... -> (a,b,c,...)
这是如何实现的?为什么不对元组的所有标准函数(如zip)进行此操作?
Hoogle给我没有结果,我也看不出模板Haskell如何做到这一点,所以我认为这必须是编译器内部的某种魔法。但这对我来说似乎非常不符合Haskell的风格。