Tag: haskell

Haskell接近error handling

这里没有任何争论,Haskell中有各种机制来处理错误并正确处理它们。 错误monad,可能,exception等 那么为什么它比其他语言中的Haskell编写exception容易的代码更简单呢? 比方说,我想写一个命令行工具,处理在命令行上传递的文件。 我想: 提供validation文件名 validation文件是可用的和可读的 validation文件有有效的标题 创build输出文件夹并validation输出文件是可写的 处理文件,错误parsing错误,不变的错误等 输出文件,写入错误,磁盘已满等错误 所以一个非常直接的文件处理工具。 在Haskell中,我会用一些单子组合来包装这个代码,使用Maybe和Either,并根据需要翻译和传播错误。 最后,这一切都得到了一个IO monad,我可以输出状态给用户。 用另一种语言,我只是抛出一个exception,并抓住适当的地方。 直截了当。 我不花很多时间在认知上,试图解开我需要的机制。 我只是接近这个错误,或者这是否有这种感觉的一些内容? 编辑:好吧,我收到反馈告诉我,这只是感觉更难,但实际上不是。 所以这里是一个痛点。 在Haskell中,我正在处理monads堆栈,如果我必须处理错误,我要为这个monad堆栈添加另一个图层。 我不知道为了编译代码而添加了多less个提升语句和其他语法垃圾,但却增加了零语义含义。 没有人觉得这增加了复杂性?

你如何识别monadicdevise模式?

我学习Haskell的方式我已经开始掌握monad概念,并开始使用我的代码中已知的monad,但是从devise者的angular度来看,我仍然遇到困难。 在面向对象中有几个规则,比如“为名称标识名词”,注意某种状态和接口……但是我无法为monadfind相应的资源。 那么如何将自然界中的一个问题看成一元问题呢? 一元devise有什么好的devise模式? 当你意识到某些代码可以更好地重构为monad时,你的方法是什么?

很好的介绍自由定理

我偶然发现了函数式语言中的自由定理 。 但是,我能find的唯一资源是Wadler的文章“ 免费定理 ”。 这是相当不错的,但它绝对不是一个教程,难以让我通过(我了解了一半,它需要我花了很多时间)。 你能推荐我另外一篇文章或教程,面向熟悉function性编程的软件开发人员,而不是硬核function语言研究人员吗? 谢谢。

Haskell库的概述和质量

我想在生产中使用Haskell。 它有很多的libraties,但并不是所有的都是稳定的,准备使用和发达的。 一些有趣概念的图书馆具有实验性的地位。 许多库仍然是小版本(例如0.0.1)。 其中一些刚刚放弃。 Hackage太大了,无法监控它们,所以我需要对目前的库状态,它们的前景和适用性进行简要的介绍。 我明白这个问题非常广泛,但是这个信息对任何人都是有用的。 在这里,我们可以一点一点地收集信息,然后将其用于信息性的论文。 那么我可以使用哪些库: 快速arrays能够处理数百万个项目 快速而强大的地图(可能是Data.Map?) 快速,通用和方便的树木 队列,哈希表 常用expression 有限状态机 neural network,遗传algorithm math计算 物理(可用于游戏开发) GUI image processing(实际上我们有各种图像格式) 使用数据库(也许ORM或一些DSL来生成SQL) function反应式编程 OpenGL绑定(是的,HOpenGL是好的),OpenAL和OpenCL绑定 parsing(Parsec是我认为很好) multithreading和并行编程 networking 多用途游戏引擎 别的东西? 有什么工具也是有趣的: testing(QuickCheck) logging(也许hslogger) 剖析 debugging 这里的类似主题的链接: 什么是最好的Haskell库来操作一个程序? 正则expression式和string库在Haskell中 用于Haskell中严格数据结构的库 内存高效的string在Haskell中 哪个Haskell库用于计算机graphics几何? 哪个Haskell XML库可以使用? 其他链接 应用程序和库(列表和简要说明) 常用expression 你应该使用的Haskell库 现在有很多Haskell库。 我们要做什么呢? 受欢迎的Haskell软件包:2010年第二季度报告 谢谢。

从哪里开始依赖types编程?

有一个伊德里斯教程,Agda教程和许多其他的教程风格的论文和介绍性材料,永无止境的参考事物还没有学习。 我在这些中间爬行,大部分时间我都被math符号和新术语突然出现,没有任何解释。 也许我的math糟透了:-) 有没有任何有纪律的方法来进行依赖型编程? 就像你想要学习Haskell一样,你从“自学一个Haskell”开始,当你想学习Scala的时候,你从Odersky的书开始,对于Ruby来说,你会看到那个奇怪的教程,里边有变异的bug。 但是我不能用他们的书来启动Agda或Idris。 他们高于我的头。 我尝试了Coq,并陷入了所有关于TeX的certificate风格。 阿格达需要一个巨大的math背景和伊德里斯,好吧,让我们暂时离开! 我非常了解静态types系统,我对Scala非常熟练,如果需要,我可以使用Haskell。 我理解function范式并日复一日地使用它,我理解代数数据types和GADT(实际上相当顺利),而且我最近设法理解了Lambda Cube。 虽然我缺乏math和逻辑部分。

Haskelllogging语法

Haskell的logging语法被许多人认为是对其他优雅语言的一种讽刺,因为它的丑陋语法和命名空间污染。 另一方面,通常比基于位置的select更有用。 而不是像这样的声明: data Foo = Foo { fooID :: Int, fooName :: String } deriving (Show) 在我看来,沿着这些路线的东西会更有吸引力: data Foo = Foo id :: Int name :: String deriving (Show) 我肯定有一个很好的理由,我错过了,但为什么类似C语言的logging语法通过一个更干净的布局为基础的方法? 其次,有没有什么可以解决命名空间问题,所以我们可以在未来的Haskell版本中编写id foo而不是fooID foo ? (除了目前可用的longwinded基于类的解决方法之外)。

面向对象的编程在纯粹的函数式编程环境中?

在函数式编程(FP)环境中使用面向对象编程(OOP)有什么优势? 我已经使用F#一段时间了,我注意到我的函数越是没有状态,我就越需要将它们作为对象的方法。 特别是,依靠types推断使它们在尽可能多的情况下可用是有利的。 这并不排除需要一些与OOP正交的forms的命名空间。 也不鼓励使用数据结构。 实际上,FP语言的实际使用在很大程度上依赖于数据结构。 如果你看看F Sharp Programming / Advanced Data Structures中实现的F#栈,你会发现它不是面向对象的。 在我看来,面向对象与处理对象状态的方法主要是为了改变对象有很大关系。 在一个纯粹的FP环境中,这是不需要也不需要的。 一个实际的原因可能是能够与OOP代码交互,就像F#与.NET一样 。 除此之外,有没有什么原因? Haskell世界的经验是什么?编程更纯粹的FP? 我会很感激任何关于这个问题的论文或反事实的例子。

Haskell中的存在与量化types

这些差别究竟是什么? 我想我明白存在types是如何工作的,他们就像在OO中有一个基类,没有下滑的方法。 普遍types如何不同?

在Haskell中dynamic调度

例如,用Java编写的程序依赖于dynamic调度。 如何用Haskell等function语言来expression这样的程序? 换句话说,“dynamic调度”下的Haskellexpression方式是什么?

为什么types类很难实现?

Simon在幻灯片30/78上build议,types类的实现一开始就是“绝望”。 有人知道这是为什么吗?