Экземпляры класса типа для типов с 2 параметрами, когда класс типа имеет только один

Рассмотрим следующий тип-класс:

class Listable a where
   asList :: a t -> [t]

Достаточно просто создать экземпляры для типов с одним параметром:

instance Listable [] where
   asList = id

instance Listable Maybe where
   asList (Just x) = [x]
   asList Nothing = []

Теперь, как мне создать экземпляр для пары с двумя идентичными параметрами типа? Конечно, я мог бы сделать некоторую упаковку:

data V2 a = V2 a a

v2 (p,q) = V2 p q

instance Listable V2 where
   asList (V2 p q) = [p,q]

Теперь я мог бы написать такие вещи, как asList $ v2 (47, 11) , но такого рода поражение цели.

Есть ли способ ограничить тип пары для случаев, когда оба параметра типа равны, и написать для этого экземпляр Listable ? Если нет, то каков обычный обходной путь?

9
задан Landei 19 July 2011 в 12:26
поделиться