instance
не имеет смысла. Экземпляр задается для типа. Возможное исправление:
instance Hello (World a) where
method1 _ = "Hello World"
An instance
сделки с указанием того, как тип (или список типов) отображает на классе, так что если у вас есть класс C
с параметрами a
, вы можете указать:
class C a where
foo :: a -> a
Теперь вы не много покупаете с этим, потому что вы никогда не говорили, какие a
действительно применимы для C
. С instance
вы указываете, что данный тип (эти типы могут быть «общий») применимы к C
, так что в следующем вы можете сказать:
instance C a where
foo = id
Здесь вы в основном говорят, каждый тип a
(при этом все типы) являются экземплярами C
. И что foo
следует рассматривать как функцию id
.
Иногда вы хотите установить дополнительные ограничения на a
, a
должен, например, создать экземпляр другого класса. Например, с
instance (Integral i) => C i where
foo = (+) 1
Здесь вы говорите, что все интегральные типы i
являются экземплярами C
с foo
определяется как функция приращения. Обратите внимание, что вы не можете просто комбинировать этот и предыдущий экземпляр, потому что Haskell не знает, что выбрать в этом случае.
Или, возможно, вы имели в виду, чтобы определить, как экземпляр @bheklilr предлагает:
instance (Hello a) => Hello (World a) where
method1 _ = "Hello World"
'World' не является классом. Вы вместо этого означали 'instance Hello a => Hello (World a) где ...'? – bheklilr
@bheklilr Да, я сделал. Благодарю. – User137481