Dmytro Starosud (dima_starosud) wrote in ru_lambda,
Dmytro Starosud
dima_starosud
ru_lambda

Category:

Я не понимаю 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' отпала. Но все равно хотелось бы услышать мысли по-этому поводу.
Tags: fprog, haskell, incoherent instances, incoherentinstances, type classes
Subscribe

  • Как сделать ЭТО без FlexibleContexts ?

    {-# Language TypeFamilies, FlexibleContexts #-} module Main where import qualified Data.List as L class (Num (Elem c)) => DataSet c where type…

  • Пакеты программ на haskell под RHEL

    Всем доброго времени суток! На всякий случай напишу, что готов помочь в сборке пакетов программ на haskell под RHEL 5/6 32/64. Вдруг кому-то будет…

  • Как дебажить FFI?

    Пару лет назад написал привязку к библиотеке pam, чтобы можно было по паролю рута или другого системного юзера авторизовываться. Для утилит всяких.…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 2 comments