2017-11-04 6 views
1

これは問題ではありませんが、私はより良い方法となる意見が必要です。だから私は、外部ソース(TCP)からデータを読み込む必要があり、それがこの形式で基本的に来る:カスタム読み取りメソッドまたはカスタム読み取りインスタンスでのタイプの厳密なマップ

key: value 
okey: enum 
stuff: 0.12240 
amazin: 1020 

そして私はHaskellのアクセス可能な形式にそれを解析する必要があるので、私は考えた2つのソリューション、のいずれかでしたそれを厳密な文字列から文字列へマップしたり、構文の型宣言を記録することができます。

は当初、私は私のString =>文字列マップの型シノニムを作成し、amazin :: NiceSynonym -> Intのような抽出機能を作成し、必要な治療を行うことを考えて、メソッド内で解析し、それは一度に大ざっぱ、のように感じましたか?それから、カスタムのReadインスタンスを使って、レコード構文で実際の型宣言を考えました。それは悪夢だった。なぜなら、さまざまな種類の列挙型とキーがあり、それは...失望していたからだ。単に引数をラップして、元のものと大きく異なるわけではない読者関数を作成します:amazin :: TypeDeclaration -> Int

私は最初に想像していたように、読者の機能を持たないことは残念です。それで、私は考慮すべきことを忘れています。どちらの側の賛否両論にも注意を払う必要がありますか? 1つは客観的に他のより良いですか?

PS:1またはその他のより良いを行うことができるいくつかの注意事項:

  • はかつて私は全く全くそれを変更する必要はありません読んで、それは、基本的に比較する必要はありませステータスレポート
  • ません本当にもう一度だけで状況報告なしポイント
  • ないなど、パフォーマンスの必要性を追加し、私は数百に二か何か

TLを読んだことが習慣; DRを:入力例は、ワット最高のものだということを考えるとハスケルで読める形式にするには?マップ、データコンストラクタ、依存マップ...

+0

この質問は少し曖昧です(そのようなマップにどのような種類の機能を持たせたいのかはっきりしていません)。キーから値の型がキーに依存できる値(つまり、[依存マップ](https://hackage.haskell.org/package/dependent-map-0.2.4.0/docs))へのマップが必要なようです/Data-Dependent-Map.html));実行時にエラーが発生しないようにプログラムを保証する必要が本当に必要な場合を除いて、これはおそらく過剰です。 'Map String Value'について' data Value = ValA A | ValB B | ValC C | ..? – user2407038

答えて

0

どちらの方法も独自の点で有効ですが、このようなプロトコルとやりとりするAPIも作成していたので、レコード構文を優先してすべてのプロパティもっと簡単に。また、ゲッター関数で実際にチェックや処理を行うつもりはなく、自分のタイプのリーダーインスタンスがいかに退屈であったとしても、すべてのget関数を手動で行うのは悪いです。手作業での解析は、本質的に退屈です。私は、私のためにすべての仕事をするために、魔法のファンクションライナーを探していたと思います。

関連する問題