diff --git a/hw-ip.cabal b/hw-ip.cabal index 236e3b2..c1ce900 100644 --- a/hw-ip.cabal +++ b/hw-ip.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: hw-ip -version: 2.3.4.0 +version: 2.3.4.1 license: BSD-3-Clause license-file: LICENSE copyright: 2018-2019 John Ky, David Turnbull, Jian Wan diff --git a/src/HaskellWorks/Data/Network/Ip/Ip.hs b/src/HaskellWorks/Data/Network/Ip/Ip.hs index a3ab2ea..5c8cd40 100644 --- a/src/HaskellWorks/Data/Network/Ip/Ip.hs +++ b/src/HaskellWorks/Data/Network/Ip/Ip.hs @@ -21,6 +21,7 @@ import Data.Word import GHC.Generics import HaskellWorks.Data.Bits.BitWise import HaskellWorks.Data.Network.Ip.Range (Range (..)) +import HaskellWorks.Data.Network.Ip.SafeEnum import HaskellWorks.Data.Network.Ip.Validity import Text.Read @@ -60,6 +61,13 @@ instance Read IpAddress where Just ip -> [(IpAddressV6 ip, "")] Nothing -> [] +instance SafeEnum IpAddress where + safePred (IpAddressV4 ip) = IpAddressV4 <$> safePred ip + safePred (IpAddressV6 ip) = IpAddressV6 <$> safePred ip + + safeSucc (IpAddressV4 ip) = IpAddressV4 <$> safeSucc ip + safeSucc (IpAddressV6 ip) = IpAddressV6 <$> safeSucc ip + isCanonical :: IpBlock v -> Bool isCanonical (IpBlockV4 b) = V4.isCanonical b isCanonical (IpBlockV6 b) = V6.isCanonical b