2012-11-25 112 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類型的上下文使用的結果。