¿Las importaciones de Haskell tienen efectos secundarios?
Escribí un código hace un tiempo que usaOverloadedStrings
crearByteString
s 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?