Can someone explain why this works? I would have expected an error when the typechecker tries to unify m with (StateT [Encoding] m). Dominic. *Codec.ASN1.BER> :t (tc absInteger (Primitive Universal 2 1 [0])) (tc absInteger (Primitive Universal 2 1 [0])) :: forall m e. (MonadError e m) => m Defaulted *Codec.ASN1.BER> :t (\x -> k [] []) (\x -> k [] []) :: forall m t e. (MonadError e m) => t -> StateT [Encoding] m [Maybe Defaulted] *Codec.ASN1.BER> :t (>>=) (>>=) :: forall m b a. (Monad m) => m a -> (a -> m b) -> m b *Codec.ASN1.BER> :t ((tc absInteger (Primitive Universal 2 1 [0])) >>= (\x -> k [] [])) ((tc absInteger (Primitive Universal 2 1 [0])) >>= (\x -> k [] [])) :: forall m e e1. (MonadError e1 (StateT [Encoding] m), MonadError e m) => StateT [Encoding] m [Maybe Defaulted]
participants (1)
-
Dominic Steinitz