Tôi muốn tạo ứng dụng Happstack với nhiều quyền truy cập vào cơ sở dữ liệu. Tôi nghĩ rằng một Monad Stack với IO ở phía dưới và một cơ sở dữ liệu Write-như đơn nguyên trên đầu trang (với văn bản ghi ở giữa) sẽ làm việc để có một chức năng rõ ràng trong từng truy cập, ví dụ:Làm thế nào để tạo một ngăn xếp cơ sở dữ liệu trong Happstack?
itemsRequest :: ServerConfig -> ServerPart Response
itemsRequest cf = dir "items" $ do
methodM [GET,HEAD]
liftIO $ noticeM (scLogger cf) "sended job list"
items <- runDBMonad (scDBConnString cf) $ getItemLists
case items of
(Right xs) -> ok $ toResponse $ show xs
(Left err) -> internalServerError $ toResponse $ show err
Với:
getItemList :: MyDBMonad (Error [Item])
getItemList = do
-- etc...
Nhưng tôi có chút kiến thức về Monad và Monad Transformers (tôi thấy câu hỏi này như một bài tập để tìm hiểu về nó), và tôi không có ý tưởng làm thế nào để bắt đầu quá trình tạo ra các cơ sở dữ liệu đơn nguyên, làm thế nào để nâng IO từ happstack đến Database Stack, ... vv.
Tôi đã thử sử dụng 'unsafePerformIO' để thực hiện IO trong đó. như Happstack sử dụng một sự kết hợp hoàn toàn, có lẽ đó là cách duy nhất của bạn để làm IO. – Nybble
@Wu Xingbo, Nó có thể làm IO trên happstack với liftIO, nhưng tôi không biết ai để vượt qua để ngăn xếp monad khác. – Zhen