У меня есть typeclass MyClass, и в нем есть функция, которая создает String. Я хочу использовать это для обозначения экземпляра Show, чтобы я мог передавать типы, реализующие MyClass в Show. До сих пор я,
class MyClass a where
    someFunc :: a -> a
    myShow :: a -> String 
instance MyClass a => Show a where
    show a = myShow a
 который дает ошибку Constraint is no smaller than the instance head., я также пробовал,
class MyClass a where
    someFunc :: a -> a
    myShow :: a -> String
instance Show (MyClass a) where
    show a = myShow a
 который дает ошибку, Class MyClass 'используется как тип`.
Как я могу правильно выразить эти отношения в Haskell? Спасибо.
Я должен добавить, что я хочу проследить это с конкретными экземплярами MyClass, которые испускают определенные строки на основе их типа. Например,
data Foo = Foo
data Bar = Bar
instance MyClass Foo where
    myShow a = "foo"
instance MyClass Bar where
    myShow a = "bar"
main = do
    print Foo
    print Bar