У меня есть код на следующей схеме:Haskell: Использование одного класса в другой экземпляр
class First s where
func1 :: s -> s
class Second a where
func2 :: s -> a s
data D s = D {value :: s}
myFunc2 :: First s => s -> D s
myFunc2 = undefined
В аргументе общих func2 не может быть экземпляром первой. Я хочу сделать D-экземпляр Second в только тех случаях, когда это значение экземпляра First. Тогда я хочу, чтобы получить этот экземпляр:
instance Second D where
func2 = myFunc2
Но я получаю сообщение об ошибке:
No instance for (First s)
arising from a use of `myFunc2'
Хорошо, пусть, например, быть:
instance First s => Second D where
func2 = myFunc2
Но это дает ошибку:
Ambiguous constraint `First s'
At least one of the forall'd type variables mentioned by the constraint
must be reachable from the type after the '=>'
In the instance declaration for `Second D'
Итак, есть способ получить экземпляр класса с некоторыми условиями из других классов, но без всех переменных типа после '=>'?
Спасибо, это похоже на лучшее, что я могу сделать. – spontaliku