diff --git a/ping.cabal b/ping.cabal
--- a/ping.cabal
+++ b/ping.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name: ping
-version: 0.1.0.3
+version: 0.1.0.4
 synopsis: icmp echo requests
 description:
   This library provides functions that have similar behavior as the
@@ -51,7 +51,7 @@
     , base >= 4.11.1 && <5
     , ip >= 1.4
     , cpu >= 0.1.2
-    , posix-api >= 0.3 && < 0.4
+    , posix-api >= 0.4 && < 0.5
     , primitive >= 0.7 && < 0.8
     , primitive-addr >= 0.1 && < 0.2
     , primitive-containers >= 0.3.1
diff --git a/src/Network/Icmp/Ping/Hosts.hs b/src/Network/Icmp/Ping/Hosts.hs
--- a/src/Network/Icmp/Ping/Hosts.hs
+++ b/src/Network/Icmp/Ping/Hosts.hs
@@ -1,10 +1,11 @@
 {-# language BangPatterns #-}
 {-# language BinaryLiterals #-}
+{-# language EmptyCase #-}
 {-# language LambdaCase #-}
 {-# language MagicHash #-}
+{-# language PatternSynonyms #-}
 {-# language ScopedTypeVariables #-}
 {-# language UnboxedTuples #-}
-{-# language EmptyCase #-}
 
 module Network.Icmp.Ping.Hosts
   ( hosts
@@ -29,7 +30,6 @@
 import Foreign.C.Types (CSize(..))
 import GHC.Clock (getMonotonicTimeNSec)
 import GHC.Exts (RealWorld)
-import GHC.IO (IO(..))
 import Net.Types (IPv4(..),IPv4Range)
 import Network.Icmp.Common (IcmpException(..))
 import Network.Icmp.Marshal (peekIcmpHeaderPayload,peekIcmpHeaderType)
@@ -46,8 +46,8 @@
 import qualified Data.Primitive as PM
 import qualified Data.Set.Unboxed as SU
 import qualified Linux.Socket as SCK
-import qualified Posix.Socket as SCK
 import qualified Net.IPv4 as IPv4
+import qualified Posix.Socket as SCK
 
 fullPacketSize :: Int
 fullPacketSize = sizeOfIcmpHeader + 4
@@ -120,7 +120,7 @@
   -> SU.Set IPv4 -- ^ Hosts
   -> IO (Either IcmpException (MUU.Map IPv4 Word64)) -- ^ Elapsed nanoseconds for responding hosts
 hosts !pause !theHosts = do
-  mask $ \restore -> SCK.uninterruptibleSocket SCK.internet SCK.datagram SCK.icmp >>= \case
+  mask $ \restore -> SCK.uninterruptibleSocket SCK.Internet SCK.datagram SCK.icmp >>= \case
     Left (Errno e) -> pure (Left (IcmpExceptionSocket e))
     Right sock -> do
       durations <- restore
diff --git a/src/Network/Icmp/Ping/Multihosts.hs b/src/Network/Icmp/Ping/Multihosts.hs
--- a/src/Network/Icmp/Ping/Multihosts.hs
+++ b/src/Network/Icmp/Ping/Multihosts.hs
@@ -1,10 +1,11 @@
 {-# language BangPatterns #-}
 {-# language BinaryLiterals #-}
+{-# language EmptyCase #-}
 {-# language LambdaCase #-}
 {-# language MagicHash #-}
+{-# language PatternSynonyms #-}
 {-# language ScopedTypeVariables #-}
 {-# language UnboxedTuples #-}
-{-# language EmptyCase #-}
 
 module Network.Icmp.Ping.Multihosts
   ( multihosts
@@ -23,7 +24,6 @@
 import Foreign.C.Types (CSize(..))
 import GHC.Clock (getMonotonicTimeNSec)
 import GHC.Exts (RealWorld)
-import GHC.IO (IO(..))
 import Net.Types (IPv4(..),IPv4Range)
 import Network.Icmp.Common (IcmpException(..))
 import Network.Icmp.Marshal (peekIcmpHeaderPayload)
@@ -121,7 +121,7 @@
 -- over the course of the loop's execution.
 multihosts !pause !successPause' !totalPings !cutoff !theHosts
   | pause <= 0 || totalPings <= 0 || cutoff <= 0 || SU.null theHosts = pure (Right mempty)
-  | otherwise = let !successPause = max successPause' 0 in mask $ \restore -> SCK.uninterruptibleSocket SCK.internet SCK.datagram SCK.icmp >>= \case
+  | otherwise = let !successPause = max successPause' 0 in mask $ \restore -> SCK.uninterruptibleSocket SCK.Internet SCK.datagram SCK.icmp >>= \case
       Left (Errno e) -> pure (Left (IcmpExceptionSocket e))
       Right sock -> do
         !now0 <- getMonotonicTimeNSec
diff --git a/src/Network/Icmp/Ping/Single.hs b/src/Network/Icmp/Ping/Single.hs
--- a/src/Network/Icmp/Ping/Single.hs
+++ b/src/Network/Icmp/Ping/Single.hs
@@ -1,9 +1,10 @@
 {-# language BangPatterns #-}
+{-# language EmptyCase #-}
 {-# language LambdaCase #-}
 {-# language MagicHash #-}
+{-# language PatternSynonyms #-}
 {-# language ScopedTypeVariables #-}
 {-# language UnboxedTuples #-}
-{-# language EmptyCase #-}
 
 module Network.Icmp.Ping.Single
   ( host
@@ -18,7 +19,6 @@
 import Foreign.C.Error (Errno(..),eAGAIN,eWOULDBLOCK,eACCES)
 import Foreign.C.Types (CSize(..))
 import GHC.Clock (getMonotonicTimeNSec)
-import GHC.IO (IO(..))
 import Net.Types (IPv4(..))
 import Network.Icmp.Common (IcmpException(..))
 import Network.Icmp.Marshal (peekIcmpHeaderPayload,peekIcmpHeaderType)
@@ -49,7 +49,7 @@
     -- has a fancy way to display the failure. The user will likely need to
     -- rerun the program with CAP_NET_RAW or as root or after adjusting
     -- net.ipv4.ping_group_range with sysctl.
-    mask $ \restore -> SCK.uninterruptibleSocket SCK.internet SCK.datagram SCK.icmp >>= \case
+    mask $ \restore -> SCK.uninterruptibleSocket SCK.Internet SCK.datagram SCK.icmp >>= \case
       Left (Errno e) -> pure (Left (IcmpExceptionSocket e))
       Right sock -> do
         elapsed <- restore
