packages feed

morley-1.8.0: src/Util/Num.hs

-- SPDX-FileCopyrightText: 2020 Tocqueville Group
--
-- SPDX-License-Identifier: LicenseRef-MIT-TQ

-- | Utilities for numbers.
module Util.Num
  ( fromIntegralChecked
  ) where

-- | Convert between integral types, checking for overflows/underflows.
fromIntegralChecked :: (Integral a, Integral b) => a -> Either Text b
fromIntegralChecked a =
  let b = fromIntegral a
  in if toInteger a == toInteger b
    then Right b
    else Left
      if toInteger a > toInteger b
        then "Numeric overflow"
        else "Numeric underflow"