草庐IT

haskellers

全部标签

c++ - c++ 概念与 Haskell 类型类有何不同?

ConceptsTS中的C++概念最近已合并到GCC主干中。概念允许人们通过要求类型满足概念条件(例如“可比较”)来约束通用代码。Haskell有类型类。我对Haskell不是很熟悉。概念和类型类有什么关系? 最佳答案 概念(由概念TS定义)和类型类仅在它们限制可用于泛型函数的类型集的意义上相关。除此之外,我只能想到这两个功能的不同之处。我应该注意我不是Haskell专家。离得很远。但是,我是ConceptsTS方面的专家(我编写了它,并为GCC实现了它)。概念(和约束)是确定类型是否是集合成员的谓词。您不需要显式声明一个类型是否是

c++ - Haskell Thrift 库在性能测试中比 C++ 慢 300 倍

我正在构建一个包含两个组件的应用程序-用Haskell编写的服务器和用Qt(C++)编写的客户端。我正在使用Thrift与他们交流,我想知道它为什么工作这么慢。我做了一个性能测试,这是我机器上的结果结果C++serverandC++client:Sending100pings-13.37msTransfering1000000sizevector-433.58msRecieved:3906.25kBTransfering100000itemsfromserver-1090.19msTransfering100000itemstoserver-631.98msHaskellservera

haskell - 垃圾收集器如何找出堆栈中的对象引用?

在Haskell或Go等具有自动垃圾收集功能的语言中,垃圾收集器如何找出堆栈中存储的哪些值是指向内存的指针,哪些只是数字?如果垃圾收集器只是扫描堆栈并假定所有地址都是对对象的引用,那么很多对象可能会被错误地标记为可达。显然,可以在每个堆栈帧的顶部添加一个值,以描述有多少下一个值是指针,但这不会花费很多性能吗?现实中是怎么做到的? 最佳答案 一些收集器假设堆栈上的所有内容都是潜在指针(如BoehmGC)。事实证明,这并不像人们想象的那么糟糕,但显然不是最理想的。在托管语言中更常见的是,一些额外的标记信息留在堆栈中,以帮助收集器找出指针

haskell - 如何使用 Haskell 模拟 Go 的 channel ?

我最近开始阅读Go编程语言,发现channel变量是一个非常吸引人的概念。是否可以在Haskell中模拟相同的概念?也许有一个数据类型Channela和一个monad结构来启用可变状态和像关键字go一样工作的函数。我不太擅长并发编程,像Haskell中这样的简单channel传递机制真的会让我的生活更轻松。编辑人们要求我澄清我有兴趣将哪种Go模式转换为Haskell。所以Go有一流的channel变量,可以通过函数传递和返回。我可以读取和写入这些channel,因此可以在可以同时运行的例程之间轻松通信。Go还有一个go关键字,根据语言规范,它作为一个独立的线程同时启动一个函数的执行,并

programming-languages - Haskell 的类型类和 Go 的接口(interface)

Haskell的TypeClasses和Go的Interfaces有什么异同?两种方法的相对优缺点是什么? 最佳答案 看起来像onlyinsuperficialways是Go接口(interface),类似于Haskell中的单参数类型类(构造函数类)。方法与接口(interface)类型相关联对象(特定类型)可能具有该接口(interface)的实现我不清楚Go是否以任何方式通过接口(interface)支持有界多态性,这是类型类的主要目的。也就是说,在Haskell中,接口(interface)方法可以用在不同的类型上,clas

json - JSON 的哪个 Haskell 包

HackageforHaskell上有大约十几个JSON包。我怎么知道我应该使用哪个包?如何获得大众意见?是否有关于哪个包使用最多、下载最多等的统计数据? 最佳答案 我认为其他答案已经过时,今天它被广泛接受,我认为最好的JSON库和Haskell中的事实标准是Aeson:http://hackage.haskell.org/package/aeson维护者是BrianO'Sullivan,他以对Haskell的深入了解和以性能为导向的工作而闻名;毫无疑问,这是正确的选择。此外,Aeson提供了一个非常好的API,checkthise

Java 接口(interface)和 Haskell 类型类 : differences and similarities?

在学习Haskell时,我注意到它的type类,这应该是源自Haskell的一项伟大发明。但是,在theWikipediapageontypeclass:Theprogrammerdefinesatypeclassbyspecifyingasetoffunctionorconstantnames,togetherwiththeirrespectivetypes,thatmustexistforeverytypethatbelongstotheclass.在我看来,这与Java的接口(interface)很接近(引用Wikipedia'sInterface(Java)page):Anin

haskell - 使用 cabal 和 ghc 构建运行时标志

我有一个用Haskell编写的程序,打算用GHC编译。该程序在多核上的扩展性非常好,因此启用多线程非常重要。在我的.cabal文件中,我添加了ghc-options:-O3-threaded以与线程运行时链接。问题在于,使用这种方法,用户需要使用foo+RTS-N运行程序,这似乎有点神秘,而且对用户不太友好。如何告诉cabal/ghc对用户不可见地启用这些运行时标志?我读过--with-rtsopts,但是当我尝试使用它时,GHC(7.0.3)只是吐出unrecognizedflag。 最佳答案 标志是-with-rtsopts,而

haskell - 使用 Haskell 的工程符号

是否存在提供工程符号格式(作为字符串)的现有Haskell函数?如果不是,我读到printf可以通过向PrintfArg添加一个实例来扩展。您认为这是一个好的解决方案吗?我所说的工程符号是指指数是3的倍数的指数符号。 最佳答案 经过一番研究,我设法得到了我想要的。只需几步即可获得工程格式的功能:1.将指数与尾数分离有必要将尾数中的指数分开。decodeFloat函数(由base提供)解码float并返回尾数和指数2的幂次(mant2*2^ex2).2。获取以正确底数表示的尾数和指数需要10次方的转换。这就是这个函数的作用。decom

haskell - 将 NominalDiffTime 打印为小时、分钟和秒

我很惊讶以前没有人问过这个问题,但是...如何将NominalDiffTime简单地打印为小时、分钟和秒?(可能还有天,如果它恰好有那么长......)由于未知原因,Show实例打印总秒数,这显然是无用的。(13055.22秒有多长?是几分钟?一天?半小时?我不知道!)有FormatTime类,但不适用于NominalDiffTime。您似乎可以使用floor方法将总秒数作为实际的数字,但是您如何处理它呢?据我所知,DiffTime也无济于事。必须有一种方法可以合理地打印持续时间... 最佳答案 您可以通过TimeOfDay打印一个