模板 Haskell 解析类型别名
Template Haskell resolve type aliases
我正在使用模板 Haskell 生成有关类型的数据。出于多种原因,我需要将要使用的类型“规范化”。所以它不应该是 alias/synonym 类型。我真的不想禁止在构造中使用类型别名,因为使用的某些类型可能会变得很大。
所以现在我遇到了一个问题,当用户指定一个类型时,它与我期望的类型不匹配。例如,如果我有这个定义:
data MyData a = MyData Int
type Foo = MyData String Int Bool
serializeMyData :: TH.Type -> TH.Q [TH.Dec]
serializeMyData ty = ..
type Foo = MyData Int
后来我这样称呼它 serializeMyData
:
$(serializeMyData =<< [t| Foo |] )
然后在serializeMyData
中会找到一个ConT Foo
。这是正确的,因为用户指定了类型别名。但是对我来说没用。
所以我的问题是如何解析类型别名?
感谢任何帮助!
函数resolveTypeSynonyms :: TH.Type -> Q TH.Type
can be found in the library th-abstraction.
我正在使用模板 Haskell 生成有关类型的数据。出于多种原因,我需要将要使用的类型“规范化”。所以它不应该是 alias/synonym 类型。我真的不想禁止在构造中使用类型别名,因为使用的某些类型可能会变得很大。
所以现在我遇到了一个问题,当用户指定一个类型时,它与我期望的类型不匹配。例如,如果我有这个定义:
data MyData a = MyData Int
type Foo = MyData String Int Bool
serializeMyData :: TH.Type -> TH.Q [TH.Dec]
serializeMyData ty = ..
type Foo = MyData Int
后来我这样称呼它 serializeMyData
:
$(serializeMyData =<< [t| Foo |] )
然后在serializeMyData
中会找到一个ConT Foo
。这是正确的,因为用户指定了类型别名。但是对我来说没用。
所以我的问题是如何解析类型别名?
感谢任何帮助!
函数resolveTypeSynonyms :: TH.Type -> Q TH.Type
can be found in the library th-abstraction.