首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell Monads实现

Haskell Monads实现
EN

Stack Overflow用户
提问于 2016-08-13 21:29:04
回答 1查看 121关注 0票数 1

最近,我在阅读“学习你的哈斯克尔”时,偶然发现了这样一句话:

代码语言:javascript
复制
[1,2] >>= \n -> ['a', 'b'] >>= \ch -> return (n, ch)

此表达式返回结果

代码语言:javascript
复制
[(1,'a'),(1,'b'),(2,'a'),(2,'b')]

因此,我理解列表的一元绑定是如下实现的

代码语言:javascript
复制
xs >>= f = concatMap f xs

取表达式的前半部分,即:

代码语言:javascript
复制
[1,2] >>= \n -> ['a', 'b']

根据我的理解,它的计算结果是['a','b','a','b'],然后将其传递给函数:(\ch -> return (n , ch))

我不明白的是,列表中的值1,2是如何赋值给n的,然后编译器如何保存它的记录,然后在最后一个函数中将其赋值给n?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-13 21:34:03

前半部分不是你想的那样,括号是这样的:

代码语言:javascript
复制
[1,2] >>= ( \n -> ['a', 'b'] >>= ( \ch -> return (n, ch) ) )
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38933216

复制
相关文章

相似问题

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