У импорта Haskell есть побочные эффекты?

Я написал код некоторое время назад, который используетOverloadedStrings создаватьByteStrings из шестнадцатеричных строковых литералов, которые он декодирует с использованием функций, предоставляемыхbase16-bytestring, Это работало нормально, но, кажется, я не понял это так хорошо, как думал.

То, что меня полностью запутало, так это. Почему

{-# LANGUAGE OverloadedStrings #-}

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

plaintext = "The message" :: B.ByteString

main = print plaintext

скомпилируйте и запустите OK, но если я удалю импорт дляData.ByteString.Base16 затем он не скомпилируется (аналогичноэтот вопрос):

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

СогласноHaskell Wikiимпорт, подобный этому, «полезен только для импорта экземпляров классов типов и ничего больше», но, насколько я вижу, исходный код base16-bytestring не определяет никаких экземпляров классов типов, толькоencode а такжеdecode функции.

Как импорт обеспечивает необходимый экземплярIsString для кода для компиляции?

Ответы на вопрос(1)

Ваш ответ на вопрос