4
Applicative Programming with Effects,從麥克布萊德和佩特森的紙張,提起sequence
功能:用`實施sequence`的`ap`
sequence :: [IO a ] -> IO [a ]
sequence [] = return []
sequence (c : cs) = return (:) `ap` c `ap` sequence cs
其中ap
的類型是:
ap :: Monad m => m (a -> b) -> m a -> m b
我試圖瞭解最後一行右側的類型。
return (:) 'ap' c 'ap' sequence cs
這些類型如何統一(我認爲這是正確的措辭)?
我不清楚return (:)
如何匹配ap
的第一個參數m (a -> b)
。
ghci> :t return (:)
return (:) :: Monad m => m (a -> [a] -> [a])