2012-11-25 29 views
1

我想我有一个Haskell类型推断的问题。Haskell类型推断与阅读

我做了我自己的数据类型,并将其作为类Read的实例。我的数据类型实际上是以其他类型作为参数,它是一个类型参数。

我重新定义了readPresc,它解析字符串并返回我的新数据。当我写:

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

它工作完全正常(至少它做什么,我预期)

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

insert :: a -> MyType a -> a 

但是当我写:

insert 3 "string that rapresent MyType Int" 

Ambigous type

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

+0

你的意思是'插入3(读取“字符串表示”)? – icktoofay

+1

另外,你能澄清一点吗? 'read“bla blah blah”:: MyType'建议'MyType'是一个类型,但是'insert :: a - > MyType a - > a'暗示'MyType'是一个类型构造函数。 – AndrewC

回答

5

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

你不需要,这是从insert的类型推断。

的问题是,在

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

(I插入read为它是可能键入正确的),字面3是多态的。它的类型是

3 :: Num a => a 

,这样仍然没有足够的信息来决定应该生产什么类型read,因此错误。

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

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

或通过在该判定变量a类型的上下文使用的结果。