我一直在逐步学习Haskell,甚至觉得我已经掌握了monads的诀窍。然而,仍然有许多更奇特的东西我几乎不懂,像箭头,应用程序等。虽然我正在从我见过的Haskell代码中挑选一些零碎的东西,但如果能找到一个真正完整地解释它们的教程,那将是一件好事。(似乎有许多关于monad的教程..但一切似乎都会在那之后直接结束!)
发布于 2010-07-15 00:30:59
以下是我在“掌握”monads的诀窍后发现的一些有用的资源:
最重要的是,深入研究您发现自己正在使用的任何Hackage库的代码。如果他们在做一些你不理解的语法、习惯用法或扩展,可以查一下。
发布于 2010-07-15 05:30:16
关于类型类:
Applicative
实际上比Monad
更简单。我最近在其他地方提到了a few things about it,但要点是它是关于增强的Functor
,您可以在其中提升函数。要了解Applicative
,您可以尝试使用编写代码,而不使用do
表示法--我的经验是,应用程序风格比一元式更有效,因为简单的sort是一种非常抽象的方式,可以处理类似于函数的东西(类型之间的“箭头”)。它们可能很难让你明白,直到你偶然发现了一些本质上是Arrow
-like的东西。在编写带有反馈循环的交互式状态机时,我一度重塑了Control.Arrow
的一半(差劲)。Monoid
。有很多地方可以找到类么半群结构。例如,看看monoids package。除了类型类之外,我会提供一个非常简单的答案来回答你的问题:编写程序!最好的学习方法是通过实践,所以选择一些有趣或有用的东西,然后让它发生。
事实上,许多更抽象的概念--比如Arrow
--可能会更有意义,如果您稍后再来看它们,并发现它们为您遇到但甚至没有意识到可以抽象出来的问题提供了一个整洁的解决方案。
但是,如果您想要实现特定的目标,为什么不看一下Functional Reactive Programming--这是一系列很有前途的技术,但是对于最好的方法是什么,还有很多悬而未决的问题。
发布于 2010-07-14 23:09:36
像Monad
,Applicative
,Arrow
,Functor
这样的类型类都很棒,甚至比函数泛型带来的便利更能改变你对代码的看法。但有一种普遍的误解,认为Haskell的“下一步”是学习更多的类型类和结构化控制流的方法。下一步是决定你想要写什么,并试着写出来,探索你需要的东西。
即使您了解Monads,这也不意味着您已经触及了monadically结构化代码所能做的事情的皮毛。尝试使用解析器组合器库,或者编写自己的解析器组合器库。探索为什么应用符号有时对他们来说更容易。探索为什么限制自己使用应用型解析器可能更有效。
查看逻辑或数学问题,探索实现回溯的方法--深度优先、广度优先等。探索ListT与LogicT和ChoiceT之间的区别。看一下continuations。
或者做一些完全不同的事情!
https://stackoverflow.com/questions/3247280
复制相似问题