Haben Haskell-Importe Nebenwirkungen?

Ich habe vor einiger Zeit einen Code geschrieben, der verwendetOverloadedStrings erschaffenByteStrings aus hexadezimal codierten String-Literalen, die mit den von bereitgestellten Funktionen decodiert werdenbase16-bytestring. Das hat gut funktioniert, aber anscheinend habe ich es nicht so gut verstanden, wie ich dachte.

Das, was mich völlig verwirrt hat, ist das. Warum tut

{-# LANGUAGE OverloadedStrings #-}

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

plaintext = "The message" :: B.ByteString

main = print plaintext

kompiliere und starte OK, aber wenn ich den Import für entferneData.ByteString.Base16 dann kann es nicht kompiliert werden (ähnlich wiediese Frage):

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

LautHaskell Wiki, ein Import wie dieser ist "nützlich, um nur Instanzen von Typklassen und sonst nichts zu importieren", aber soweit ich sehen kann, definiert der base16-bytestring-Quellcode keine Typklasseninstanzen, nur dieencode unddecode funktionen.

Wie liefert der Import die notwendige Instanz vonIsString für den Code zu kompilieren?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage