小编Min*_*oru的帖子

连接到系统GHC

我知道GHC API授予我作为库的用途,访问编译器功能,例如分析,运行和转换Haskell代码.将GHC作为包导入的Haskell程序在编译时将包含其自己的(部分)GHC副本,因此即使在没有安装GHC的系统上也可执行.

但是,如果我不想将GHC包含在程序中,而是使用系统上安装的GHC,该怎么办?

因此,当程序被赋予Haskell代码时,它将使用系统的GHC来理解它,并在必要时导入所有的包和库(GHCi上可用的那些).

  1. GHC(安装在不同系统上)是否提供这样的API?
  2. 如果是这样,系统文档资源是否也提供类似的东西?(我可以从Haskell代码中选择一个函数,然后查看类型签名,使用信息等.)

haskell ghc

12
推荐指数
1
解决办法
230
查看次数

是否可以列出导出Generic的记录数据类型中的字段名称和类型?

我知道对于派生Data.Data的数据类型,constrFields给出了字段名称列表.看一下GHC.Generics文档,我认为同样应该也是可能的Generic.(但很难自己弄清楚如何去做).

更具体地说,我正在寻找两件事:

列出所有记录字段

......在Haskell程序中.我知道aeson能够自动推断出任何记录数据类型的JSON表示Generic,但是阅读它的源代码只能证实我在这里一无所知.根据我的猜测,aeson必须能够从记录数据类型获取所有字段名称(如Strings或ByteStrings),以及它们的类型(具有类似于TypeRepData.Typeable 的类型,或者实例Eq:任何可以用于case块模式匹配的东西都可以.

我隐约假定创建类和实例M1,:*:等等.是这样的,但我不能使它的类型检查.

检查记录选择器

获取它所属的记录数据类型,记录字段名称(as String)等.

例如,给定

data Record = Record
    { recordId :: Int32
    , recordName :: ByteString
    } deriving Generic
Run Code Online (Sandbox Code Playgroud)

功能magic就像

typeOf (Record {}) == typeOf (magic recordId)
Run Code Online (Sandbox Code Playgroud)

这些是可能的deriving Generic,还是我必须诉诸模板Haskell?

generics haskell type-systems aeson

12
推荐指数
1
解决办法
1487
查看次数

如何在Elm中的body元素中添加事件处理程序?

我正在尝试使用Html.App.beginnerProgram,我想onKeyDown<body>元素中添加事件处理程序(等).

不幸的是,我投入的一切都view变成了孩子们<body>.返回Html.bodyview不会做的伎俩.这段代码:

main = beginnerProgram { model = 0, view = view, update = update }

view model = body [] []

update _ model = model
Run Code Online (Sandbox Code Playgroud)

会产生:

<html>
    <head>...</head>
    <body>
        <body></body>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

那么,我如何获得<body>元素的控制权?

elm

5
推荐指数
1
解决办法
942
查看次数

标签 统计

haskell ×2

aeson ×1

elm ×1

generics ×1

ghc ×1

type-systems ×1