毎ｎ番目の数字をリストから消したい


今Haskellを使ってタイトルでも書いたように毎ｎ番目の数字をリストから消すコードを書いているのですがどうもうまくいきません。

例）

[code]

    dropevery [0,1,2,3,4,5,6,7,8,9] 3
    [0,1,3,4,6,7,9] 
    
[/code]

*2, 5, 8 と毎3番目の数字がリストから落とされ残った数字が表示されるコードです。

いま色々試しているのですがなかなかうまくいきません。  
以下のコードは色々試して、いろいろなサイト等をみて書いたものです。まだコーディングが必要な箇所もあるのですが、何を書いたらいいのか分からないです（？と記入した箇所）

どなたか解決案がある方がいらしたら、答えていただけると幸いです。また訂正箇所もあったら教えていただけると幸いです。  
よろしくお願いします。

現在のコード

[code]

    dropevery :: [a] -> Int -> [a]
    dropevery [] _ = []
    dropevery xs n = go 0 xs
        where go _ [] = []
              go i (y:ys) | i == n = 0（？）
                          | otherwise = ？
                                                                        
    main = putStrLn (show (dropevery)[0,1,2,3,4,5,6,7,8,9] 3)
    
[/code]




こちらでいかがでしょうか:

[code]

    dropevery :: [a] -> Int -> [a]
    dropevery xs n = go xs
     where
      go xs' =
        let (xsNotDropped, xsLeft) = splitAt (n - 1) xs'
         in
          case xsLeft of
              [] -> xsNotDropped
              (_ : xsAfterN) ->
                xsNotDropped ++ go xsAfterN
    
    
    main = putStrLn (show (dropevery [0,1,2,3,4,5,6,7,8,9] 3))
    
[/code]

以下補足事項:

  * もし勉強のために敢えてやっているのであれば恐縮ですが、こういうときは極力自分では再帰を書かずに、標準ライブラリーにある関数（上記の場合`splitAt`）を利用するのをお勧めします。
  * 一般にHaskell製の関数は、他の多くのプログラミング言語と異なり、「主に処理する引数」を後ろに置くことが推奨されています。その方がカリー化と相性がいいためです（詳細が気になる場合は追加の質問を！）。なのでどちらかというと、`dropevery :: Int -> [a] -> [a]`という型にした方がいいかと思います。

