Допустим, у меня есть инъективное семейство типа T
Обратные семейства инъективны типа
type family T a = b | b -> a
Мой первый вопрос есть ли способ, чтобы написать:
type family T' = the inverse of T
без необходимости повторять все экземпляры T
но в обратном порядке.
Такой, что: T (X1 a (T' a)) = a
Похоже, это должно работать, так как оба T
и T'
инъективны, учитывая одна сторона это механическое, чтобы работать другой.
В любом случае, написать T'
?
Не было бы ' ~ T b' work? – mb14
Очевидно, что тип Tinv b = a' отклоняется, потому что tyvar 'a' должен упоминаться в аргументах' Tinv', который выглядит слишком ограничительным, когда он определяется ими благодаря фондам в объеме. – chi
Невозможно преобразовать fundep в явное семейное приложение типа, но, как сказал @ mb14, используя ограничение равенства в сигнатуре типа, вы можете вычислить обратное - например. '(a ~ T b) => Прокси a -> Прокси b' или эквивалентно' Proxy (T b) -> Proxy b'. – user2407038