私は Haskell の初心者で、パターン マッチの方法を理解するのに少し苦労していByteStringます。私の関数の[Char]バージョンは次のようになります。
dropAB :: String -> String
dropAB []       = []
dropAB (x:[])   = x:[]
dropAB (x:y:xs) = if x=='a' && y=='b'
                  then dropAB xs
                  else x:(dropAB $ y:xs) 
予想どおり、これにより、文字列から「ab」のすべての出現が除外されます。ただし、これをに適用しようとすると問題が発生しますByteString。
素朴なバージョン
dropR :: BS.ByteString -> BS.ByteString
dropR []         = []
dropR (x:[])     = [x]
<...>
収量
Couldn't match expected type `BS.ByteString'
       against inferred type `[a]'
In the pattern: []
In the definition of `dropR': dropR [] = []
[]Stringではなく通常の場合であるため、明らかに犯人ByteStringです。Subbing inBS.emptyは正しいことのように思えますが、「結合位置の修飾名: BS.empty」が表示されます。試してみましょう
dropR :: BS.ByteString -> BS.ByteString
dropR empty              = empty        
dropR (x cons empty)     = x cons empty
<...>
これにより、 の「パターンの解析エラー」が発生します(x cons empty)。ここで他に何ができるか本当にわかりません。  
補足として、私がこの関数でやろうとしているのは、テキストから特定の UTF16 文字を除外することです。それを達成するためのきれいな方法があれば、私はそれを聞きたいと思っていますが、このパターンマッチングエラーは初心者の haskeller が本当に理解しておくべきもののようです.