module Data.Hex ( safeConvert , Hex(..) ) where import qualified Data.ByteString as ByteString import qualified Data.ByteString.Base16 as ByteStringBase16 import qualified Data.ByteString.Char8 as ByteStringChar8 import qualified Data.ByteString.Lazy as LazyByteString import qualified Data.Geospatial as Geospatial newtype Hex = Hex ByteString.ByteString safeConvert :: (LazyByteString.ByteString -> Either String Geospatial.GeospatialGeometry) -> Hex -> Either String Geospatial.GeospatialGeometry safeConvert :: (ByteString -> Either String GeospatialGeometry) -> Hex -> Either String GeospatialGeometry safeConvert ByteString -> Either String GeospatialGeometry f (Hex ByteString byteString) = case ByteString -> Either String ByteString ByteStringBase16.decode ByteString byteString of Left String _ -> String -> Either String GeospatialGeometry forall a b. a -> Either a b Left (String -> Either String GeospatialGeometry) -> String -> Either String GeospatialGeometry forall a b. (a -> b) -> a -> b $ String "Invalid hex representation: " String -> String -> String forall a. Semigroup a => a -> a -> a <> ByteString -> String ByteStringChar8.unpack ByteString byteString Right ByteString decoded -> ByteString -> Either String GeospatialGeometry f (ByteString -> Either String GeospatialGeometry) -> ByteString -> Either String GeospatialGeometry forall a b. (a -> b) -> a -> b $ ByteString -> ByteString LazyByteString.fromStrict ByteString decoded