Questions tagged «haskell»

Haskell是一种功能性编程语言,具有强大的静态类型,惰性评估,广泛的并行性和并发支持以及独特的抽象功能。


6
您不了解Hindley-Milner的哪一部分?
我发誓曾经有一件不朽的字样出售的T恤: 哪一部分 你不明白吗 就我而言,答案将是……全部! 特别是,我经常在Haskell论文中看到这样的符号,但是我不知道它的含义。我不知道它应该是数学的哪个分支。 我当然知道希腊字母的字母和诸如“∉”之类的符号(通常表示某些东西不是集合的元素)。 另一方面,我以前从未见过“⊢”(维基百科声称这可能意味着“分区”)。我也不熟悉这里使用的vinculum。(通常情况下,它表示一个级分,但是这并不出现在这里是这种情况。) 如果有人至少可以告诉我从哪里开始寻找理解符号海的含义的方法,那将是有帮助的。

15
Haskell入门
这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 几天来,我一直试图围绕Haskell的函数式编程范例。我通过阅读教程和观看截屏视频来做到这一点,但似乎没有任何坚持。现在,在学习各种命令式/ OO语言(例如C,Java,PHP)时,练习已经成为我的理想选择。但是由于我真的不知道Haskell的功能,并且因为要使用许多新概念,所以我不知道从哪里开始。 那么,您是如何学习Haskell的?是什么让您真正“破冰”?另外,对于开始练习有什么好主意吗?



18
与Project Euler的速度比较:C,Python,Erlang,Haskell
我已经采取了问题#12从项目欧拉作为编程锻炼和比较我的(肯定不是最优的)实现在C,Python和Erlang和Haskell的。为了获得更高的执行时间,我搜索的第一个三角形数的除数大于1000,而不是原始问题中所述的500。 结果如下: C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin 842161320 real 0m11.074s user 0m11.070s sys 0m0.000s 蟒蛇: lorenzo@enzo:~/erlang$ time ./euler12.py 842161320 real 1m16.632s user 1m16.370s sys 0m0.250s 带有PyPy的Python: lorenzo@enzo:~/Downloads/pypy-c-jit-43780-b590cf6de419-linux64/bin$ time ./pypy /home/lorenzo/erlang/euler12.py 842161320 real 0m13.082s user 0m13.050s sys 0m0.020s Erlang: lorenzo@enzo:~/erlang$ erlc euler12.erl lorenzo@enzo:~/erlang$ time erl -s …

13
时间函数在函数编程中如何存在?
我不得不承认我对函数式编程并不了解。我从这里到那里都读到它,因此知道在函数式编程中,无论调用多少次,函数对于相同的输入都会返回相同的输出。就像数学函数一样,该函数针对函数表达式中涉及的输入参数的相同值求出相同的输出。 例如,考虑一下: f(x,y) = x*x + y; // It is a mathematical function 无论您使用多少次f(10,4),它的价值始终是104。这样,无论您在何处编写f(10,4),都可以将其替换为104,而无需更改整个表达式的值。此属性称为表达式的引用透明性。 由于维基说(链接) 相反,在功能代码中,函数的输出值仅取决于输入到该函数的参数,因此,用参数x的相同值两次调用函数f会两次产生相同的结果f(x)。 函数编程中是否可以存在时间函数(返回当前时间)? 如果是,那么它怎么存在?它不违反功能编程的原理吗?它特别违反了引用透明性,而引用透明性是函数式编程的特性之一(如果我正确理解的话)。 否则,如何知道函数式编程的当前时间?

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

10
Haskell在现实世界中有什么用?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 Haskell周围有很多炒作,但是,很难获得有关在实际应用中如何使用它的信息。Haskell最受欢迎的项目/用法是什么?为什么它擅长解决这些问题?

15
可以进行功能GUI编程吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 我最近抓到了FP错误(试图学习Haskell),到目前为止我所看到的内容(一流的函数,惰性评估以及所有其他优点)给我留下了深刻的印象。我还不是专家,但是我已经开始发现“功能上”的推理比基本算法的必要性更容易(而且我很难回头去找)。 但是,当前FP似乎保持不变的一个领域是GUI编程。Haskell方法似乎只是包装命令式GUI工具包(例如GTK +或wxWidgets),并使用“ do”块来模拟命令式样式。我没有使用过F#,但是我的理解是,将OOP与.NET类一起使用时,它可以执行类似的操作。显然,这是有充分的理由的-当前的GUI编程都是关于IO和副作用的,因此在大多数当前的框架中不可能进行纯功能编程。 我的问题是,是否可以使用功能性方法进行GUI编程?我很难想象这在实践中会是什么样子。是否有人知道尝试这种方法的任何框架(实验框架或其他框架)(甚至是为功能性语言从头开始设计的任何框架)?还是仅使用混合方法的解决方案,对于GUI部件使用OOP,对于逻辑使用FP?(我只是出于好奇而问-我很想认为FP是“未来”,但是GUI编程似乎需要填补很大的空白。)

1
GHC中自动专业化的及物性
从GHC 7.6 的文档中: 您通常甚至根本不需要SPECIALIZE编译指示。编译模块M时,GHC的优化器(带有-O)自动考虑M中声明的每个顶级重载函数,并将其专门化为M中调用它的不同类型。优化器还考虑每个导入的INLINABLE重载函数,并将其专门用于M中不同类型的调用。 和 此外,给定函数f的SPECIALIZE编译指示,GHC将自动为f调用的任何类型类重载函数创建专用化,如果它们与SPECIALIZE编译指示在同一模块中,或者它们是不可插入的;等等。 因此,GHC应该自动对标记为没有杂用语的某些/大多数/全部(?)函数进行特殊化处理,如果我使用显式的杂用语,则该特殊化是可传递的。我的问题是:自动专业化是可传递的吗?INLINABLE 具体来说,这是一个小例子: Main.hs: import Data.Vector.Unboxed as U import Foo main = let y = Bar $ Qux $ U.replicate 11221184 0 :: Foo (Qux Int) (Bar (Qux ans)) = iterate (plus y) y !! 100 in putStr $ show $ foldl1' (*) ans Foo.hs: …
392 haskell  ghc 

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

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

7
好的Haskell来源,可以阅读和学习。
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 有哪些使用Haskell的开放源代码程序可以被认为是高质量的现代Haskell?代码库越大,越好。 我想从他们的源代码中学习。我觉得我已经无法从小型代码示例中学习了,这些示例通常是深奥的和小型的。我想看一下代码的结构,当发生许多事情(日志记录,I / O,配置等)时,monad如何交互。

4
“ coalgebra”在编程环境中是什么意思?
我在函数式编程和PLT圈子中曾多次听到过“ coalgebras”一词,尤其是当讨论对象,共面体,透镜等时。对该术语进行谷歌搜索会给出一些页面,其中给出了这些结构的数学描述,这对我来说是非常难以理解的。谁能解释编程中上下文中的代数意味着什么,它们的意义是什么,以及它们与对象和子代之间的关系?

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.