私はDBプールのようなデータをハンドラに簡単に渡すために(カスタムモナドを使用する前にfn引数として渡していました)カスタムモナドを使用しています。Haskell Servantは認証ハンドラにカスタムデータを渡します
これは私が私のカスタムモナドを定義した方法です:
newtype Controller a = Controller
{ runController :: ReaderT ServerEnvironment Handler a
} deriving (Functor, Applicative, Monad, MonadReader ServerEnvironment,
MonadError ServantErr, MonadIO)
このServerEnvironment
は、私は私のデータを運ぶために使用するだけのカスタムデータ型です。
問題は、私のAuthHandler
のために、私は特異的に機能を使用する必要があることです。
r -> Controller usr
とI:認証ハンドラとして
r -> Handler usr
、私は次のようになり、私のカスタムハンドラを使用することはできませんまた、ConnectionPool
に署名することができないので、私はConnectionPool
を渡す方法がありません。
ConnPool -> r -> Handler usr
したがって、グローバルIO
状態を使用せずに、サバントの認証ハンドラに余分なデータを渡すにはどうすればよいですか?
...良い点です... – Reygoch
まだ、そうではありません認証ハンドラにカスタムモナドを使用することは可能ですか? – Reygoch
これは、署名 'Controller User'を' authenticate'してから、 'let ctx = runReader(runController authenticate)env:。 EmptyContext'。 – user2141650