1

我认为我对 Haskell 类型推断有疑问。

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

readPresc以解析字符串并返回我的新数据的方式重新定义。当我写:

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

它工作得很好(至少它符合我的预期)

现在我有一个函数,我们称之为insert,它接受一个 , 类型的元素aMyType a并返回一个 new MyTape a

insert :: a -> MyType a -> a

但是当我写:

insert 3 "string that rapresent MyType Int" 

我得到了Ambigous type

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

4

1 回答 1

5

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

您不需要,这是从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 回答