Haskell类型推断与Read

use*_*128 1 haskell type-inference

我认为我的Haskell类型推断存在问题.

我创建了自己的数据类型并使其成为类的实例Read.我的数据类型实际上是将另一种类型作为参数,它是一个类型参数.

readPresc以一种解析字符串并返回我的新数据的方式重新定义.我写的时候:

read "string that represent MyType a" :: MyType a
Run Code Online (Sandbox Code Playgroud)

它工作得很好(至少它做了我的预期)

现在我有一个功能,我们称之为insert,这需要类型的元素a,MyType a以及还给一个新的MyTape a.

insert :: a -> MyType a -> a
Run Code Online (Sandbox Code Playgroud)

但是当我写道:

insert 3 "string that rapresent MyType Int" 
Run Code Online (Sandbox Code Playgroud)

我有Ambigous type.

我如何告诉haskell推断出read与插入参数相同的类型?

Dan*_*her 5

我如何告诉haskell推断出read与插入参数相同的类型?

你不需要,这是从类型推断出来的insert.

问题在于

insert 3 (read "string that rapresent MyType Int" )
Run Code Online (Sandbox Code Playgroud)

(我read为它插入了可能的类型正确),文字3是多态的.它的类型是

3 :: Num a => a
Run Code Online (Sandbox Code Playgroud)

所以仍然没有足够的信息来确定read应该产生什么类型,因此错误.

例如,您需要提供必要的信息

insert (3 :: Int) (read "string that rapresent MyType Int" )
Run Code Online (Sandbox Code Playgroud)

或者在确定类型变量的上下文中使用结果a.