haskell - 这是 Template Haskell 的预期行为吗?

标签 haskell template-haskell haskell-lens

谁能告诉为什么这段代码不能编译

data A = A {
  _b  :: B
}
makeLenses ''A

type B = String

带消息
Not in scope: type constructor or class B

这确实:
type B = String

data A = A {
  _b  :: B
}
makeLenses ''A

没有 makeLenses一切都编译得很好。

为什么我不能在 makeLenses 之后有类型同义词声明?

最佳答案

范围内只能访问模板 haskell 调用之前的定义。

请参阅有关同一主题的上一个问题:Haskell: Template Haskell and the scope .

关于haskell - 这是 Template Haskell 的预期行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30274027/

相关文章:

haskell - 有没有办法使用 Template Haskell 枚举模块中的所有函数?

haskell mtl/transformers 相当于镜头的缩放状态

haskell - 自动生成镜头中的类型类的文档在哪里?

haskell - 在 Haskell 中读取长数据结构

haskell - 如何统一c和GHC.Exts.Item t c?

haskell - 模板 Haskell : How to extract the number of arguments of a function?

haskell - 如何将镜头转换到作为多态函数的记录字段上?

haskell - 如何映射带有两个参数(而不是一个)的函数?

haskell - 如何将 log-warper 与 Servant 一起使用?

haskell - 如何不仅允许在反引号中嵌入值而且允许嵌入任意的 Haskell 表达式