Допустим, у меня есть http-сервер на базе Scotty
scottyServer :: IO ()
scottyServer = do
print ("Starting Server at port " ++ show port)
scotty port routes
routes :: ScottyM()
routes = do get "/service" responseService
get "/users" responseUsers
А потом у меня есть автоматический выключатель, который я хочу сохранить в состоянии CircuitBreakerType
data CircuitBreakerType
= Close {users::[User], error:: Integer}
| Open {users::[User], error:: Integer}
| HalfOpen {users::[User], error:: Integer}
deriving (Show)
responseUsers :: ActionM ()
responseUsers = do users <- liftAndCatchIO $ searchAllCassandraUsersCB $ Close [] 0
json (show users)
searchAllCassandraUsersCB :: CircuitBreakerType -> IO CircuitBreakerType
searchAllCassandraUsersCB (Close users errors)= do result <- selectAllCassandraUserCB $ Close users errors
return result
Используя Haskell, как я могу сохранить состояние CircuitBreakerType между запросом / ответом Scootty
Все примеры конечного автомата, которые я делал, передавали состояние в монаде ввода-вывода друг другу, но с Http-сервером я не представляю, как сохранить состояние. Надеемся, что ничего не связано с постоянством в базе данных, так как производительность будет плохой.
Привет