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 = IO a -> IO a forall a. a -> a id instance RunIO Identity where io :: forall a. Identity a -> IO a io = a -> IO a forall a. a -> IO a forall (m :: * -> *) a. Monad m => a -> m a return (a -> IO a) -> (Identity a -> a) -> Identity a -> IO a forall b c a. (b -> c) -> (a -> b) -> a -> c . Identity a -> a forall a. Identity a -> a runIdentity