packages feed

incipit-base-0.3.0.0: lib/Incipit/Fractional.hs

-- |Safe overrides of the methods of class 'Fractional'.
module Incipit.Fractional where

import Data.Eq (Eq)
import Data.Maybe (Maybe (Just, Nothing))
import qualified GHC.Real as Real
import GHC.Real (Fractional)

import Incipit.Integral (safeOp)

-- | Fractional division.
(/) ::
  Eq a =>
  Fractional a =>
  a ->
  a ->
  Maybe a
(/) =
  safeOp (Real./)

-- | Reciprocal fraction.
recip ::
  Eq a =>
  Fractional a =>
  a ->
  Maybe a
recip = \case
  0 ->
    Nothing
  a ->
    Just (Real.recip a)