Extracting an IO from a Lio is what the runListT accessor is for. Here is a program you can run

import Control.Monad.List

type Lio = ListT IO

hello :: Lio ()  
hello = do     
   lift $ putStrLn "Hello World"

main = runListT hello

If compiled, the output of this main will be

Hello World