問題タブ [deriving]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
class - Haskellの独自のデータ型でNumクラス関数を導出する方法はありますか?
型宣言があるとしましょう:
Num、Real、Fractional のすべての関数が、N コンストラクターでラップされた引数の N (通常の結果) になり、他の引数の Placeholder が得られるように、可能な限り MyType を Double として処理できるようにしたいと考えています。
次のような方法で、このクラスをこれらのクラスのインスタンスとして単純に定義する以外に、これを行う方法はありますか?
(これは逆効果のようです)?
haskell - 持ち上げる自動 haskell 派生宣言
次のように手動で記述した機能をコンパイラに導出させる方法はありますか。
つまり、あるタイプのクラスClass
がラップされている場合、手間のかかる作業を行わなくても、 forTrans
の無料インスタンスClass
をTrans
自動的に取得することは可能ですか :)?
c++ - クラスが unique_ptr から派生している場合に基本コンストラクターを呼び出す方法
スーパークラスを呼び出して、T 型パラメーターを使用して SearchTree コンストラクターを実装するにはどうすればよいですか?
parsing - この派生を左端または右端と見なすことができますか?
たとえば、指定された一連のプロダクションから文字列「aabbccdd」を派生させたいと思います。
左端と右端の派生を使用して、AB から文字列を派生させることができます。
しかし、Cからはどうですか?文字列を導出すると、常に1つの変数しかありません。
C からの派生:
どのような派生が使用されましたか? この文法はあいまいであると見なすことができますか?
haskell - TH なしで newtype の Unbox を自動的に派生させる
だから私はかなり基本的なnewtypeを持っています:
そして、ボックス化されていないベクトルでこの型を使用したいのですが、最初の検査では、これは導出よりも複雑なようです...たとえばStorable
.... そして、「派生」と言うときは、理想的には による自動派生を望んでいますライブラリGeneralizedNewtypeDeriving
によるデフォルト型の派生を見ると、これがわかります。vector
さらに、Web を検索すると、問題を解決するために使用することを提案しているこの SO 投稿に出くわしました。Template Haskell
私は現在 TH を使用していません。その道を強制されないのは良いことです。
私がここでやろうとしているのは、API でスマート コンストラクターを使用したいので、それ以外の場合はボックス化できないデータ型を元の型と意味的に直交させることだけです。大量のボイラー プレートに頼らずに、このタイプのボックス化を解除する方法はありますか? Template Haskell
newtype
これは、コンパイル時に消去されるだけで、一般的に派生できるもののようです。理想的には、これをやりたいだけです:
現在、上記の方法を使用して自動的に派生しようとすると、次のエラーが発生します。
GeneralizedNewtypeDeriving
の代わりにを使用するとDeriveAnyClass
、型ファミリのロールに関するより長いエラー メッセージが表示されます。これは、歴史的にこの手法を実現する際の問題であったと思います。何か変わった?
haskell - DeriveAnyClass と空のインスタンスの違いは何ですか?
cassavaパッケージを使用すると、次のようにコンパイルされます。
ただし、次の場合はそうではありません。
コンパイラは次のように報告します。
これにより、2 つの疑問が残ります。2 番目のバージョンが最初のバージョンと同じでないのはなぜですか? そして、コンパイラが のインスタンスを見つけようとしているのはなぜToNamedRecord Int
ですか?
haskell - データ構造を含む派生時に型クラス インスタンスが使用されない
newtype
コードでより多くのラッパーを使用して、より明確な型を作成することを検討してきました。また、特に厳密に型指定された構成ファイルの単純な形式として、Read/Show を使用して安価なシリアル化を多数行います。私は今日これに遭遇しました:
この例は次のように始まります。Int をラップする単純な newtype と、アンラップ用の名前付きフィールドを定義します。
単純な Int 構文からこれらのいずれかを読み取るカスタム インスタンス。ここでのアイデアは、"Bar { unBar = 42 }" の代わりに "42" を構成ファイルに入れることができれば素晴らしいことです。
このインスタンスにはトレース「ログ」もあり、問題を観察するときにこのインスタンスが実際にいつ使用されたかを確認できます。
Bar を含む別のタイプになりました。これは Read を自動派生させるだけです。
Bar タイプのみの逆シリアル化は正常に機能し、上記の Read インスタンスを使用します
しかし、何らかの理由で、Bar を含み、Read に自動的に派生する Foo は、ドリルダウンして Bar のインスタンスを取得しません! (トレースからのデバッグ メッセージも表示されないことに注意してください)
では、Bar のデフォルトの Show フォームはどうですか? デフォルトの Read と一致するはずですよね?
いいえ!どちらもうまくいきません!! 繰り返しますが、デバッグ メッセージはありません。
実行出力は次のとおりです。
これは私にはバグがあるように見えますが、私が間違っていることを知りたいです。
上記のコードの完全に機能する例が利用可能です。darcshubsrc/Main.lhs
のテスト プロジェクトでファイルを参照してください