module Network.GDAX.Feed where import Control.Monad.Catch import qualified Data.Aeson as Aeson import qualified Data.Text as T import Network.GDAX.Exceptions import Network.GDAX.Types.Feed import Network.WebSockets defaultClient :: Subscriptions -> (GdaxMessage -> IO b) -> Connection -> IO b defaultClient subs handler conn = do sendTextData conn (Aeson.encode (Subscribe subs)) loop where loop = do res <- receiveData conn let asSum = Aeson.eitherDecode res :: Either String GdaxMessage case asSum of Left er -> throwM $ MalformedGdaxResponse $ T.pack er Right v -> handler v