Печать объекта, проанализированного с помощью Aeson, ничего не делает - PullRequest
0 голосов
/ 13 мая 2018

Относительно плохо знаком с Haskell и не может понять, почему не работает следующее.

Я анализирую объект из запроса веб-сокета, используя Aeson, и пытаюсь его распечатать.

Все отпечатки дотот, о котором идет речь, работает, но этот никогда не печатает.Я также попробовал варианты с fromMaybe и предоставлением значения по умолчанию, но это тоже не помогло.

Команда - это просто объект записи, содержащий несколько (может быть, Map) различных объектов.Все они имеют экземпляры FromJSON и т. Д.

Обычно присутствует только одна из карт, но я собираюсь выполнить некоторое накопление позже, что может означать, что несколько объектов были переданы одновременно.

data Command = Command { _articles :: Maybe ArticleMapMaybe
                       , _clients :: Maybe ClientMapMaybe
                       , _orders :: Maybe OrderMapMaybe } deriving (Show, Eq, Generic)

instance FromJSON Command
instance ToJSON Command


-- take a request from the queue and service it
wsApplication :: MVar ServerState
              -> WS.ServerApp
wsApplication state pending = do
  putStrLn "Processing request"
  let path = WS.requestPath (WS.pendingRequest pending)
  putStrLn $ "path: " ++ (BS.unpack $ BS.fromStrict path)

  conn <- WS.acceptRequest pending
  query <- WS.receiveData conn
  putStrLn $ "query: " ++ (T.unpack query)

  let command = (A.decode $ BS.pack . T.unpack $ query) :: Maybe Command
  print command -- this doesn't do anything!

  let client = (query, conn) :: SocketClient
  modifyMVar_ state $ return . addClient client

  serverState <- readMVar state
  putStrLn $ "connected clients: " ++ (show . length $ serverState ^. connectedClients)
  perform state client command

Результат:

Processing request
path: /api
query: {"_clients":null,"_orders":null,"_articles":{"dsa141":{"_notes":"ewq","_articleName":"Stellaris: Apocalypse"}}}
Processing request
path: /api

Если я удалю строку «команда печати», будут напечатаны также следующие строки («подключенные клиенты»).Это означает, что при печати команды функциональные блоки ..?Очевидно, что результат синтаксического анализа не зависит от MVars или чего-либо в этом роде (а «подключенные клиенты» печатают, что означает, что состояние сервера MVar не заблокировано ...).

...