2017-03-09 1 views
0

HaskellのPropellorデプロイメントライブラリを使用してプライベートフィールドを指定しようとしています。

コンテキストとして:問題のフィールドは、コンテンツを暗号化し、展開中に送信先サーバー上にプロペラの場所を持つファイルです。しかし、私はそれほど遠くには達していません。フィールドを設定しようとする前に、単にプロペラの現在のプライベートフィールドを表示しようとしている間にエラーに遭遇しました。

私はフィールド、$ ./propellor --list-fieldsを表示するコマンドを実行すると具体的に、それは、私のGPGキーを要求するいくつかのGPGキーの情報を出力し、次の:

Currently set data: 
Field          Context      Used by 
-----          -------      ------- 
propellor: Prelude.read: no parse 

た現在いくつかのフィールドがあるはずです何らかの形でここには表示されず、代わりにpropellor: Prelude.read: no parseというエラーメッセージが表示されます。まだ自分のフィールドを追加しようとしていません。

プロペラが何かを解析しようとする問題を抱えているようですが、そのことが何であるか分かりません。私はこれが進まないことが分かっていますが、何をすべきかは分かりません。誰かがハスケルのプロペラに似たようなエラーに遭遇したか、問題が何であるかを知っていますか?

+0

あなたの設定/設定に関するもう少し情報を表示してください。今、大まかにスケッチされた問題で、ブラックボックスデバッグのようです。 – epsilonhalbe

答えて

0

申し訳ありませんが、この質問は非常に曖昧でしたが、エラーメッセージからはほとんど進行しませんでした。問題は解決されました。ここでは、同様のエラーに直面している間に誰かに役立つ場合に役立つ説明があります。

コードには、モジュールではなくReadクラスを介して読み込まれるテキストファイルで定義された構成データ型のインスタンスが含まれていました。要するに、タイプ変更に対応するためにテキスト定義の構成インスタンスを包括的に更新せずにデータタイプを変更したという問題でした。

説明の長い形式のバージョンでは、行の競合がないために競合として認識されなかったテキスト構成への変更に対してデータ型の変更をマージすることを含む、問題は巧妙です。

しかし、基本的に、エラーはテキスト形式で定義されたデータ型インスタンスでは読み込みに失敗していました。

私はモジュールから構成データインスタンスを定義する計画を持っています。これはテキストから読み込むのではなく、コンパイラによって捕捉され、同様のエラーが発生した場合にはより意味のあるエラーメッセージが表示されます。

1

あなたの自己解答は正しいです。ここでは、別の観点から問題を見ていきます。

エラーは、read function in Preludeを指しています。 read部分関数の例である:その型...

read :: Read a => String -> a 

...それはReadインスタンスに任意のタイプaの値にString Sを変換することができることを述べています。しかし、これはすべてのStringで機能しないことが判明しました。解析が失敗する可能性があるためです。もっと劇的に言えば、readのタイプは嘘です。

一般に、部分的な機能を回避することは良いアイデアです。あなたのビジネスロジックのいくつかの前提条件、そして前提条件の変更のために構文解析が失敗することはないと思われます)、また、(あなたが気づいたように)非常に情報のないエラーメッセージを出す傾向があるからです。たとえば、readの場合、より良い方法はreadMaybeであり、解析が失敗した場合はNothingを返します。それは失敗に反応する機会を与えます。別の状況では、たとえば、ユーザーに再試行を依頼したり、デフォルト値を指定したり、他の手段がない場合は、エラーメッセージを表示してプログラムを終了させて​​、何が間違っているかを説明しますやろうとしている。

関連する問題