I created my own version of getLine like this:

getLine' :: IO String
getLine'        = do x <- getChar
                     if x == '\n' then
                       return []
                     else
                       do 
                         xs <- getLine'
                         return (x:xs)


Basically I created a new file called test.hs and copied above code into it.  I opened WinGHCi afresh and :load test.hs

I can run getLine' in WinGHCi with no problem.  But how does WinGHCi know about getChar and IO?

I assumed I would have to import like this:

import System.IO

Is it because WinGHCi does this import for me?

If I write this program and invoke using runghci:

getLine' :: IO String
getLine'        = do x <- getChar
                     if x == '\n' then
                       return []
                     else
                       do 
                         xs <- getLine'
                         return (x:xs)


main = do
       getLine'


It also works without complaining. 

Is there a list of built-in libraries?  Is that platform dependent?