У меня есть тип:Не удалось вывести (класс типов а0), вытекающее из использования «переменной»
type DifferentiableFunction n a = (Function n a, List n (Function n a), String)
В другом месте я определяю:
data Something where
Operator :: Something -> (forall a . Floating a => DifferentiableFunction n a) -> Something
Теперь я пытаюсь сопоставления с образцом:
case something of
(Operator s f) -> let (_, _, l) = f in l
Я получаю Could not deduce (Floating a0) arising from a use of ‘f’
. Я не понимаю, почему это происходит.
Почему вы используете этот универсальный тип? Чего вы пытаетесь достичь? – chi
Я пытаюсь ограничить тип функций теми, кто работает с типами «Плавающие». Моя ранняя декларация была «data Something a» без универсального типа, но я столкнулся с другими проблемами. Это связано с переносом 'Something a' в экзистенциальную оболочку (у нее есть другие параметры, кроме' a') и с использованием пакета 'ad' (дифференцируемый тип функции немного вводит в заблуждение, мне просто нужна помеченная функция). Мой код в значительной степени работает сейчас, кроме этой функции, которая пытается извлечь ярлык. Я могу позже задать другой вопрос о восстановлении параметра 'a'. – denormal
@chi Короче говоря: пакет 'ad' не работает с конкретными типами, такими как' Double', ему нужны эти ограничения типа (фактически универсальный квантификатор), чтобы иметь возможность использовать свои собственные типы, которые их создают. – denormal