1

2 つの比較的単純な Haskell メソッドが定義されている場所を見つけることができないようです。

についてReaderTです。契約で要求されているように、askandの実装を探しています。localMonadReader

https://hackage.haskell.org/package/mtl-2.1.2/docs/src/Control-Monad-Reader-Class.html#askで私は読みました:

instance Monad m => MonadReader r (ReaderT r m) where
  ask = ReaderT.ask
  local = ReaderT.local

ReaderT.askしかし、それではどちらもReaderT.localどこにも見つかりません。

Hackage を熟読して実装が見つからないのは初めてです。

何か不足していますか?

4

1 に答える 1

1

そのファイルには import ステートメントが含まれています

import qualified Control.Monad.Trans.Reader as ReaderT (ask, local, reader)

so ReaderT.asketc.パッケージからそのモジュールtransformers-0.3.0.0を参照します ( の依存関係のみがリストされていmtl-2.1.2ます。各パッケージのメインの Hackage ページを見ると、これらがどちらのパッケージの最新バージョンでもないことに気付くかもしれません。)

一般に、同じ名前の多くの関数を定義しますが、transformersバージョンは関連する効果を直接実装するトランスフォーマー型でのみ機能し、クラス システムを使用して他のラッピング トランスフォーマーに自動的にリフトできるメソッドを作成します。mtltransformersmtlMonad*

あなたの場合のように、トランスフォーマーを直接実装する場合、使用される特定のメソッドインスタンスmtlは通常、対応するtransformer関数を参照するだけです。

于 2015-07-15T17:48:03.817 に答える