我对《Real World Haskell》中的代码有些困惑。
import qualified Data.ByteString.Lazy.Char8 as L8
import qualified Data.ByteString.Lazy as L
matchHeader :: L.ByteString -> L.ByteString -> Maybe L.ByteString
matchHeader prefix str
| prefix `L8.isPrefixOf` str
= Just (L8.dropWhile isSpace (L.drop (L.length prefix) str))
| otherwise
= Nothing
在这个函数中,L
和L8
似乎可以互换使用,如果我用L8
替换L
,特别是对于类型L.ByteString
和L8.ByteString
,就能编译通过。我在hackage上看到它们链接到了同一个源,这是否意味着Data.ByteString.Lazy.Char8.ByteString
和Data.ByteString.Lazy.ByteString
是相同的?为什么这里使用L8.isPrefixOf
而不是L.isPrefixOf
?