0
Worker
のモナドにファイルにログ文字列を書き込む機能があるとします。ログファイルのパスはReaderT
を通じて利用できる労働者Config
の一部です:newtypeラップされたReaderのインスタンスで尋ねる
data Config = Config { logFile :: FilePath }
newtype Worker a = Worker { runWorker :: ReaderT Config IO a }
deriving (Functor, Applicative, Monad, MonadIO)
class (Monad m, MonadIO m) => HasLogging m where
log :: String -> m()
これはもちろん、多くの点で最適ではありません。私がお聞きしたい質問は最高の定義する方法である:
instance HasLogging Worker where
log s = do
...
私の周り私の頭をラップすることができない事がコンフィグを取得するためにask
を呼び出す方法です。 Worker
自体はask
を公開していません。しかし、これは単なるニュータイプのラッパーなので、このインスタンスをあまり騒がすことなく書くことが可能でなければなりません。またはそうでないかもしれません?
を取得するために
にそれを適用することができますか?あなたはGeneralizedNewtypeDerivingが必要ですが、あなたは既にMonadIOのためにそれを持っていると思います。そして輸入Control.Monad.Reader – Michael
良い点。この場合、私は手で書き込む方法を知りたがっていました。それは簡単だと分かっていたが、何とか迷ってしまった。 – user2847643