Как определить экземпляр монады «ma» с «a» в Typeclass Show?

Я хотел бы определить экземпляр монады с контейнером M как монадой и с содержащимся типом a , который должен быть членом класса Показать . Это ограничение (то, что a является членом Show ) должно обеспечиваться системой типов.

Я попробовал вот так, но M , к сожалению, не того типа:

data M = forall a. Show a => M a 

instance Monad M where
 return x = M x

Все другие попытки достичь этого наталкиваются на следующую проблему: Так как Монада ] является классом конструктора, у меня нет явного доступа к типу a содержащихся в нем элементов, поэтому я не могу его ограничить.

Кто-нибудь знает решение этой проблемы без определения нового класса Monad ?

6
задан frosch03 20 July 2011 в 15:00
поделиться