2014-03-26 79 views
4

使用擴展TypeSynonymInstances就可以寫這樣的一個實例:是否存在用於部分類型同義詞實例的Haskell(GHC)擴展?

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 ... 

現在是否有擴展可以讓我這樣做?如果不是,什麼問題禁止這樣的擴展?

+3

http://stackoverflow.com/q/4922560/925978 – crockeea

回答

8

Haskell不允許部分應用類型同義詞,因爲決定類型和部分應用類型同義詞之間的等同性等同於判定兩個函數是否相等。一般來說這是不可判定的。

回想一下,類型同義詞是類型級別的函數(碰巧參數在他們的參數中)。

這就是爲什麼通常鼓勵在類型同義詞的定義中儘可能依賴部分應用程序。雖然這在你的情況下似乎不可行。

相關問題