Powiedzmy mam injective rodzinę typu T
odwrotne rodziny injective typu
type family T a = b | b -> a
Moje pierwsze pytanie czy istnieje sposób, aby napisać:
type family T' = the inverse of T
bez konieczności powtarzania wszystkich wystąpień T
ale w odwrotnej kolejności.
taka, że: T (X1 a (T' a)) = a
Wydaje się, że to powinno działać, ponieważ zarówno T
i T'
są injective, biorąc pod uwagę z jednej strony jest to mechaniczny wypracować drugiej.
W każdym razie napisać: T'
?
Czy nie 'a ~ T b' działa? – mb14
Wygląda na to, że 'typ Tinv b = a' jest odrzucany, ponieważ tyvar' a' musi być wymieniony w argumentach 'Tinv', który wygląda zbyt restrykcyjnie, gdy jest określany przez nich dzięki danym w przybliżeniu. – chi
Nie można przekonwertować kapitalnego na jawną aplikację rodzinną typu, ale jak powiedział @ mb14, przy użyciu ograniczenia równości w sygnaturze typu można obliczyć odwrotność - np. '(a ~ T b) => Proxy a -> Proxy b' lub równoważnie' Proxy (T b) -> Proxy b'. – user2407038