OverloadedStrings
kullanarak ByteString
10 kodlu bir kod yazmıştım. Bu kod, base16-bytestring
tarafından sağlanan işlevleri kullanarak kodladığı hex kodlu Dize değişmezlerinden oluşturuyor. Bu iyi çalıştı, ama düşündüğüm kadar iyi anlamadım.Haskell ithalatının yan etkileri var mı?
Tamamen kafamı karıştıran şey bu. Neden
{-# LANGUAGE OverloadedStrings #-}
import Data.ByteString.Base16()
import qualified Data.ByteString as B
plaintext = "The message" :: B.ByteString
main = print plaintext
derleme yapar ve Tamam çalıştırmak ama Data.ByteString.Base16
için ithalat kaldırırsanız o zaman (benzer this question kadar) derlenmeyecektir:
test.hs:6:13:
No instance for (Data.String.IsString B.ByteString)
arising from the literal `"The message"'
Haskell Wiki göre, böyle bir ithalat olduğunu "yalnızca tiplerin ve yalnızca başka bir şeylerin içe aktarılması için kullanışlıdır", ancak görebildiğim kadarıyla, base16-bytestring kaynak kodu, sadece encode
ve decode
fonksiyonlarını herhangi bir yazım hatası örneği tanımlamaz.
İthalat, kodun derlenmesi için gerekli olan IsString
örneğini nasıl sağlıyor?