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