使用扩展名TypeSynonymInstances
可以编写类似的实例:
instances MyClass String where ...
使用newtype
可以声明这样的实例:
newtype Kleisli m a b = Kleisli (a -> m b)
instance MyClass (Kleisli m) where ...
我现在无法执行以下操作:
type Kleisli m a b = a -> m b
instance MyClass (Kleisli m) where ...
现在有一个允许我这样做的扩展吗?如果没有,有什么问题禁止这样的延期?
答案 0 :(得分:8)
Haskell不允许部分应用类型同义词,因为决定类型和部分应用类型同义词之间的相等等同于决定两个函数是否相等。这一般是不可判定的。
回想一下,类型同义词是类型级函数(碰巧在参数中是参数化的)。
这就是为什么通常鼓励在类型同义词的定义中尽可能多地依赖部分应用程序。虽然在你的情况下这似乎不可行。