stojan
fun <F> putStrLn(A: MonadDefer<F>, line: String): Kind<F, Unit> = A { println(line) } fun <F> getStrLn(A: MonadDefer<F>): Kind<F, String> = A { readLine() ?: throw IOException("Failed to read input!") }