{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE FlexibleInstances, UndecidableInstances #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Text.Show.ToolsYj (ShowIO(..), printIO) where

class ShowIO a where
	showIO :: a -> IO String

instance {-# OVERLAPPABLE #-} Show a => ShowIO a where
	showIO :: a -> IO String
showIO = String -> IO String
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (String -> IO String) -> (a -> String) -> a -> IO String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> String
forall a. Show a => a -> String
show

printIO :: ShowIO a => a -> IO ()
printIO :: forall a. ShowIO a => a -> IO ()
printIO = (String -> IO ()
putStrLn (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<<) (IO String -> IO ()) -> (a -> IO String) -> a -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> IO String
forall a. ShowIO a => a -> IO String
showIO