reflex-backend-socket-0.2.0.0: src/Reflex/Backend/Socket/Error.hs
{-|
Module : Reflex.Backend.Socket.Error
Copyright : (c) 2018-2019, Commonwealth Scientific and Industrial Research Organisation
License : BSD3
Maintainer : dave.laing.80@gmail.com, jack.kelly@data61.csiro.au
Stability : experimental
Portability : non-portable
-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
module Reflex.Backend.Socket.Error
( SetupError(..)
-- * Prisms
-- ** 'SetupError'
, _GetAddrInfoError
, _UseAddrInfoError
) where
import Control.Exception (IOException)
import Data.List.NonEmpty (NonEmpty)
import GHC.Generics (Generic)
import Network.Socket (AddrInfo)
import Control.Lens.TH (makePrisms)
-- | If a "socket setup" fails ('Reflex.Backend.Socket.Accept.accept'
-- or 'Reflex.Backend.Socket.Connect.connect'), you'll inspect one of
-- these to find out why.
data SetupError
= GetAddrInfoError IOException
-- ^ Call to 'Network.Socket.getAddrInfo' failed.
| UseAddrInfoError (NonEmpty (AddrInfo, IOException))
-- ^ We failed to set up a socket with any 'AddrInfo' we were
-- given, and here are the corresponding exceptions each time we
-- tried. For 'Reflex.Backend.Socket.Accept.accept', this means
-- either 'Network.Socket.bind' or 'Network.Socket.listen' failed,
-- and for 'Reflex.Backend.Socket.Connect.connect', this means
-- 'Network.Socket.Connect' failed.
deriving (Eq, Generic, Show)
$(makePrisms ''SetupError)