У меня есть 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