Способ «повторной попытки» зависит от протокола. Если вы буквально хотите повторить попытку с самого начала, когда происходит сбой соединения, вы можете просто сделать
{-# LANGUAGE ScopedTypeVariables #-}
import Control.Exception (catch)
-- ...
-- the rest of your code
-- ...
retryOnFailure ws = runSecureClient "ws.kraken.com" 443 "/" ws
`catch` (\e ->
if e == ConnectionClosed
then retryOnFailure ws
else return ())
, но учтите, что это «глупая» повторная попытка, поскольку она буквально начнется заново, еслиудаленное соединение неожиданно закрывается (ожидаемое закрытие приведет к завершению программы). Если вы хотите поддерживать какое-либо состояние или что-то в этом роде, вам придется выяснить, как это сделать для любого протокола, которым вы следуете, но этого должно быть достаточно, если вы просто слушаете данные через какое-то ненадежное соединение.