ソースコードから想像するに、やりたいことはこういうことでしょうか?(Wandbox)
haskell
1main :: IO ()
2main = do
3  n <- readLn :: IO Int
4  -- readLn で1行読み込み、Int 型の値に変換します
5  -- readLn はいろいろな型の値を読むことができるので「Int 型の値を読む」と明示します
6  -- readLn の型が IO Int となっているのは readLn が手続きであることを表わしています
7  -- do 式の中で <- を使うと手続きの結果を受け取れます
8  let
9  -- do 式の中で変数を使う場合は let 構文で導入します
10    x = []
11    y = [n]
12    -- 後で ++ するので、y は [Int] 型でないといけません
13    x' = x ++ y
14    -- Haskell では変数の再束縛ができないので、新しく変数を導入します
15  print x' -- ==> [1]
整数を受け取り、一個目は空のリストへ格納してそれは以降はappendして行きたいです。
こちらから想像すると、こういうことでしょうか?(Wandbox)
haskell
1import System.IO (isEOF)
2
3main :: IO ()
4main =
5  loop []
6  -- 下で定義する loop 関数を呼びます
7  -- Haskell では組み込みのループがないため再帰関数を使います
8  -- Data.Traversable.for を使う方法もあります
9  where
10    loop :: [Int] -> IO ()
11    loop l = do
12      -- l の部分が更新される値です
13      eof <- isEOF
14      if eof
15        then return ()
16        -- EOF の場合はループを抜けます
17        else do
18          n <- readLn
19          let l' = l ++ [n]
20          print l'
21          loop l'
22          -- 更新後の値である l' を渡し loop 関数を呼びます
質問者のコードとそのエラーの解説をします。
haskell
1n = getLine >>= putStrLn
2-- 「これは getLine をして、読み込んだ値を putStrLn に渡す」という「手続き」を表わします
3-- 「手続き」そのものなので実行されておらず n の型は IO () となります
4x = []
5y  = n
6x ++ y
7-- Parse error: naked expression at top level
8-- トップレベルに束縛や import 以外の式は書けません
9main = print y
意図した動作をする Python コードが追記されたので、それに対応する Haskell コードを追記します。
haskell
1main :: IO ()
2main = do
3  li = []
4  i <- readLn :: IO Int
5  let li' = li ++ [i]
6  print li'