gpt4 book ai didi

haskell - `sequence` 与 `ap` 的实现

转载 作者:行者123 更新时间:2023-12-04 23:49:04 25 4
gpt4 key购买 nike

Applicative Programming with Effects ,来自 McBride 和 Paterson 的论文提到了 sequence功能:

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])

最佳答案

答案是…… curry !ap 的第一个参数有类型 m (a -> b) ,所以函数期望a 类型的值并将产生类型为 b 的值.一件可能的事
那个b可能是另一个函数(即 b 可以与 [a] -> [a] 统一)。所以,我们把事情排好,得到

ap         :: Monad m => m (a -> b         ) -> m a -> m b
==========
return (:) :: Monad m => m (a -> [a] -> [a])
ap function 执行将某个上下文中的函数(在本例中为 monad)应用于该上下文中的值,碰巧它经常用于执行一系列部分应用程序。

关于haskell - `sequence` 与 `ap` 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27262593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com