首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell‘`forever`’型签名

Haskell‘`forever`’型签名
EN

Stack Overflow用户
提问于 2015-05-11 14:25:17
回答 1查看 413关注 0票数 13

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

代码语言:javascript
复制
forever :: Monad m => m a -> m b

具体来说,为什么不只是:: Monad m => m a -> m a?当然,我们所采取行动的单一模式不会在forever中途改变。

职能,如:

代码语言:javascript
复制
 forever' :: Monad m => m a -> m a
 forever' = forever

似乎是完全一样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-11 14:40:32

构建forever的类型签名是为了表明其结果将永远运行。具体来说,没有办法编写一个类型为m b (其返回值中的多态)的操作,该操作终止并产生一个非底部值。提出同样观点的另一种方法是forever' :: m a -> m Void

另一个答案就是说这是定义的函数可用的最一般的类型,这就是给出的类型。

代码语言:javascript
复制
Prelude> let forever m = let x = m >> x in x
Prelude> :t forever
forever :: Monad m => m a -> m b

现在,它可能应该有不同的定义:

代码语言:javascript
复制
forever :: Applicative f => f a -> f b
forever a = let x = a *> x in x
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30170279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档