shithub: MicroHs

ref: d65bc804563c41d1be4a6620ccde395555cb6da9
dir: /lib/Data/Double.hs/

View raw version
-- Copyright 2023 Lennart Augustsson
-- See LICENSE file for full license.
module Data.Double(module Data.Double, Double) where
import Primitives
import Control.Error
import Data.Bool_Type
import Data.Eq
import Data.Ord
import Data.Num
import Text.Show

instance Num Double where
  (+)  = primDoubleAdd
  (-)  = primDoubleSub
  (*)  = primDoubleMul
  abs x = if x < 0.0 then negate x else x
  signum x =
    case compare x 0.0 of
      LT -> -1.0
      EQ ->  0.0
      GT ->  1.0
  fromInt x = error "Double.fromInt unimplemented"

{-
-- Arithmetic
(+) :: Double -> Double -> Double
(+)  = primDoubleAdd
(-) :: Double -> Double -> Double
(-)  = primDoubleSub
(*) :: Double -> Double -> Double
(*)  = primDoubleMul
-}

(/) :: Double -> Double -> Double
(/) = primDoubleDiv

{-
negate :: Double -> Double
negate x = 0.0 - x

addDouble :: Double -> Double -> Double
addDouble = (+)
subDouble :: Double -> Double -> Double
subDouble = (-)
mulDouble :: Double -> Double -> Double
mulDouble = (*)
divDouble :: Double -> Double -> Double
divDouble = (/)
-}

--------------------------------

--infix 4 ==,/=
--infix 4 <,<=,>,>=

{-
-- Comparison
(==) :: Double -> Double -> Bool
(==) = primDoubleEQ
(/=) :: Double -> Double -> Bool
(/=) = primDoubleNE
-}

instance Eq Double where
  (==) = primDoubleEQ
  (/=) = primDoubleNE

{-
eqDouble :: Double -> Double -> Bool
eqDouble = (==)
neqDouble :: Double -> Double -> Bool
neqDouble = (/=)
-}

instance Ord Double where
  (<)  = primDoubleLT
  (<=) = primDoubleLE
  (>)  = primDoubleGT
  (>=) = primDoubleGE
  
{-
(<)  :: Double -> Double -> Bool
(<)  = primDoubleLT
(<=) :: Double -> Double -> Bool
(<=) = primDoubleLE
(>)  :: Double -> Double -> Bool
(>)  = primDoubleGT
(>=) :: Double -> Double -> Bool
(>=) = primDoubleGE

ltDouble :: Double -> Double -> Bool
ltDouble = (<)

leDouble :: Double -> Double -> Bool
leDouble = (<=)

gtDouble :: Double -> Double -> Bool
gtDouble = (>)

geDouble :: Double -> Double -> Bool
geDouble = (>=)
-}

-- | this primitive will print doubles with up to 6 decimal points
-- it turns out that doubles are extremely tricky, and just printing them is a
-- herculean task of its own...
instance Show Double where
  show = primDoubleShow

--------------------------------