Tag: haskell

真实世界使用GADT

广义代数数据types的实际应用是否有很好的资源? 在haskell wikibook中给出的例子太短,不能让我了解GADT的真正可能性。 谢谢

装饰者模式的function相当于?

什么是装饰devise模式的等价function编程? 例如,你将如何在function风格中编写这个特定的例子 ?

查看由模板Haskell生成的代码的首选方法

如您所知,模板Haskell用于在编译时以编程方式生成各种AST拼接。 然而,拼接往往是非常不透明的,而且通常难以辨别拼接实际上产生了什么。 如果你运行Q monad进行拼接,并且拼接是打好的types的,那么你就可以看到生成的AST片断,但是由于其非结构化的布局,这种表示可能很难理解。 将一段TH生成的AST转换成类似于普通Haskell代码的首选方法是什么?这样代码就可以很容易地被读取和理解了。 能从一个给定的Dec值重build源代码吗? 是否需要阅读GHC核心代码? 有没有办法来至less构build的AST,使其变得更加可读(除了什么,如pretty-show包装)?

Haskell,Scala,Clojure,高性能模式匹配和并发性select

最近我读了很多关于FP在并发执行和性能方面的优点的博文, 我对FP的需求很大程度上受到我正在开发的应用程序的影响,我的应用程序是一个基于状态的数据注入到另一个时间非常关键(每秒接近200万事务)的子系统。 我有几个这样的子系统需要testing。 我正在认真考虑使用FP来实现并行性,并希望采取正确的方法,很多SO上的文章都谈到了Scala,Haskell和Clojure的语言结构,库和JVM支持的缺点和优点。 从语言的angular度来看,只要能帮助我达到目标,我就可以学习任何语言。 某些post赞同Haskell的模式匹配和语言的简单性,基于JVM的FP lang在使用现有的java库方面有很大的优势。 JaneStreet是OCAML的大支持者,但是我真的不确定开发者支持和帮助OCAML的论坛。 如果有人处理这样的大数据,请分享您的经验。

有(a – > b) – > b`相当于有一个`a`?

在一个纯粹的函数式语言中,你可以用一个值做的唯一事情就是对它应用一个函数。 换句话说,如果你想用typesa的值做任何有趣的事情,你需要一个types为f :: a -> b的函数,然后应用它。 如果有人用(a -> b) -> b给你(flip apply) a (a -> b) -> b ,那么是否适合replace? 你会用types(a -> b) -> b调用什么? 看来,这似乎是一个a的替身,我很想把它称为代理,或从http://www.thesaurus.com/browse/proxy 。

如何debuggingHaskell代码?

我有个问题。 我写了一个大的Haskell程序,它总是以小的input工作。 现在,当我想testing它并产生更大的input时,我总是得到这样的信息: HsProg: Prelude.head: empty list 我多次使用Prelude.head 。 我能做些什么来获得更多的信息或者获得更好的错误输出来获取发生的代码行?

不纯的function语言OCaml的“let rec”的原因是什么?

在“ Real World OCaml ”一书中,作者提出了为什么OCaml使用let rec来定义recursion函数。 OCaml区分非recursion定义(使用let)和recursion定义(使用let rec)主要是出于技术原因:types推断algorithm需要知道何时一组函数定义是相互recursion的,并且由于不适用于像Haskell这样的纯粹语言,这些都必须由程序员明确标记。 什么是强制执行let rec技术上的原因,而纯粹的function语言呢?

你有没有在一个真正的项目中使用Quickcheck

Quickcheck及其变体(甚至Java中有一个)似乎很有趣。 然而,除了学术上的兴趣之外,它在真正的应用程序testing(例如GUI应用程序或客户端/服务器,甚至是StackOverflow本身)中真的有用吗? 你有类似的testing发生器的任何经验,赞赏。

Data.MemoCombinators如何工作?

我一直在寻找Data.MemoCombinators的来源,但是我无法真正看到它的核心在哪里。 请向我解释一下这些组合器背后的逻辑以及他们如何在真实世界的编程中加速你的程序的机制。 我正在寻找这个实现的细节,并且可以与其他Haskell方法进行比较/对比。 我明白什么是memoization,我不是在寻找一般的工作原理的描述。

如果你违反monad法则,你会怎么样?

编译器或者库中更“本土”的部分(IO或可以使用黑魔法和实现的函数)是否对这些规律做出了假设? 打破他们会导致不可能发生? 或者他们只是expression了一种编程模式 – 也就是说,你打扰他们的唯一一个会使用你的代码的人,并不希望你如此粗心大意?