Haskell类型推断与Read

时间:2012-11-25 21:25:26

标签: haskell type-inference

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

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

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

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

它完美无缺(至少它符合我的预期)

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

insert :: a -> MyType a -> a

但是当我写道:

insert 3 "string that rapresent MyType Int" 

我得到了Ambigous type

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

1 个答案:

答案 0 :(得分: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的上下文中使用结果。