2016-03-17 17 views

回答

10

您的類型同義詞,你還沒有處理一個免費類型的變量。要採取極端的例子,如果我們刪除您a參數,我們不得不像

type SafeReturn = [e] -- Using a * -> * type instead of a * -> * -> * type 

這可能不是你想要的,因爲我們不知道確切地知道e指的是在這裏,這是你的SafeReturn面臨的同樣的問題; e是什麼意思?

現在有一個背景,其中e可能意味着一些東西,這就是錯誤消息告訴你。

type SafeReturn a = forall e. Exception e => Either e a 

這意味着不同的東西。事實上,你在這裏創建了一個普遍量化的類型。這意味着,SafeReturn a類型的東西有沒有檢查eException可供任何方法等的方法。

+2

其實,這是*不*存在主義的類型;這是一種普遍量化的類型,可能會出現在更高等級的位置。其餘是正確的。 Haskell中的存在類型只能由'data'(或'data instance')聲明創建; 'type'和'newtype'都不夠。 – dfeuer

+0

@dfeuer Argh你完全正確。我會編輯它。 – badcook

+0

其實,我有點錯了,但我想我完全正確的,現在....如果你嘗試寫一個函數,一個'SafeReturn了'作爲參數 – dfeuer