packages feed

ghc-internal-9.1002.0: src/GHC/Internal/Real.hs-boot

{-# LANGUAGE NoImplicitPrelude #-}

module GHC.Internal.Real (Integral (..)) where

-- For why this file exists
-- See Note [Semigroup stimes cycle] in GHC.Internal.Base

import GHC.Classes (Ord)
import GHC.Num.Integer (Integer)

import {-# SOURCE #-} GHC.Internal.Num (Num)
import {-# SOURCE #-} GHC.Internal.Enum (Enum)

data Ratio a
type Rational = Ratio Integer

class (Num a, Ord a) => Real a where
    toRational          :: a -> Rational

class (Real a, Enum a) => Integral a where
    quot                :: a -> a -> a
    rem                 :: a -> a -> a
    div                 :: a -> a -> a
    mod                 :: a -> a -> a
    quotRem             :: a -> a -> (a,a)
    divMod              :: a -> a -> (a,a)
    toInteger           :: a -> Integer

    n `quot` d          =  q  where (q,_) = quotRem n d
    n `rem` d           =  r  where (_,r) = quotRem n d
    n `div` d           =  q  where (q,_) = divMod n d
    n `mod` d           =  r  where (_,r) = divMod n d

    divMod n d          =  if signum r == negate (signum d) then (q-1, r+d) else qr
                           where qr@(q,r) = quotRem n d