gpt4 book ai didi

haskell - 模板 Haskell 类型引用问题

转载 作者:行者123 更新时间:2023-12-04 14:04:56 26 4
gpt4 key购买 nike

TemplateHaskell 引用记录了两个引号 ( '' ) 作为获取类型名称的方式:

> ''String
GHC.Base.String

这适用于这种类型(名称)。但是,我找不到一种方法让它很好用,例如 Maybe String :
> ''Maybe String -- interprets String as a data constructor
> ''Maybe ''String -- wants to apply ''String to the Name type

我知道我可以通过使用 [t| Maybe String |] 来解决问题,但这是在 Q monad 中,并且需要类型更改,我认为只有在拼接时才在相应的时刻进行类型检查。

我也可以先定义一个类型别名 type MaybeString = Maybe String ,然后使用 ''MaybeString ,但这也很麻烦。

通过 '' 直接获得我想要的任何方式引述?

最佳答案

''用于引用名称,而不是类型。 Maybe是一个名字,Maybe String不是。因此,在引用该名称之前,您必须通过定义类型别名来为您的类型命名,这并不奇怪。
[t| |]另一方面,引号类型。注意这里的区别。

Prelude> :t ''String
''String :: Language.Haskell.TH.Syntax.Name
Prelude> :t [t| String |]
[t| String |]
:: Language.Haskell.TH.Syntax.Q Language.Haskell.TH.Syntax.Type

所以恐怕你不能使用 ''对于你想要做的事情。

关于haskell - 模板 Haskell 类型引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com