3

コードのさまざまなポイントで一連のGetモナドを実行しています。それらは によって返されるrunGetState遅延で実行されます。一連の非常に短い関数を呼び出す関数があり、それぞれが少しの読み取りを行います。ByteStringreadFilemain

mainGHCI で実行すると、次のようになります。

<interactive>: too few bytes. Failed reading at byte position 1

それが提供するすべての情報です。2 つの質問があります。

  1. このエラーからさらにデバッグ情報を取得する方法はありますか? どの特定の呼び出しがrunGetState失敗したかを特定できますか? 行番号は非常に役立ちます。私が得ることができる他のデバッグ情報はありますか?

  2. バイト位置 1 で失敗した理由について何か考えはありますか? それはゼロベースですか?つまり、バイト 0 の読み取りに成功しましたが、1 で失敗しましたか、それとも最初のバイトで失敗しましたか? それだけの価値はありますが、私ができるprint theLazyByteStringことは print33026です。これは私が期待していたものです。そのため、ファイルは空ではなく、読み取り用に正常に開かれたように見えます。私の推測では、「バイト位置 1」は実際にはファイル自体の初期のポイントを参照するのではなく、runGetState後で呼び出しの開始点を参照します。

4

1 に答える 1