Доброго времени суток.
Создаю вот такой тип данных и класс типов:
data (Integral a, Integral b, Integral c) => FractionType a b c = FractionType
{
intPart :: a,
nomPart :: b,
denomPart :: c
} deriving (Eq, Show)
class (Num a) => NaturalFraction a where
normalize :: a -> a
instance (Integral a, Integral b, Integral c) => NaturalFraction (FractionType a b c)
GHC начинает материться, что не может вывести (Num (FractionType a b c)) из контекста и что нужно добавить это дело туда.
Не понимаю зачем, но меняю последнюю строку на:
instance (Num (FractionType a b c), Integral a, Integral b, Integral c) => NaturalFraction (FractionType a b c)
Тогда код начинает компилироваться, но только после указания ключа -XUndecidableInstances. Вопрос: зачем приходится указывать в контексте Num (...), если NaturalFraction итак производный от него?