T2664.hs:31:9: error: • Could not deduce: Dual a ~ Dual b from the context: ((a :*: b) ~ Dual c, c ~ Dual (a :*: b)) bound by the type signature for: newPChan :: forall c. ((a :*: b) ~ Dual c, c ~ Dual (a :*: b)) => IO (PChan (a :*: b), PChan c) at T2664.hs:23:5-12 Expected: IO (PChan (a :*: b), PChan c) Actual: IO (PChan (a :*: b), PChan (Dual b :+: Dual a)) NB: ‘Dual’ is a non-injective type family • In a stmt of a 'do' block: return (O $ takeMVar v, E (pchoose Right v newPChan) (pchoose Left v newPChan)) In the expression: do v <- newEmptyMVar return (O $ takeMVar v, E (pchoose Right v newPChan) (pchoose Left v newPChan)) In an equation for ‘newPChan’: newPChan = do v <- newEmptyMVar return (O $ takeMVar v, E (pchoose Right v newPChan) (pchoose Left v newPChan)) • Relevant bindings include v :: MVar (Either (PChan a) (PChan b)) (bound at T2664.hs:24:9) newPChan :: IO (PChan (a :*: b), PChan c) (bound at T2664.hs:23:5)