¿Las importaciones de Haskell tienen efectos secundarios?

Escribí un código hace un tiempo que usaOverloadedStrings crearByteStrings de literales String codificados en hexadecimal, que decodifica utilizando las funciones proporcionadas porbase16-bytestring. Esto funcionó bien, pero parece que no lo entendí tan bien como pensaba.

Lo que me tiene completamente confundido es esto. Por que

{-# LANGUAGE OverloadedStrings #-}

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

plaintext = "The message" :: B.ByteString

main = print plaintext

compilar y ejecutar OK, pero si elimino la importación paraData.ByteString.Base16 entonces no se compila (similar aesta pregunta):

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

De acuerdo con laHaskell Wiki, una importación como esta es "útil solo para importar instancias de typeclasses y nada más", pero por lo que puedo ver, el código fuente de base de bytestring de base16 no define ninguna instancia de typeclass, solo elencode ydecode funciones

¿Cómo proporciona la importación la instancia necesaria deIsString para el código a compilar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta