[**Tags**|fprog, haskell, incoherent instances, incoherentinstances, type classes]Копая расширяемые записи для Haskell столкнулся с проблемой.мне нужна функция:cast' :: ISubset fs' fs => PlainRec fs -> PlainRec fs'тривиально это будет:cast' = castно компилятор говорит: Could not deduce (PlainRec fs <: PlainRec fs') arising from a use of `cast' from the context (ISubset * fs' fs) Правильно ли я понимаю, что хотя и для конкретных fs и fs' можно с легкостью подобрать экземпляры (из файла), но для случая функции cast' они как-бы общие, и через это оно не компилируется?Можно добавить экземпляр для общего случая и как бы спрятать все эти выведения внутри функций, но правильно ли это, так как если добавить экземпляр для общего случая появляется ошибка с текстом: (The choice depends on the instantiation of fs, fs' To pick the first instance above, use -XIncoherentInstances when compiling the other instance declarations) Это оно мне предлагает изменить библиотеку?Подскажите, пожалуйста, что делают в таких ситуациях.Не понимаю где нужно копать и какой лопатой.Спасибо!UPDATE [Самая-самая] изначальная проблема решилась, то есть потребность в функции cast' отпала. Но все равно хотелось бы услышать мысли по-этому поводу. |
|