我认为我的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 :(得分: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
的上下文中使用结果。