2016-03-17 19 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