{-# LANGUAGE NoImplicitPrelude, FlexibleContexts, NoMonomorphismRestriction #-}

module DDF.IO (module DDF.IO, module DDF.List, module DDF.Char, module DDF.Unit) where

import DDF.List
import DDF.Char
import DDF.Unit
import qualified Prelude as M

string [] = nil
string (c:str) = cons2 (char c) (string str)

class (List r, Unit r, Char r, Monad r M.IO) => IO r where
  putStrLn :: r h (String -> M.IO ())

putStrLn1 = app putStrLn