它通常似乎以下是非法的:Haskell類定義中的隱式類型參數?
class Foo a where
foo :: a -> b -> a
這是合理的;我們怎麼知道b
是什麼?
但是,如果我們看一下仿函數的定義:
class Functor f where
fmap :: (a -> b) -> f a -> f b
我們看到a
和b
顯示出來,即使我們只指定f
作爲一個類型變量。我猜這是允許的,因爲編譯器看到例如f a
,並且可以發現f
本身必須採用a
,所以在我們的Functor定義中的其他地方使用a
是安全的。我對麼?