классов типов я объявил класс и два экземпляра:Функция не будет читать из двух
class A a where
name :: a -> String
dMs :: a -> [(String,String,Double)]
instance A B where
name s = B s
dMs a = dM a
instance A C where
name s = C s
dMs a = dM a
dM :: (A a) => [a] -> [(String,String,Double)]
Но когда я компилирую свои с заголовком выше, я получаю сообщение об ошибке:
Couldn't match expected type ‘[a0]’ with actual type ‘C’
In the first argument of ‘dM’, namely ‘a’
In the expression: dM a
Я хочу dM
функция, чтобы иметь возможность принимать список типов B
или C
.
Если я изменю заголовок, чтобы принять только один тип (либо только B
, либо просто C
), код компилируется и работает без сбоев.
Где вы определили 'B' и' C'? – Sibi
@ Сиби Раньше в коде. Каждый из них является «данными» с именем и некоторыми другими соответствующими значениями. Каждый из них работает индивидуально. – Gurkmeja101
Попробуйте определить dM прямо в вашем классе как стандартную реализацию. На данный момент вы пытаетесь использовать экземпляр B/C внутри определения самого экземпляра. – thoferon