Questions tagged «monads»

编程中的monad是可组合的计算描述。Monad是功能编程语言(例如Haskell)中的重要构造。




8
在Haskell进行大规模设计?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 3年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 设计/构造大型功能程序的好方法是什么,尤其是在Haskell中? 我已经看过很多教程(我最喜欢编写自己的方案,紧随其后的是Real World Haskell)-但是大多数程序相对较小,而且用途单一。另外,我认为其中一些并不特别优雅(例如WYAS中庞大的查找表)。 我现在想编写更大的程序,并且要有更多的活动部分-从各种不同的来源获取数据,对其进行清理,以各种方式对其进行处理,在用户界面中显示它,对其进行持久化,通过网络进行通信等。一种最佳的结构,使代码清晰,可维护并适应不断变化的需求? 有大量的文献针对大型面向对象的命令式程序解决了这些问题。诸如MVC,设计模式之类的想法是实现OO风格的广泛目标(如关注点分离和可重用性)的合适处方。此外,较新的命令式语言使其具有“随您成长而设计”的重构风格,在我新手看来,Haskell似乎不太适合这种风格。 Haskell是否有等效的文献?如何最好地在功能编程(单子,箭头,应用程序等)中使用奇异控制结构的动物园?您可以推荐哪些最佳做法? 谢谢! 编辑(这是唐·斯图尔特的回答的后续内容): @dons提到:“ Monads以类型捕获关键的架构设计。” 我想我的问题是:如何用一种纯粹的功能语言思考关键的建筑设计? 考虑几个数据流和几个处理步骤的示例。我可以将数据流的模块化解析器编写为一组数据结构,并且可以将每个处理步骤实现为一个纯函数。一条数据所需的处理步骤将取决于其价值和其他价值。在某些步骤之后,应该有副作用,例如GUI更新或数据库查询。 以一种很好的方式绑定数据和解析步骤的“正确”方法是什么?可以编写一个大型函数,对各种数据类型执行正确的操作。或者,可以使用monad跟踪到目前为止已处理的内容,并让每个处理步骤从monad状态中获取下一步所需的内容。或者可以编写很大程度上独立的程序并发送消息(我不太喜欢此选项)。 他链接的幻灯片上有一个“我们需要的东西”项目符号:“将设计映射到类型/函数/类/单子的惯用法”。有哪些成语?:)

1
Scalaz迭代:“提升” EnumeratorT以匹配“ IterateeT”以获得“更大”的单子
如果有EnumeratorT和,IterateeT我可以一起运行它们: val en: EnumeratorT[String, Task] = EnumeratorT.enumList(List("a", "b", "c")) val it: IterateeT[String, Task, Int] = IterateeT.length (it &= en).run : Task[Int] 如果枚举数monad比iteratee monad“更大”,我可以使用up或更广泛地说,Hoist“提升” iterae以匹配: val en: EnumeratorT[String, Task] = ... val it: IterateeT[String, Id, Int] = ... val liftedIt = IterateeT.IterateeTMonadTrans[String].hoist( implicitly[Task |>=| Id]).apply(it) (liftedIt &= en).run: Task[Int] 但是,当iteratee monad比枚举器monad“更大”时,我该怎么办? …

6
什么是免费的单子?
我见过的长期免费单子弹出每一个 现在 和 随后一段时间,但每个人似乎只是使用/讨论这些问题没有给予它们是什么解释。那么:什么是免费的monad?(我想说我对monad和Haskell基本知识很熟悉,但是对类别理论只有很粗略的了解。)

7
为什么我们需要单子?
以我的拙见,对著名问题“什么是单子”的答案。,尤其是投票最多的人,试图解释什么是单子,而没有清楚地说明为什么单子是真正必要的。可以将它们解释为解决问题的方法吗?
366 haskell  monads 

5
不是函子/函数/应用/单子的好例子?
在向某人解释什么是类型类X时,我努力地找到了恰好是X的数据结构的良好示例。 因此,我要求提供以下示例: 不是Functor的类型构造函数。 类型构造函数,是Functor,但不是Applicative。 类型构造器,它是一个Applicative,但不是Monad。 类型构造器,它是Monad。 我认为到处都有很多Monad的例子,但是与以前的例子有一些联系的Monad很好的例子可以使情况更完整。 我正在寻找彼此相似的示例,仅在对于属于特定类型类的重要方面有所不同。 如果能够在这个层次结构中的某个地方(在Applicative和Monad之间找到一个)Arrow的示例,那也很棒!

6
在C#中,什么是单子?
这些天有很多关于单子的讨论。我已经阅读了几篇文章/博客文章,但是对于他们的例子我无法走得太远,无法完全理解这个概念。原因是monad是一种功能语言概念,因此示例使用的是我未曾使用过的语言(因为我没有深入使用功能语言)。我不能足够深入地理解语法以完全阅读本文……但是我可以告诉您那里有一些值得理解的地方。 但是,我非常了解C#,包括lambda表达式和其他功能。我知道C#仅具有部分功能,因此也许monads无法用C#表示。 但是,肯定可以传达这个概念吗?至少我希望如此。也许您可以提出一个C#示例作为基础,然后描述C#开发人员希望他从那里做些什么,但是不能做,因为该语言缺少功能性的编程功能。这将是很棒的,因为它将传达单子的意图和好处。所以这是我的问题:对C#3开发人员来说,可以给monad最好的解释是什么? 谢谢! (编辑:顺便说一句,我知道SO上至少已经有3个“什么是单子”问题。但是,我也面临着同样的问题...所以这个问题是imo所需要的,因为C#开发人员重点。谢谢。)
189 c#  c#-3.0  lambda  monads 


3
读者monad的目的是什么?
读者monad是如此复杂,似乎毫无用处。如果我没有记错的话,在命令式语言(如Java或C ++)中,读者monad没有等效的概念。 您能给我一个简单的例子,并澄清一下吗?

16
模式避免嵌套尝试捕获块?
考虑一种情况,我有三种(或更多种)执行计算的方法,每种方法都会因异常而失败。为了尝试每次计算直到找到成功的计算,我一直在进行以下操作: double val; try { val = calc1(); } catch (Calc1Exception e1) { try { val = calc2(); } catch (Calc2Exception e2) { try { val = calc3(); } catch (Calc3Exception e3) { throw new NoCalcsWorkedException(); } } } 是否有任何可接受的模式可以更好地实现这一目标?当然,我可以将每个计算包装在一个辅助方法中,该方法在失败时返回null,然后只使用??运算符,但是有一种更通用的方法(即,不必为我要使用的每个方法编写辅助方法) )?我曾考虑过使用泛型编写静态方法,该方法将任何给定的方法包装在try / catch中,并在失败时返回null,但是我不确定如何处理。有任何想法吗?


5
功能设计模式
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 4年前关闭。 改善这个问题 有很多功能性习语:m​​onad,applicatives,arguments等。它们在不同的文章中都有记录,但不幸的是,我不知道任何本书或文章在一个地方对其进行了总结(有Typeclassopedia,但它有很多覆盖率不高的区域)。任何人都可以推荐一篇文章/书,该书/书在一个地方就可以很好地覆盖它们,并且对FP具有中级技能的程序员可以访问吗?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.