私は単純な http サーバーを実装していますが、応答をグローバルな状態に依存させたいと考えています。たとえば、同じクライアントからリクエスト「get_settings」を初めて取得した場合、大きな設定 json を送信し、2 回目は「変更されていない」http 応答を送信します。
そんな感じ
import Network.Simple.TCP
main = withSocketsDo $ do
let settings_state = 0 -- flag for settings response
serve (Host "127.0.0.1") "23980" $ \(conn_sock, remote_addr) -> do
putStrLn $ "TCP connection established from " ++ show remote_addr
(Just inp) <- recv conn_sock 1024
send conn_sock (process inp settings_state)
process :: B.ByteString -> Int -> B.ByteString
process inp flag
| flag == 0 = ... -- return full response and change global flag
| otherwise = ... -- return 'Not-modified'
問題は、どうすればそれを実装できるかということです。そして、モナドトランスフォーマーなどを使わずに、手動でできるだけ簡単にしたいと思います。コードは醜くシンプルにしましょう。ありがとう