7得票1回答
是否有一种方法可以使用Derive和Template Haskell或其他方式推导出Vinyl记录类型的二进制实例?

我一直在尝试使用Vinyl包,它使用类型级别来创建具有字段级别多态和自动提供的镜头的记录结构。这两个功能对我的项目非常有用,前者允许记录结构成为彼此的子类型而不会产生名称冲突,后者极大地简化了嵌套结构的更新。 问题出现在序列化结果结构上。通常,我使用Data.DeriveTH自动派生二进制实...

16得票1回答
如果一个类型可以从另一个类型赋值,那么比较这两个类型是否相同是否可行?

假设我有两个类型: t1 <- [t| (Functor f) => (a -> b) -> f a -> f b |] t2 <- [t| (Int -> Char) -> [Int] -> [Char] |] 在Template ...

7得票1回答
使用模板Haskell时出现多个函数定义问题

假设我有这样的一个数据类型: data Color = Red | Blue | Green 我该如何使用模板哈斯克尔生成这样的函数? myShow Red = ... myShow Blue = ... myShow Green = ... 即,我正在寻找基于模式匹配的函数...

8得票1回答
TemplateHaskell and IO

如果TH使用了副作用,那么有没有适当的方法使其函数更加安全?比如,我想要一个在编译时调用git并生成版本字符串的函数: {-# LANGUAGE TemplateHaskell #-} module Qq where import System.Process import Langua...

20得票3回答
是否可以为应用函子使用括号语法糖?

在 McBride 和 Paterson 的“应用程序编程与效果”中,他们介绍了一些美妙的语法糖,用于提升纯函数: (链接)。 [| f x y z |] 对于 f <$> x <*> y <*> z 我记得在其他地方有人使用li f w x ...

45得票3回答
首选查看Template Haskell生成的代码的方法是什么?

如您所知,模板 Haskell 用于在编译时以编程方式生成各种AST Splices。 然而,Splice 经常是非常不透明的,往往很难辨别 Splice 实际生成了什么。如果您对 Splice 运行 Q Monad,并且 Splice 是良好类型化的,那么您会得到一个可显示的 AST 生成...

7得票1回答
无法找到变量的接口文件声明

我正在尝试使用 GHC 8 和 template-haskell-2.11 将一些代码的执行转移到编译时期。 代码看起来像这样: myThHelper :: FilePath -> Q Exp myThHelper path = runIO (compileThatFile pat...

8得票1回答
在Typed Template Haskell中使用约束

我希望在我的Typed Template Haskell代码片段中使用typeclass约束,但是我无法让它们正常工作:splice内缺少实例。 这里有一个独立的、最小化的版本的代码来演示这个问题。第一个模块定义了一个Typed Template Haskell宏memoryMap,它不对t...

7得票1回答
有没有一种方法可以使用Template Haskell枚举模块中的所有函数?

虽然我可以使用reify来获取大多数其他语法结构的信息,但我找不到任何可以提供有关模块信息的内容。

7得票1回答
如何在模板Haskell中使用getQ和putQ?

我希望能够使用Template Haskell在Q monad中处理状态。根据一些stackoverflow的答案,有一种解决方案是使用unsafePerformIO,但我想尽可能避免使用它。 我在模块Language.Haskell.TH.Syntax中找到了getQ和putQ函数。这些函...