A=7%      !"#$NoneHM>The application to run for the duration of a connected socket.An IO action to run for the duration of the socket's lifetime. If this action terminates, the connection will be closed. You will likely want to loop % and block as appropriate with .>An action to execute when the connection is closed, either by + terminating, or the client disconnecting.:An opaque data type representing an open Engine.IO server.[A dictionary of functions that Engine.IO needs in order to provide communication channels. Retrieve the &G of query parameters in the request path to their zero-or-more values.Send a response with the given status code, content type and body. This should also terminate the web request entirely, such that further actions in m have no effect. Run a ' against the request body. vGet the request method of the current request. The request method should be in uppercase for standard methods (e.g., GET). 9Upgrade the current connection to run a WebSocket action. A connected Engine.IO session.]The type of unique Engine.IO sessions. This is currently a base64-encoded random identifier.4The possible types of transports Engine.IO supports.HTML 5 websockets.XHR long polling.A  is a stream of 0-or-more s.The contents attached to a packet. Engine.IO makes a clear distinction between binary data and text data. Clients will receive binary data as a Javascript  ArrayBuffer , where as %s will be received as UTF-8 strings.A single Engine.IO packet.0The possible packet types, as mentioned in the 0https://github.com/Automattic/engine.io-protocol Engine.IO protocol documentationParse bytes as an ; assuming the packet contents extends to the end-of-input.(Parse a 3, nested another parser for the body of the packet. Encode a  to a )s. The first argument determines whether or not binary is supported - if not, binary data will be base 64 encoded.Parse a stream of bytes into a . Encode a  to a ) . As with Q, the first argument determines whether or not binary transmission is supported.Attempt to parse a ! from its textual representation.CReceive data from the client, blocking if the input queue is empty. :Send a packet to the client. This is a non-blocking write.!!P initializes a new Engine.IO server. You can later serve this session by using #."Retrieve a list of all# currently open Engine.IO sessions.#xBuild the necessary handler for Engine.IO. The result of this function is a computation that you should serve under the  engine.io path.#o takes a function as an argument that is called every time a new session is created. This function runs in the m monad, so you have access to initial web request, which may be useful for performing authentication or collecting cookies. This function then returns a  ServerAppL, describing the main loop and an action to perform on socket disconnection.$ Create a new *J action to read the socket's raw incoming communications. The result of this call is iteslf an STM action, which will called will return the next unread incoming packet (or block). This provides you with a separate channel to monitor incoming communications. This may useful to monitor to determine if the socket has activity.sThis is a fairly low level operation, so you will receive *all* packets - including pings and other control codes.P+,-./01234567 8 9:;<=>?@ABCDEFGHIJ(OIf true, all bytes can be used. Otherwise, the packet will be base 64 encoded.OIf true, all bytes can be used. Otherwise, the packet will be base 64 encoded. !"#KLMNOP$QRST%  !"#$&!#    "$%+,-./01432567 8 9:;<=>?@AHGFEDCBIJ( !"#KLMNOP$QRSTU      !"#$%&'()*+,-./01233456789:;<= >?@ABBCDEFGHIJKLMNOPQRSTUVWXYengine-io-1.2.6Network.EngineIO SocketAppsaAppsaOnDisconnectEngineIO ServerAPIsrvGetQueryParamssrvTerminateWithResponsesrvParseRequestBodysrvGetRequestMethodsrvRunWebSocketSocketsocketIdSocketId TransportType WebsocketPollingPayload PacketContent TextPacket BinaryPacketPacket PacketType parsePacket encodePacket parsePayload encodePayloadparseTransportTypereceivesend initializegetOpenSocketshandler dupRawReaderbase Control.Monadforeverunordered-containers-0.2.5.1Data.HashMap.BaseHashMapattoparsec-0.13.0.0#Data.Attoparsec.ByteString.InternalParser parsePacket'bytestring-0.10.4.0 Data.ByteString.Builder.InternalBuilderghc-prim GHC.TypesIO OpenMessage omSocketId omUpgrades omPingTimeoutomPingInterval EngineIOErrorSessionIdUnknownTransportUnknown BadRequesteioOpenSessionseioRngsocketTransportsocketIncomingMessagessocketOutgoingMessagessocketRawIncomingBroadcast TransporttransIntransOut transTypeNoopUpgradeMessagePongPingCloseOpenpacketTypeToIndexpacketTypeFromIndex freshSessionupgrade handlePoll writeBytes newSocketId serveError$fToJSONOpenMessage $fOrdSocket $fEqSocket$fToJSONTransportType