可能重复: Java的接口和Haskell的types类:差异和相似之处? 当我开始学习Haskell时,我被告知types类比接口更强大/不同。 一年以后,我已经广泛地使用了接口和types类,我还没有看到一个例子或解释,他们是如何不同。 这不是一个自然而然的启示,我错过了一些显而易见的事实,或者实际上并没有真正的区别。 search互联网并没有带来任何实质性的进展。 所以呢,你有答案吗?
我一直在努力在Haskell中编写Windows服务应用程序。 背景 服务应用程序由Windows服务控制pipe理器执行。 启动后,它会阻止对CallService提供的StartServiceCtrlDispatcher的调用,作为服务的主要function 。 该服务的主要function是应该注册第二个callback来处理传入的命令,如开始,停止,继续等。它通过调用RegisterServiceCtrlHandler 。 问题 我可以写一个程序,它将注册一个服务主要function。 然后,我可以将该程序安装为Windows服务,然后从服务pipe理控制台启动它。 该服务能够启动,报告自己正在运行,然后等待传入的请求。 问题是,我无法让我的服务处理函数被调用。 查询服务状态显示它正在运行,但只要我发送一个“停止”命令窗口popup消息说: Windows could not stop the Test service on Local Computer. Error 1061: The service cannot accept control messages at this time. 根据MSDN文档 ,StartServiceCtrlDispatcher函数将阻塞,直到所有服务报告它们停止。 在调用服务主函数之后,调度程序线程应该等待,直到服务控制pipe理器发送一个命令,此时处理函数应该由该线程调用。 细节 接下来是我正在尝试做的一个非常简化的版本,但它演示了我的处理函数没有被调用的问题。 首先,一些名字和import: module Main where import Control.Applicative import Foreign import System.Win32 wIN32_OWN_PROCESS :: DWORD wIN32_OWN_PROCESS = 0x00000010 […]
GHC如何处理由多个线程访问的thunk(显式线程或者评估火花的内部线程)? multithreading可以评估同一个thunk,重复工作吗? 或者,如果thunk是同步的,怎么样,这样的performance不受影响?
我曾经接触过命令式语言(C,一些Java),但是我会说我没有编程经验 。 因此:把我当作非程序员来对待,Haskell是否适合作为第一语言? 我对纯math和CS的兴趣似乎与大多数Haskell教程的意图是一致的,尽pipe我可以固有地认识到命令式编程的当前和未来的行业价值,但是我发现函数式编程的潜力(尽pipe似乎是这样的范式转变)引人入胜。 我想我的问题可以被提炼如下 – 一个非程序员是否必须理解命令式编程来欣赏和充分利用函数式编程? 一些参考: 有没有关于function性/声明性或命令式编程作为第一语言更容易学习的研究? 哪些编程语言帮助您更好地理解编程?
通常将Haskell引用为纯function语言的一个例子。 鉴于System.IO.Unsafe.unsafePerformIO的存在,如何certificate这一点? 编辑:我认为“纯粹function”是指不可能将不纯的代码引入到程序的function部分。
我无法弄清楚这样的类定义中的“| m – > w” class (Monoid w, Monad m) => MonadWriter wm | m -> w 这些添加到类定义中的附加信息是什么?
当你写更复杂的函数时,我注意到$被使用了很多,但是我不知道它的作用。
什么是dependency injection的惯用Haskell解决scheme? 例如,假设你有一个接口frobby ,并且你需要传递一个符合frobby的实例(可能有这些实例的多个变体,比如foo和bar )。 典型的操作是: 函数需要一些值X并返回一些值Y 例如,这可能是一个数据库访问器,采取一个SQL查询和连接器,并返回一个数据集。 你可能需要实现postgres,mysql和一个模拟testing系统。 函数需要一些Z值,并返回一个关于Z的闭包,专门用于在运行时select的给定的foo或bar样式。 一个人解决了这个问题如下: http://mikehadlow.blogspot.com/2011/05/dependency-injection-haskell-style.html 但是我不知道这是否是pipe理这个任务的标准方法。
我对“火花”的概念感到困惑, 这是Haskell中的一个线程吗? 或者是产生新线程的行为? 谢谢大家: 所以总结一下,sparks不是线程,而是更多的计算单位(任务放在C#/ Java中)。 所以这是Haskell实现任务并行的方式。
我正在寻找一些电子书,这将有助于我学习函数式编程。 我还没有决定使用哪种语言,但是我注意到了在StackOverflow社区中对LISP,Haskell和F#的相当多的偏见。 到目前为止,我还不确定我将采取哪个方向,但任何人都可以推荐关于这个主题的任何特定的电子书? 另外,如果任何人都可以提出一个引人注目的论证,哪种function语言是最有趣的,那么我会很乐意听到你的意见。 我特别感兴趣的电子书,因为我设法给自己索尼电子书圣诞节电子书阅读器,我正在寻找加载与有用的材料为我的永无止境的追求成为一个更好的程序员。