1

Haskell型推論に問題があると思います。

独自のデータ型を作成し、それをクラスのインスタンスにしましたRead。私のデータ型は実際にはパラメータとして他の型を取ります、それは型パラメータです。

readPresc文字列を解析して新しいデータを返すように再定義しました。私が書くとき:

read "string that represent MyType a" :: MyType a

それは完全にうまく機能します(少なくとも私が期待したことをします)

これで、関数、と呼びましょう。この関数は、型のinsert要素を受け取り、新しいを返します。aMyType aMyTape a

insert :: a -> MyType a -> a

しかし、私が書くとき:

insert 3 "string that rapresent MyType Int" 

私は得Ambigous typeた。

readインサートのパラメーターと同じタイプを推測するようにhaskellに指示するにはどうすればよいですか?

4

1 に答える 1

5

readインサートのパラメーターと同じタイプを推測するようにhaskellに指示するにはどうすればよいですか?

のタイプから推測される必要はありませんinsert

問題は

insert 3 (read "string that rapresent MyType Int" )

(おそらくタイプが正しいようにを挿入しreadました)、リテラル3は多形です。そのタイプは

3 :: Num a => a

そのため、どのタイプを生成するかを決定するための十分な情報がまだないreadため、エラーが発生します。

たとえば、必要な情報を提供する必要があります

insert (3 :: Int) (read "string that rapresent MyType Int" )

または、型変数を決定するコンテキストで結果を使用しますa

于 2012-11-25T21:34:43.580 に答える