Рассмотрим две объявления data:
{-# LANGUAGE GADTs #-}
data X = Int `Y` Int deriving Show
data Z where
W :: Int -> Int -> Z deriving Show
main = do
print (1 `Y` 2)
print (3 `W` 4)
Запуск вышеуказанной программы вызывает:
1 `Y` 2
W 3 4
поэтому производный show знает, что Y является infix и печатает его соответствующим образом. Синтаксис ::, похоже, не позволяет инфиксности.
Есть ли способ сделать вывод компилятора show для W как infix (кроме явного предоставления экземпляра show для Z)?
Желаемый результат:
1 `Y` 2
3 `W` 4