少し前に、16進エンコードされた文字列リテラルからsOverloadedStringsを作成するために使用するコードをいくつか作成しました。これは、によって提供される関数を使用してデコードします。これは問題なく動作しましたが、思ったほど理解できなかったようです。ByteStringbase16-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バイト文字列のソースコードは型クラスインスタンスを定義せず、encodeとdecode関数のみを定義します。 。
IsStringインポートは、コードをコンパイルするために必要なインスタンスをどのように提供しますか?