A bit unsatisfactory answer: I don’t think there is a library there that will help you here.
, -
safeIntegerToBoundedIntegral :: (Integral b, Bounded b) => Integer -> Maybe b
safeIntegerToBoundedIntegral = boundedFromInteger (minBound, maxBound)
-- helper function signature lets you avoid `ScopedTypeVariables`
boundedFromInteger :: Integral b => (b,b) -> Integer -> Maybe b
boundedFromInteger (lo,hi) n | toInteger lo <= n && n <= toInteger hi = Just (fromInteger n)
boundedFromInteger _ _ = Nothing
hoogle hayoo, :
integerAsIntegral :: Integral a => Iso' Integer a
integerAsIntegral = iso fromInteger toInteger
integerAsBoundedIntegral :: (Integral a, Bounded a) => Prism' Integer a
integerAsBoundedIntegral = prism toInteger $ \n ->
maybe (Left n) Right $ safeIntegerToBoundedIntegral n
integralAsBoundedIntegral :: (Integral a, Integral b, Bounded b) => Prism' a b
integralAsBoundedIntegral = from integerAsIntegral . integerAsBoundedIntegral
, , , fromIntegral ;
.. a < b → fromIntegral a < fromIntegral b, Integer
Integral, .