我知道GHC API授予我作为库的用途,访问编译器功能,例如分析,运行和转换Haskell代码.将GHC作为包导入的Haskell程序在编译时将包含其自己的(部分)GHC副本,因此即使在没有安装GHC的系统上也可执行.
但是,如果我不想将GHC包含在程序中,而是使用系统上安装的GHC,该怎么办?
因此,当程序被赋予Haskell代码时,它将使用系统的GHC来理解它,并在必要时导入所有的包和库(GHCi上可用的那些).
我知道对于派生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?
我正在尝试使用Html.App.beginnerProgram,我想onKeyDown在<body>元素中添加事件处理程序(等).
不幸的是,我投入的一切都view变成了孩子们<body>.返回Html.body从view不会做的伎俩.这段代码:
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>元素的控制权?