私はMonadトランスフォーマーで初めてプレーしています。これはシンプルなハックスタックアプリです。ReaderTを使用してHappstackのServerPartレスポンスを変換する方法は?
{-# LANGUAGE OverloadedStrings #-}
import Happstack.Lite
import qualified Data.ByteString.Lazy.Char8 as L
main :: IO()
main = do
serve Nothing hello
hello :: ServerPart Response
hello = do
ok $ toResponse ("Hello" :: L.ByteString)
私はそれがReaderT
を使用して、いくつかのグローバル設定データを読み取ることができるようにハローを変更できるようにしたいと思います。ちょうど設定はどのように私はそれがask
を使用することができますハロー変更できます
type NewMonad = ReaderT L.ByteString (ServerPartT IO)
runNewMonad :: NewMonad a -> L.ByteString -> ServerPart a
runNewMonad k c = runReaderT k c
それをシンプルに保つために、文字列であるとしましょうか?どのような種類があるのか分かりません。 ok
はServerPart Response
を返すので、NewMonad Response
は正しくありません。
serve
が機能するようにメインを変更するにはどうすればよいですか? ServerPart Response
が必要です。
ありがとう! 2番目の方法を試してみます。このエラーが発生しました: 'ok ' –
' liftの使用に起因する(Happstack.Server.Internal.Monads.FilterMonadレスポンス(ReaderT L.ByteString(ServerPartT IO))) のインスタンスがありません。 「OK」はうまくいくが、「ok」だけではない。 –
happstack-server 6.5.3のドキュメント['FilterMonad'インスタンスのリスト](http://hackage.haskell.org/packages/archive/happstack-server/6.5.3/doc/html/Happstack-Server-Internal-Monads) .html#t:FilterMonad);おそらくあなたは古いバージョンを使用していますか?インスタンスは4日前に追加されたようです(http://happstack.blogspot.com/2012/01/ann-happstack-server-651.html)。 – ehird