{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeOperators #-} module Elm.Export.WebSocketSubscriber ( renderSubscriber ) where import Elm.Export.Common import Text.PrettyPrint.Leijen.Text renderSubscriber :: RenderM () renderSubscriber = do require "WebSocket" require "Json.Decode exposing (Decoder, decodeString)" require "Result exposing (Result(..))" collectDeclaration . return $ "listen : String -> Decoder a -> (Result String a -> msg) -> Sub msg" <$$> "listen host decoder tagger = " <$$> " WebSocket.listen (\"ws://\" ++ host) (\\str -> decodeString decoder str |> tagger)" <$$> emptyline <$$> "send : String -> (a -> Json.Encode.Value) -> a -> Cmd msg" <$$> "send host encoder value =" <$$> " WebSocket.send (\"ws://\" ++ host) (Json.Encode.encode 0 (encoder value))"