Questions tagged «haskell»

一种功能编程语言

1
软件事务存储的可组合性示例
经常被提及的软件事务存储的主要优点之一是可组合性和模块化。可以将不同的片段合并以产生更大的成分。在基于锁的程序中,通常不是这种情况。 我正在寻找一个简单的示例,用实际代码对此进行说明。我希望在Clojure中举一个例子,但是Haskell也很好。如果该示例还展示了一些不易编写的基于锁的代码,则可以加分。
11 haskell  clojure  stm 


2
维持状态而不分配
我正在学习函数式编程,无法理解如何在不使用分配的情况下实现某些特定方案。以下简单的问题几乎使我感到困惑。 编写一个程序,该程序接收有关给定数据结构更改的事件,并在此数据结构达到特定状态时发出事件。 所以我有一个我要维护的数据结构的副本 datastructure_copy::DataStructure 当事件发生变化时,我会触发事件流: datastructure_changes::Stream Change 我有一个将更改应用于数据结构并返回新副本的函数: apply_change::Change -> DataStructure -> DataStructure 而且我有一个谓词,用于检查数据状态是否已达到所需状态。 is_ready::DataStructure ->Boolean 换句话说,我需要在流上工作的“ reduce”之类的东西。 我知道实现此目标的一种方法是在每次更改到达时重新计算状态,但这似乎不切实际。我在State monad玩了一点,但在我看来,这似乎是为了解决另一个问题。 那么还有另一种方法吗? 请注意,我的问题纯粹是概念性的,对Haskell并不很熟悉。

1
有必要学习haskell语言扩展以进行生产
Haskell核心语言非常简单。来自面向对象的背景,主要困难是适应纯功能范式。 在学习“基础” Haskell时,我一直将语言扩展视为CS人士的玩具或作为该语言的未来版本的实验(例如from future import ???python)。 但是,当我开始研究诸如Yesod之类的Web框架时,我发现许多源文件需要3到4个扩展名。有些看起来很简单(StringOverload)。其他的确实令人生畏(GADT,Type Famillies,Template Haskell)。他们的文档链接到研究论文,这对于那些希望“仅仅”学习一个新图书馆的人来说是很恐怖的。 是否有必要学习GHC语言扩展才能在Haskell中发挥作用?如果您要雇用Haskell开发人员进行生产应用程序,您会要求获得这些知识吗?
10 haskell 

2
Lisp和Scheme中的类型
我现在看到球拍具有类型。乍一看,它似乎与Haskell键入几乎相同。但是Lisp的CLOS是否涵盖了Haskell类型涵盖的某些空间?创建一个非常严格的Haskell类型和任何OO语言的对象似乎都差不多。只是我喝了一些Haskell kool-aid,而我完全偏执地认为,如果我沿着Lisp的路走,由于动态打字,我会被搞砸了。

4
STDOUT及其杂质
我已经阅读了很多有关函数式编程的书籍和文章,但仍然感到羞愧,因为无法确定地理解一些非常基本的概念。 函数式编程的主要思想之一是相同的输入始终应产生相同的输出。因此,按定义,查询数据库或写入文件无法以纯功能样式完成。例如,这就是我们需要monad的原因之一。 问题是-为什么我们认为STDOUT输出不纯?是的,任何文件处理程序都存在风险-我们永远无法确定总是会写入数据。但是STDOUT呢?为什么我们认为它不可靠?评估本身是否更加不可靠?我的意思是,我们总是可以拉动触发器,从而进行中断计算。

5
如果我决定像Haskell一样编写所有Ruby,可以吗?
鉴于Ruby具有内置的良好列表操作功能-减少,映射,选择,收集等。它具有Procs,Blocks和Lambdas,并且具有良好的迭代支持(该each系列),如果我尝试这样做会是一个错误的设计决定以最纯功能的方式编写我所有的Ruby内容?尤其是对于几乎没有I / O的代码(因此不太明显的副作用)? 我一直在学习Haskell(称为“真正的”黑客语言),并且喜欢它的做事方式-我爱Ruby,但是当更多的Haskell精神融入其中时,它可能会变得更加有趣(嗯,没有露比不是一开始就从它那里学到很多东西吗?) 欢迎提供建设性的指导...

2
为什么在Haskell中不绑定Enum的子类
似乎任何Bounded实例都应具有健全的Enum实现。我个人无法想到一个反例,尽管如果有人提出了一个非病态的例子,那么我会理解为什么不是这样。 从这:i两个类型类上看,似乎标准库中当前唯一的例外是元组,它们是有界的,但不是枚举。但是,任何绑定元组也必须以合理的方式可枚举,方法是简单地增加最后一个元素,然后在到达maxBound时环绕它。 此更改可能还涉及在Bounded中添加predB和/ nextB或类似的东西,以安全/循环的方式遍历Enum值。在这种情况下toEnum 0 :: (...)等于(toEnum 0, toEnum 0, ...) :: (...)

1
不基于数组的计算机体系结构
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 瓦德勒(Wadler)撰写的有关函数式编程Monad(Haskell)的原始论文 历史悠久的另一个问题是,是否需要使程序基于数组更新。由于在基于数组的算法和体系结构开发方面投入了大量精力,因此我们将回避这一辩论,并简单地假设答案是肯定的。 没有引用或暗示其他可能的体系结构。我听说过一些适合Lisp的体系结构。有人可以指导我一些关于如何/如何开始该主题的解释和指导。非常感谢您可以简要介绍不同的体系结构。

2
Golang / Haskell中的类型推断
我已经读过,从ML或Haskell之类的功能语言的意义上讲,Go实际上没有真正的类型推断,但是我无法找到一个简单易懂的两个版本的比较。有人可以用基本术语解释Go中的类型推断与Haskell中的类型推断有何不同,以及每种方法的优缺点吗?

1
数学需要了解Haskell类型系统背后的理论吗?
最近,我对Haskell产生了浓厚的兴趣。 在尝试学习新概念(例如,forall关键字和ST monad)和一般的Haskell的类型系统时,我不断地从类别理论和lambda演算中学习概念。所以,我想知道: 数学的其他哪些分支对于深入了解Haskell的类型系统也很重要? 我可以放弃对这些数学的严格研究,而是专注于某些相关概念吗?(例如,lambda演算中的量词。)如果是,那么哪些概念必不可少? 我希望很快能学到类型和编程语言,但是,请提出您认为合适的其他替代阅读资源。

2
Haskell的内存中数据存储
我想在Haskell中为Web服务实现内存中的数据存储。我想在STMmonad中运行事务。 当我在Google 哈希表Steam Haskell上搜索时,我只会得到以下信息:Data. BTree. HashTable. STM.模块名称和复杂性表明这是作为树实现的。我认为对于可变哈希表,数组应该更有效。 是否有理由避免将数组用于STM哈希表?我可以通过此Steam哈希表获得任何收益,还是应该仅使用Steam ref来引用IntMap?

2
Haskell函数组合是管道和过滤器架构模式的实例吗?
管道和过滤器的架构模式定义为一系列处理元素,其排列方式是使每个元素的输出为next的输入。每个示例似乎都考虑通过某种共享缓冲区执行的进程间或线程间连接。 在我看来,Haskell函数组合正在执行相同的任务。我们能否说这只是此模式的一个实例,即使它只是关于函数排序,并且没有显式缓冲区用作管道?如果是,对于非惰性语言,我们可以说同样的话吗?


2
谁首先创造了术语高阶职能和/或头等公民?
我已经了解到,早在Haskell,O'Caml或LISP之前,高阶函数是一门学术研究主题,在数学中,Schönfinkel(1967年)和Haskell Curry(1968年)已经应用了诸如咖喱粉之类的技术,但是在任何编程语言中都没有。 根据Wikipedia的说法, Scheme 是引入适当的高阶函数作为一等公民的第一门语言,但是有人可以将原始想法归因于此吗?也许是1930年代发明了lambda演算的Alonzo Church?更具体地说,谁创造了以下定义,我在几本书和在线资源的各种释义中看到了以下定义? 当一个函数将另一个函数作为参数或返回一个函数时,该函数被认为是更高阶的。任何不将函数用作参数或返回类型的函数都称为一阶函数。

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.