gpt4 book ai didi

Haskell `forever` 类型签名

转载 作者:行者123 更新时间:2023-12-03 23:42:43 36 4
gpt4 key购买 nike

在 Haskell 中,为什么 forever 的类型签名是

forever :: Monad m => m a -> m b

具体为什么不只是 :: Monad m => m a -> m a ?
当然,我们所作用的 monad 的类型在 forever 中途不会改变。 ?

一个函数,例如:
 forever' :: Monad m => m a -> m a
forever' = forever

似乎工作完全相同。

最佳答案

forever 的类型签名精心设计以表明其结果永远运行。具体来说,无法编写 m b 类型的操作。 (其返回值是多态的)终止并产生一个非底部值。提出相同建议的另一种方法是 forever' :: m a -> m Void .

另一个答案就是说这是函数定义的最通用的类​​型,所以这就是它被赋予的类型。

Prelude> let forever m = let x = m >> x in x
Prelude> :t forever
forever :: Monad m => m a -> m b

如今,它可能应该有不同的定义:
forever :: Applicative f => f a -> f b
forever a = let x = a *> x in x

关于Haskell `forever` 类型签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30170279/

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