Reader monadとReaderTモナドトランスのthe documentationを見ています。* ReaderT Monad Transformerの*の目的は何ですか?
関連の定義は以下のとおりです。
newtype ReaderT k r m a :: forall k. * -> (k -> *) -> k -> *
type Reader r = ReaderT * r Identity
私は*
の定義に何をしているか理解していません。特に私は、IOを基本モナドとし、r
値のクラス制約としてReaderTから新しいモナドを導出しようとしています。
ReaderT(k
)の4番目の入力があり、その位置に*を付けるとReaderがその値で何をしているのかわかりません。
注意'ReaderT'のソースコードは' newtypeReadT rma = ReaderT {runReaderT :: r - > ma} 'です。 'k'は、' ReaderT'の多種多様性を強調するために、Haddockの文書でのみ生成されます( '-XPolyKinds'は定義されているモジュールで有効になっています)。 – Alec
"基本モナドとしてIOを持ち、r値のクラス制約を持つReaderTから新しいモナドを導き出そうとしています" - これは解決するよりも多くの問題を引き起こす可能性があります( 'r' 'Reader'から' IO'にインスタンス化された 'ReaderT'からの新しい型の導出ではありません)なぜこれを行うのが' ReaderT'のポリキンド定義によって妨げられるのか分かりません。 @Alecのように、 'k'パラメータはhaddockのアーチファクトです - 実際は完全に暗黙的です。あなたは' ReaderT ::(* - > *) - > * - > * 'のふりをすることができます確かにそのタイプがあります)。 – user2407038
@ user2407038とnicolasどちらも正しいです。制約は属しており、モナド定義ではなくインスタンス宣言に配置されます。 –