As importações do Haskell têm efeitos colaterais?

Eu escrevi algum código há um tempo atrás, que usaOverloadedStrings para criarByteStrings de literais String codificados em hexadecimal, que ele decodifica usando as funções fornecidas porbase16-bytestring. Isso funcionou bem, mas parece que eu não entendi tão bem quanto eu pensava.

O que me deixa completamente confuso é isso. Porque

{-# LANGUAGE OverloadedStrings #-}

import Data.ByteString.Base16 ()
import qualified Data.ByteString as B

plaintext = "The message" :: B.ByteString

main = print plaintext

compilar e executar OK, mas se eu remover a importação paraData.ByteString.Base16 então ele não compila (semelhante aessa questão):

test.hs:6:13:
No instance for (Data.String.IsString B.ByteString)
  arising from the literal `"The message"'

De acordo comWiki do Haskell, uma importação como esta é "útil para importar apenas instâncias de typeclasses e nada mais", mas, tanto quanto eu posso ver, o código fonte base16-bytestring não define nenhuma instância typeclass, apenas oencode edecode funções.

Como a importação fornece a instância necessária deIsString para o código para compilar?

questionAnswers(1)

yourAnswerToTheQuestion