関数を再定義するのは簡単です
(,) :: a -> b -> (a,b)
(,) a b = (a,b)
(私にとって)奇妙なことは、この関数が任意の長さのタプルに対して定義されていることです。したがって、たとえば、実際には次の関数があります。
(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,) :: a -> b -> c -> ... -> (a,b,c,...)
これはどのように行われますか?zip などのタプルのすべての標準関数に対して行われないのはなぜですか?
Hoogle からは何の結果も得られず、テンプレート Haskell でこれがどのように行われるのかわかりません。そのため、これはコンパイラ内の何らかの魔法に違いないと思います。しかし、それは私には非常にハスケリーではないようです。