繼this的答案,我已經實現了一個通用的升降功能在我的程序:瞭解Monad'>> ='函數中的所有內容嗎?
liftTupe :: (x -> c x) -> (a, b) -> (c a, c b) --This will error
liftTuple :: (forall x. x -> c x) -> (a, b) -> (c a, c b)
我明白了,在這種情況下,forall
正在使x
是任何類型的([]
,Maybe
等。) 。
我現在正在研究中的單子的>>=
定義:
class Applicative m => Monad m where
(>>=) :: forall a b. m a -> (a -> m b) -> m b
我無法理解這樣的forall
在函數定義中的作用是什麼?與liftTuple
不同,它不是綁定到特定功能(x -> c x
)?
不知道爲什麼所有的答案都這麼羅嗦。一句話:你是對的;它沒有改變任何東西,只是在那裏明確。 – Ryan
'forall a b。 <..>'在類型'>> ='* *'中*綁定到特定函數 - 函數m a - >(a - > m b) - > m b'。你也可以有一個沒有函數的'forall',例如'[] :: forall a。 [a]','empty :: forall f a。備選f => f a'。 – user2407038
@Ryan當我得到答案時:「因爲一切都是隱含合格的。」我的後續問題通常是「爲什麼?」。 – ThreeFx