Можно ли сравнивать два типа, если их можно назначить другому?
Скажем, у меня есть два types:
t1 <- [t| (Functor f) => (a -> b) -> f a -> f b |]
t2 <- [t| (Int -> Char) -> [Int] -> [Char] |]
Можно ли в шаблоне Haskell определить, что выражение t1
также может быть t2
? (Без внедрения унификации типов).
Ответы
Ответ 1
Как говорит jberryman в комментариях, вы можете сгенерировать код, который заставит typechecker объединить два типа. Тем не менее, вы не можете запираться в typechecker, чтобы убедиться, что вы сами и ответили на результат. У вас просто нет надлежащего доступа к полной среде typechecker на этапе расширения TH.
Ответ 2
Да, вы можете вывести всю другую переменную в самый абстрактный класс, который используется