ghc

    2热度

    1回答

    (误导性标题:它只是一个下面有很多相互关联的类似问题:这些听起来像是要求一个完整的参考手册,但请记住这个主题有是没有参考手册,除了整个GHC的STG流水线阶段的源代码以及其他人/“内部人员”的集体积累经验......) 我正在探索“transpiling”Haskell(从头开始学习乐趣/学习,忽略现有项目;目标语言/ s类似的高级别/“已经适合的STG机器”与现有的GC + lambdas /函

    6热度

    1回答

    我正在尝试使用ekmett的线性库,并且在Linear.V中遇到了可变长度向量的一些问题。如何使用dim函数来获取矢量的大小?如何在嵌套V s的大方形矩阵上使用trace?我在这两种情况下都会遇到错误。 最少的代码: import qualified Data.Vector as Vector import Linear.V (V(V), dim) import Linear.Vector (

    11热度

    1回答

    我试图写一个分析器使用parserspackage使用do语法。这里是一个例子: {-# LANGUAGE ApplicativeDo #-} import Text.Parser.Char (string, spaces) import Text.Parser.Token (TokenParsing, natural) issueParser :: TokenParsing p => p

    3热度

    1回答

    在下面的代码中,我想在可能的情况下将g . f重写为h。可能有些情况h还没有得到类的实例,但是我想在可能的情况下进行重写。我收到一条错误消息,提示这是可以实现的,但我不确定我需要更改哪些内容。 下面是一些示例代码: {-# LANGUAGE TypeFamilies #-} main = return() data D a f :: a -> D a f = undefined

    0热度

    2回答

    下面是一个可能很愚蠢的例子,但我认为解决这个问题将解决我的另一个问题,详细的in this question。 我想编写一个函数与此签名: myread :: (Read a) => String -> a 使得myread = read,除非a ~ Int,在这种情况下myread _ = 0。 显然这个函数本身很傻,但重点是我想根据返回类型进行优化。 重写规则或其他任何东西都可以。对于我的

    9热度

    1回答

    我正在研究一个旨在作为服务工作的研究编译器项目。其中一个要求是某些用户在处理其呼叫时可能有限的内存使用情况(例如,“来自IP a.b.c.d的呼叫可能使用多达30mb的堆内存”)。我的原型实现,用C语言编写,直接使用了一个内存池indeire(直接由于有效的类型实际上很难得到)。手动内存管理,但。 有没有什么办法在Haskell中实现这一点,通过限制函数,monad或轻量级线程上的堆使用? (我会

    1热度

    1回答

    在加布里埃尔·冈萨雷斯对大厦哈斯凯尔项目尼克斯教程project 3,他写道: 默认情况下,这些数据库与GHC的-fsplit-objs标志来启用拆分对象编译文件,这减少了库的大小,但增加了编译时间。这是我建议在开发过程中使用cabal构建根项目的另一个原因,因为默认情况下cabal不会使用分割对象进行编译,因此构建速度更快。但是,当Nix构建项目时,-fsplit-objs是一个很好的默认设置,

    5热度

    2回答

    当然,产生异质列表的笛卡儿积的笛卡尔乘积可以在Haskell的一些方式来完成,如: [(x,y) | x <- [1,2,3], y <- [4,5,6]] 或 (,) <$> [1,2,3] <*> [4,5,6] 但我要的就是这样的功能: heteroCartesian :: (a1, a2, ... , an) -> (b1, b2, ... , bn) ->

    3热度

    1回答

    随着-XDuplicateRecordFields,下面是允许的: {-# LANGUAGE DuplicateRecordFields #-} module Baz(Foo(..), Bar(..)) where data Foo = Foo {qux :: Int} data Bar = Bar {qux :: String} 但是,我得到一个编译错误时Foo模块Foo和Bar中

    2热度

    1回答

    我想解析使用埃宋以下JSON在Haskell: { "foo": { "name": "name 1", "location": "location 1" }, "bar": { "name": "name 2", "location": "location 2" } } name和location已知的