実行時にデータを構築する可能性はありますか?私は "読み取り"機能のようなものだが、[(フィールド名、値)]に当てはまるものを意味する。だから私はこのようにそれを使用することができます実行時に関数またはデータを呼び出す
genericConstructor :: (DataConstructable a) => String -> [(String, a)] -> a
::私はのような機能を持つようにしたいのは、私が
data Street = Street String
data City = City String
data ZipCode = ZipCode String
data Address = Address {
street :: Street,
city :: City,
zipCode :: ZipCode
}
を持っているとしましょう
genericConstructor "Address" [("street", Street "Baker"),
("city", City "London"),
("zipCode", ZipCode "12345")] :: Address
私は任意の定型的なコードをしたくありません、 Reflection API for Javaに似たものを探しています。 現在、Data.DataおよびData.Typeableモジュールを見ていますが、どのように達成できるかわかりません。
これの目的は、いくつかのデータ形式とhaskellデータ構造の間のバインディングを作成することです。
なぜこれは別注タイプである必要がありますか?文字列を別の文字列にマップできるハッシュテーブルやData.Mapのようなものを使用しないのはなぜですか? –
私はMapも使うと思っていましたが、私には、別の種類のデータを持つことができるときに、すべてのデータをStringとして保持することは非常に不満です。 Haskellのレコードシステムは、レンズモジュールを使用する場合には、作業するのがはるかに良いですが。 –