6

TemplateHaskellの引用符''は、タイプの名前を取得する方法として2つの引用符()を文書化します。

> ''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モナドにあり、タイプの変更が必要です。また、スプライスされた場合にのみ、それぞれの時点でタイプチェックされないと思います。

type MaybeString = Maybe String最初に型エイリアスを定義し、次にを使用して回避することもできます''MaybeStringが、これも面倒です。

''見積もりから直接欲しいものを手に入れる方法はありますか?

4

2 に答える 2

6

''タイプではなく、名前を引用するために使用されます。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

ですから''、あなたがやろうとしていることに使うことはできないのではないかと思います。

于 2011-09-20T17:34:26.753 に答える
4

私はあなたが探しているものは次のとおりだと思います:

ConT ''Maybe `AppT` ConT ''String
于 2011-09-20T19:30:06.897 に答える