使用扩展名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 ...
现在有一个扩展,让我这样做吗?如果不是,什么问题禁止这样的扩展?
Haskell不允许部分应用类型同义词,因为确定类型和部分应用类型同义词之间的相等性相当于确定两个函数是否相等。一般来说,这是不可确定的。
回想一下,类型同义词是类型级别的函数(恰好在其参数中是参数的)。
这就是为什么通常鼓励在类型同义词的定义中尽可能依赖部分应用程序的原因。虽然这在你的情况下似乎是不可能的。