問題タブ [derivingvia]
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.
haskell - Haskell:重複するインスタンス
次のサンプルプログラムについて考えてみます。
MaybeTモジュールで定義されているため、get
代わりにのみ使用できます。lift get
instance MonadState s m => MonadState s (MaybeT m)
そのようなインスタンスの多くは、一種の組み合わせ爆発の方法で定義されます。
次の型クラスがあれば、それは良かったでしょう(不可能ではありますか?なぜですか?)。
それをそのように定義してみましょう:
作品lifts $ print i
の代わりに使うのはいいですね。liftIO $ print i
しかし、lifts (get :: StateT Int IO Int)
代わりに使用しても(get :: MaybeT (StateT Int IO) Int)
機能しません。
GHC(6.10.3)では、次のエラーが発生します。
instance SuperMonad a a
「 」が当てはまる理由がわかります。しかし、なぜGHCは、もう一方もそうだと考えているのでしょうか。
haskell - GeneralizedNewtypeDeriving を介してインスタンスを派生させるときにカスタム インスタンスを使用する
typeclass があるとしますclass (A a, B a) => C a where
。を使用すると、データ型を複製し、言語拡張機能newtype
を介してインスタンスを自動的に派生させることができます(派生可能なクラスを作成する方法と、同じ内部表現と最小限の定型文で複数の型を処理する方法を参照してください)。GeneralizedNewtypeDeriving
質問: ghc にA
andを自動的に派生させることは可能ですが、派生C
に独自の指定された実装を使用することはできますか?B
C
たとえば、次のコード ( A
= Planet
、B
= Lives
、C
= Description
) は期待どおりに動作しません。
私が期待/望んでいたのは、 のDolphin
インスタンスがLives
の派生で呼び出されることでしDescription
た。
明らかに、次のプログラムは機能しますが、明示的にインスタンス化する必要がありDescription
ますDolphin
。
ps不可解なのは、(最初のプログラムで) if を宣言していないことです:
次にghcは文句を言います:
forの(自動)派生でそれを使用していないinstance Lives Dolphin where
場合、 ghc が の不在について文句を言うのは奇妙に思えます。Description
Dolphin
haskell - この式に有効な型があるのはなぜですか?
をいじってみるとghci
、たまたま式(*) 1 [1..5]
が有効な型を持っていることに気付きました。
Num [t]
どうやらそれは、エラーが発生するように、私には不可能に見えるものを含む、いくつかの型制約を持つリストです。
これはどのように式のタイプですか?ghci
ここでの:t
コマンドがエラーを出さないのはなぜですか?
haskell - ファントム型での派生ビアの使用
再現が長くなって申し訳ありませんが、これ以上短くすることはできませんでした。次のコードは、最後の行まで正常にコンパイルされます。
その後、次のエラーが表示されます。
- タイプ の表現を の表現と一致させることができませんでし
Vector2D a
たVia (Phantom2 d a) (Phantom1 d a)
これは、"Via &c" を "Vector2D a" に強制できないと言っているようです。これは、文字通り 2 レベルの深さの newtype であり、正常に動作するため、奇妙です。
ここで何が間違っていますか?