module MyStream where class MyStream m where readChar :: m Char eof :: m Bool writeStr :: String -> m () write :: (Show v, MyStream m) => v -> m () write v = writeStr (show v) type WithIO s = (s,String,String)