module Test.Crypto.RunIO where import Control.Monad.Identity class RunIO m where io :: m a -> IO a instance RunIO IO where io :: forall a. IO a -> IO a io = forall a. a -> a id instance RunIO Identity where io :: forall a. Identity a -> IO a io = forall (m :: * -> *) a. Monad m => a -> m a return forall b c a. (b -> c) -> (a -> b) -> a -> c . forall a. Identity a -> a runIdentity