Tag: haskell

哈斯克尔与现实世界中的程序编程

这些天,我正在认真研究函数式编程。 虽然我对Haskell和它似乎提供的可能性感到非常兴奋,但是现在我也可以看到,这将花费我一些时间来学习。 在一个关于如何学习Haskell的SO问题上,一个答案指出,如果不是几年,实际上“掌握”它将需要几个月的时间。 现在,我知道C,PHP,一些面向对象的东西等等。有人告诉我,Haskell在“现实世界”中并没有太多的用处,那么我能更好地提高我所熟悉的常规语言的技能吗? 哈斯克尔是值得的斗争? 在这个问题上, 为什么人们认为函数式编程会抓住结论似乎是函数式编程会“赶上”。 但是程序编程肯定会保持在最前面,对吧? 编辑:keparo很好地澄清我的问题: 与程序语言相反,研究Haskell和函数式编程范例会有价值吗?

是否有function性编程范例的可视化build模语言或风格?

UML是一个旨在对将用OO语言编写的软件进行build模的标准,并与Java结合在一起。 但是,它是否可能被用来模拟意在编写function性编程范例的软件呢? 考虑到embedded式视觉元素,哪些图将变得有用? 有没有一种针对函数式编程的build模语言,更具体的说是Haskell? 你会推荐什么工具来组合图表? OP编辑于2009年9月2日: 我正在寻找的是代码中最直观,最清晰的代码。 易于遵循图表,视觉模型不一定针对其他程序员。 我很快就会在Haskell开发一个游戏,但是因为这个项目是为了我的gradle结束工作,所以我需要介绍一些正式的解决scheme。 我想知道是否有相当于UML + Java标准,但对于Haskell。 我应该坚持使用故事板,书面描述,非forms化的图表(一些浅stream程图像),非forms化的用例描述吗? 2012年6月21日由jcolebrand编辑: 请注意,提问者最初想要一个可视的隐喻,现在我们已经有三年了,我们正在寻找更多/更好的工具。 没有一个原始的答案真的解决了“视觉隐喻devise工具”的概念,所以…这是新的赏金正在寻求提供。

查找一组string中最长的共同起始子string

这是一个挑战,拿出最优雅的JavaScript,ruby或其他解决scheme,以相对微不足道的问题。 这个问题是最长的公共子串问题的一个更具体的例子。 我只需要在数组中find最长的公共起始子string。 这大大简化了这个问题。 例如, [interspecies, interstelar, interstate]最长的子串是“inters”。 但是,我不需要在[specifics, terrific]find“定义”。 我已经解决了这个问题,通过在JavaScript中快速编写一个解决scheme,作为我关于shell-like tab-completion ( testing页面 )的答案的一部分。 这个解决scheme略有调整: function common_substring(data) { var i, ch, memo, idx = 0 do { memo = null for (i=0; i < data.length; i++) { ch = data[i].charAt(idx) if (!ch) break if (!memo) memo = ch else if (ch != memo) break […]

与国家monad绑结

我正在开发一个Haskell项目,涉及到一个大结:我parsing一个graphics的序列化表示,其中每个节点在文件中有一些偏移量,并且可以通过偏移量引用另一个节点。 所以我需要在parsing的时候build立一个从偏移到节点的映射,我可以在do rec块中反馈给自己。 我有这个工作,而且有点不合理地抽象成一个StateT monque转换器: {-# LANGUAGE DoRec, GeneralizedNewtypeDeriving #-} import qualified Control.Monad.State as S data Knot s = Knot { past :: s, future :: s } newtype RecStateT sma = RecStateT (S.StateT (Knot s) ma) deriving ( Alternative , Applicative , Functor , Monad , MonadCont , MonadError e , MonadFix , MonadIO […]

为什么Haskell中没有IO变换器?

每一个monad都有一个变压器版本,从我所知道的变压器的想法是单子的通用扩展。 跟随其他变压器的build立, IOT将是类似的东西 newtype IOT ma = IOT { runIOT :: m (IO a) } 为此,我可以在现场IOT Maybe有用的应用程序: IOT Maybe可以执行一个IO操作,也可以不执行任何操作, IOT []可以创build一个列表,稍后可以将其作为sequence d。 那么为什么Haskell中没有IO变压器呢? (注意:我在Haskell Cafe看过这篇文章 ,但是没有太多意义, ST转换器的Hackage页面在其描述中提到了一个可能相关的问题,但是没有提供任何细节。

Haskell有更新嵌套数据结构的习惯用法吗?

假设我有以下数据模型,用于跟踪棒球运动员,球队和教练的统计数据: data BBTeam = BBTeam { teamname :: String, manager :: Coach, players :: [BBPlayer] } deriving (Show) data Coach = Coach { coachname :: String, favcussword :: String, diet :: Diet } deriving (Show) data Diet = Diet { dietname :: String, steaks :: Integer, eggs :: Integer } deriving (Show) data BBPlayer = […]

Haskell vs JVM的性能

我想写一个网站的后端系统(这将是一个自定义的search式服务)。 它需要高度并发和快速。 考虑到并发的愿望,我打算使用Haskell或Scala之类的函数式语言。 但速度也是重中之重。 http://benchmarksgame.alioth.debian.org结果似乎表明,Java几乎和C / C ++一样快,Scala一般都很好,但是对于大多数任务来说,Haskell的范围从慢到慢很多。 有没有人有任何性能的基准/经验使用哈斯克尔vs斯卡拉vs Java执行高度并发的任务? 我见过的一些网站表明,斯卡拉有内存泄漏,这可能是长期运行的服务,如这一个可怕的。 我应该写些什么服务,或者在select之前应该考虑什么(性能和并发是最高优先级)? 谢谢

经验丰富的Haskell开发人员在devise*时间如何处理懒惰?

我是一名中级Haskell程序员,拥有严格的FP和非FP语言的丰富经验。 我的大多数Haskell代码分析中等大的数据集(10 ^ 6..10 ^ 9),所以懒惰总是潜伏着。 我对thunk,WHNF,模式匹配和共享有相当好的理解,并且我已经能够用爆炸模式和seq来修复泄漏,但是这种简介和祈祷方法感觉肮脏和错误。 我想知道Haskell程序员在devise时如何接近懒惰。 我不是问如Data.ByteString.Lazy或foldl'; 相反,我想知道如何考虑导致运行时内存问题和棘手的debugging的较低级别的懒惰机制。 在devise期间,你如何思考thunk,模式匹配和共享? 你用什么样的devise模式和习语来避免泄漏? 你是怎么学习这些模式和习语的,你有没有好的参考? 你如何避免过早优化不泄漏的非问题? (2014-05-15修订时间预算): 你预算大量的项目时间来寻找和解决内存问题? 或者,您的devise技巧通常是否会避免内存问题,并且在开发周期的早期就会获得预期的内存消耗?

从C#调用Haskell

我只是花了上个星期的时间来弄清楚如何从C#执行C ++代码作为我日常工作的一部分。 我们花了很长时间才弄明白,但最后的解决办法很简单。 现在我很好奇…从C#调用Haskell有多难? (注意: 从 C#调用Haskell,而不是相反,所以主要的可执行文件是C#)。 如果真的很难,我不会打扰。 但是如果相当容易,我可能不得不去玩一玩。 基本上,我们写了一些C ++代码。 在Windows上它被编译成一个DLL,在Linux上被编译成一个共享对象( *.so )。 然后在C#端,你做了一个DllImport并且写了一些手动的内存pipe理代码,如果你试图通过任何不平凡的东西。 (例如,数组,string等) 我知道GHC应该支持在两个平台上构build共享库,但我不确定技术细节。 什么是导出东西的语法,调用者必须做任何特别的初始化DLL第一? foobar :: FilePath -> IO Int32 :假设存在一个函数foobar :: FilePath -> IO Int32 。 有人可以把一个小草图放在一起,显示: 我需要写出什么样的Haskell声明才能将其暴露给外部世界。 我如何告诉GHC构build一个自包含的DLL / SO文件。 调用者需要做的任何特殊的事情,超出了绑定foobar本身的通常过程。 我并不担心C#端的实际语法, 我想我已经或多或less地困惑了。 PS我简单地看过hs-dotnet ,但这似乎是Windows特定的。 (即,不会与Mono一起工作,所以不能在Linux上工作。)

函数不只是types:它们是types。 和种类。 和sorting。 帮助把头脑重新凝聚起来

我正在按照惯例“ 睡觉前阅读LYAH的一章”,感觉就像我的大脑随着每个代码样本的扩展一样。 在这一点上,我确信我理解了Haskell的核心优势,现在只需要了解标准库和types类,就可以开始编写真正的软件。 所以我正在阅读关于应用函数的章节,突然之间,书中宣称函数不仅仅是types, 而是types,并且可以被视为types类(例如,通过使它们成为types类的实例)。 ( – >)是一个types构造器像任何其他。 我的思绪再次被吹起,我立即跳下床,启动计算机,去了GHCi,发现了以下情况: Prelude> :k (->) (->) :: ?? -> ? -> * 这到底是什么意思? 如果( – >)是一个types构造函数,那么值构造函数是什么? 我可以猜测,但不知道如何定义传统data (->) … = … | … | … data (->) … = … | … | … data (->) … = … | … | …格式。 用任何其他types的构造函数都可以做到这一点很简单: data Either ab = […]