Haben Haskell-Importe Nebenwirkungen?
Ich habe vor einiger Zeit einen Code geschrieben, der verwendetOverloadedStrings
erschaffenByteString
s 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?