行き詰まったとき、私はちょうどhaskellを楽しみ始めていました。
クラスの新しいデータ型(これを呼びましょうMyType
)を作成しようとしていますRead
。Mytype
は型コンストラクターであるため、パラメーターとして別の型を取ります。このようなコードを書きたかった
instance (Read a) => Read (MyType a) where
readsPrec _ r = [foo (read r :: a ), r]
しかし、それは私に次のエラーを与えます
Could not deduce (Read a2) arising from a use of `read' from the context (Read a).
aReadable
なので推測できると思ったのですが、どうやら間違っているようです。何か案は?
編集: 私は前のコードをに変更しました
readsPrec _ r = [foo (read r :: a ), ""]
だから私がタイプすると:read "myString" :: MyType a
それは完全にうまくいきます。read "myString"
今、私は、コンテキスト内で使用する場合、読み取るタイプを指定する必要がないことを望んでいました。しかし、問題は
bar (read myString) a
ここで、 Ambiguos変数型bar:: MyType a -> a -> MyType a
を取得し
ました。
そのようなエラーを起こさずにそのようなことをすることは可能ですか?
コードを単純化しようとしていますが、重要なことを何も省略しなかったと思います。