class Monad m => Logger m where write :: String -> m () instance Logger IO where write = putStr instance a ~ String => Logger (Writer a) where write = tell verbose2 f x y = write (show x ++ " " ++ show y ++ " ==> " ++ show res ++ "\n") >> return res where res = f x y